Android Construyendo ejecutables nativos para Android


Ejemplo

proyecto / jni / main.c

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

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

proyecto / jni / Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := hello_world
LOCAL_SRC_FILES := main.c
include $(BUILD_EXECUTABLE)

proyecto / jni / Application.mk

APP_ABI := all
APP_PLATFORM := android-21

Si desea admitir dispositivos con versiones de Android inferiores a 5.0 (API 21), debe compilar su binario con APP_PLATFORM establecido en una API más antigua, por ejemplo, android-8 . Esto es una consecuencia de la aplicación de binarios independientes de posición (PIE) de Android 5.0, mientras que los dispositivos más antiguos no necesariamente admiten PIE. Por lo tanto, debe utilizar el PIE o el no PIE, dependiendo de la versión del dispositivo. Si desea utilizar el binario desde su aplicación de Android, debe verificar el nivel de API y extraer el binario correcto.

APP_ABI se puede cambiar a plataformas específicas como armeabi para construir el binario solo para esas arquitecturas.

En el peor de los casos, tendrá un binario PIE y otro no binario para cada arquitectura (aproximadamente 14 binarios diferentes que usan ndk-r10e).

Para construir el ejecutable:

cd project
ndk-build

Encontrará los binarios en project/libs/<architecture>/hello_world . Puede usarlos a través de ADB ( push y chmod it con permiso ejecutable) o desde su aplicación (extraer y chmod it con permiso ejecutable).

Para determinar la arquitectura de la CPU, recupere la propiedad de construcción ro.product.cpu.abi para la arquitectura primaria o ro.product.cpu.abilist (en dispositivos más nuevos) para obtener una lista completa de las arquitecturas compatibles. Puede hacerlo usando la clase android.os.Build desde su aplicación o usando getprop <name> través de ADB.