Android
Android NDK
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);