2012-04-10 50 views
41

我想运行NDK编译本机代码以运行Atom(x86)处理器以及ARM。无论我如何设置APP_ABI,NDK都会生成armeabi库。即使我只将APP用于APP_ABI。文件大小始终相同。这里是我的Application.mk文件:Android ndk生成忽略APP_ABI:= x86

LOCAL_PATH := $(call my-dir) 
APP_ABI := x86 
include $(CLEAR_VARS) 

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 
LOCAL_MODULE := myjni-jni 
LOCAL_SRC_FILES := myjni-jni.c 

include $(BUILD_SHARED_LIBRARY) 

不管我APP_ABI后把我越来越armeabi其总是相同的尺寸。这里有什么问题?我正在使用最新的NDK。

回答

72

你应该把APP_ABI变量放在Application.mk文件不是Android.mk文件。

它是用NDK(docs/CPU-ARCH-ABIS.html文件)的文档编写的。

+0

+1我不知道以前的问题,但我很喜欢你在这里回答我把APP_ABI :=所有在android.mk,它不工作,但是当我把它放在application.mk它的作品非常感谢.......... – 2012-04-11 11:59:49

+1

它仍然是一个谜为什么人们不会阅读HTML来自ndk中docs目录的文件 – 2012-04-11 17:56:16

+1

没有神秘感。 Ppl很懒。 – 2013-12-19 04:28:45

35

如果您没有Application.mk文件,请在project root下创建一个位于jni文件夹内的文件夹。

project_root/JNI/Application.mk

添加目标编译平台,它:

APP_ABI:= 86

或平台:

APP _ABI:= armeabi armeabi-V7A 86 MIPS

+1

该文件甚至不需要其他任何东西。为什么不读?这很复杂,它需要在另一个.mk逻辑上。尤其是因为它会在没有Application.mk的情况下构建armeabi! – 2014-08-27 05:23:23

4

您也可以设置APP_ABI直接ndk-build shell命令:

ndk-build APP_ABI=x86 
+0

这正是您在Android Studio中运行externalNativeBuild.ndkBuild时发生的问题,因此Application.mk中的任何APP_ABI都会在此处被忽略,请参阅https://stackoverflow.com/a/45604243/192373 – 2017-08-10 10:15:15