Suche…


Native ausführbare Dateien für Android erstellen

Projekt / jni / main.c

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

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

Projekt / jni / Android.mk

LOCAL_PATH := $(call my-dir)

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

Projekt / jni / Anwendung.mk

APP_ABI := all
APP_PLATFORM := android-21

Wenn Sie Geräte unterstützen möchten, auf denen Android-Versionen niedriger als 5.0 (API 21) ausgeführt werden, müssen Sie Ihre Binärdatei mit APP_PLATFORM auf eine ältere API, z. B. android-8 , kompilieren. Dies ist eine Folge von Android 5.0, bei dem Position Independent Binaries (PIE) erzwungen wird, während ältere Geräte PIEs nicht unbedingt unterstützen. Daher müssen Sie je nach Geräteversion entweder die PIE oder die Nicht-PIE verwenden. Wenn Sie die Binärdatei in Ihrer Android-Anwendung verwenden möchten, müssen Sie die API-Ebene überprüfen und die korrekte Binärdatei extrahieren.

APP_ABI kann auf bestimmte Plattformen wie armeabi , um die Binärdatei nur für diese Architekturen zu erstellen.

Im schlimmsten Fall haben Sie für jede Architektur eine PIE- und eine Nicht-PIE-Binärdatei (etwa 14 verschiedene Binärdateien mit ndk-r10e).

Um die ausführbare Datei zu erstellen:

cd project
ndk-build

Sie finden die Binärdateien unter project/libs/<architecture>/hello_world . Sie können sie über ADB ( push und chmod mit ausführbarer Berechtigung) oder von Ihrer Anwendung (Extrahieren und chmod mit ausführbarer Berechtigung) verwenden.

Um die Architektur der CPU zu ermitteln, ro.product.cpu.abi die Build-Eigenschaft ro.product.cpu.abi für die primäre Architektur oder ro.product.cpu.abilist (auf neueren Geräten) ab, um eine vollständige Liste der unterstützten Architekturen zu erhalten. Sie können dies mit der android.os.Build Klasse in Ihrer Anwendung oder mit getprop <name> über ADB getprop <name> .

So reinigen Sie den Build

Wenn Sie den Build reinigen müssen:

ndk-build clean

So verwenden Sie ein anderes Makefile als Android.mk

ndk-build NDK_PROJECT_PATH = PROJECT_PATH APP_BUILD_SCRIPT = MeinAndroid.mk

Wie melde ich mich an?

Android.mk Sie zunächst sicher, dass Sie eine Verbindung zur Protokollierungsbibliothek in Ihrer Android.mk Datei herstellen:

LOCAL_LDLIBS := -llog   

Verwenden Sie dann einen der folgenden __android_log_print() Aufrufe:

#include <android/log.h>    
#define TAG "MY LOG"

__android_log_print(ANDROID_LOG_VERBOSE,    TAG, "The value of 1 + 1 is %d", 1 + 1)
__android_log_print(ANDROID_LOG_WARN,       TAG, "The value of 1 + 1 is %d", 1 + 1)
__android_log_print(ANDROID_LOG_DEBUG,      TAG, "The value of 1 + 1 is %d", 1 + 1)
__android_log_print(ANDROID_LOG_INFO,       TAG, "The value of 1 + 1 is %d", 1 + 1)
__android_log_print(ANDROID_LOG_ERROR,      TAG, "The value of 1 + 1 is %d", 1 + 1)

Oder verwenden Sie diese auf bequemere Weise, indem Sie entsprechende Makros definieren:

#define  LOGV(...)  __android_log_print(ANDROID_LOG_VERBOSE,    TAG, __VA_ARGS__)
#define  LOGW(...)  __android_log_print(ANDROID_LOG_WARN,       TAG, __VA_ARGS__)
#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,      TAG, __VA_ARGS__)
#define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,       TAG, __VA_ARGS__)
#define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,      TAG, __VA_ARGS__)

Beispiel :

int x = 42;
LOGD("The value of x is %d", x);


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow