2014-02-14 15 views
8

In meiner aktuellen Build Build-Setup für Android native Code ist APP_ABI zu armeabi-v7a in Application.mk definiert. Für einige der Bibliotheken, die ich baue, sehe ich, dass LOCAL_ARM_MODE als Arm in Android.mk definiert ist.Android NDK und LOCAL_ARM_MODE flag

Ich muss diese Einrichtung erweitern, um für x86 ebenso zu bauen. Von einem anderen Beitrag scheint es mit "APP_ABI = alle" eine bessere Lösung zu sein. Ich frage mich nur, ob LOCAL_ARM_MODE auch geändert werden muss. Was macht diese Flagge überhaupt?

Antwort

6

Der LOCAL_ARM_MODE kann verwendet werden, um die Plattform zu definieren, auf die Ihre Anwendung ausgerichtet ist. Um auch Ihre Android.mk Setup für x86 sind nur die erforderlichen Informationen zu Ihrer Android.mk Datei - z.B .:

ifeq ($(TARGET_ARCH),arm) 
    LOCAL_CFLAGS := -mfpu=neon -march=armv6t2 -O9 
    LOCAL_SRC_FILES := engine-arm.s 
endif 
ifeq ($(TARGET_ARCH),x86) 
    LOCAL_CFLAGS := -msse2 -m32 -masm=intel 
    LOCAL_SRC_FILES := engine-x86.s 
endif 

Für weitere Informationen über andere Option zur Definition Ihrer Anwendung Ziel, einen Blick in /docs/Android-mk.

Quelle: Compile assembly code for ARM and X86

2

Obwohl dies eine alte Post ist, ich möchte nur darauf hinweisen, dass die akzeptierte Antwort nicht korrekt ist.

LOCAL_ARM_MODE kann entweder auf "Arm" oder "Daumen" eingestellt werden und ist standardmäßig auf "Daumen" eingestellt. "Daumen" verwendet 16-Bit-Anweisungen, während "Arm" 32-Bit-Anweisungen verwendet. Die 16-Bit-Anweisungen sind zwar kleiner, können aber bei einigen leistungskritischen Anwendungen zu langsam sein. Aus diesem Grund wurde in einigen Bibliotheken das Flag "arm" gesetzt, um den Build mit 32-Bit-Anweisungen sicherzustellen. Natürlich ist diese Flagge nur sinnvoll, wenn Sie für die Armarchitekturen bauen.

Auf der anderen Seite ist APP_ABI das richtige Flag, mit dem Sie umschalten können, wenn Sie für verschiedene Architekturen wie armeabi- * oder x86 und viele mehr erstellen möchten. Weitere Informationen finden Sie in der Dokumentation zu Android.mk