Essential Android Android NDK edit forum

Building native executables for Android


#include <stdio.h>
#include <unistd.h>

int main(void) {
  printf("Hello world!\n");
  return 0;


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := hello_world


APP_ABI := all
APP_PLATFORM := android-21

If you want to support devices running Android versions lower than 5.0 (API 21), you need to compile your binary with APP_PLATFORM set to an older API, e.g. android-8. This is a consequence of Android 5.0 enforcing Position Independent Binaries (PIE), whereas older devices do not necessarily support PIEs. Therefore, you need to use either the PIE or the non-PIE, depending on the device version. If you want to use the binary from within your Android application, you need to check the API level and extract the correct binary.

APP_ABI can be changed to specific platforms such as armeabi to build the binary for those architectures only.

In the worst case, you will have both a PIE and a non-PIE binary for each architecture (about 14 different binaries using ndk-r10e).

To build the executable:

cd project

You will find the binaries at project/libs//hello_world. You can use them via ADB (push and chmod it with executable permission) or from your application (extract and chmod it with executable permission).

To determine the architecture of the CPU, retrieve the build property ro.product.cpu.abi for the primary architecture or ro.product.cpu.abilist (on newer devices) for a complete list of supported architectures. You can do this using the android.os.Build class from within your application or using getprop via ADB.

Table Of Contents
26 Android NDK
64 Menu
112 Loader
119 Xposed
132 Colors
135 Fresco
140 AdMob
147 Button
156 Vk SDK
170 XMPP
176 OpenCV
200 FileIO
203 Moshi
217 Paint
231 AIDL
241 JCodec
243 Okio
255 Looper
  ↑ ↓ to navigate     ↵ to select     Esc to close