【问题标题】:Android ndk-build ignoring APP_ABI := x86Android ndk-build 忽略 APP_ABI := x86
【发布时间】:2012-04-23 07:00:58
【问题描述】:

我正在尝试运行 NDK 来编译本机代码以在 Atom(x86) 处理器和 ARM 上运行。无论我如何设置 APP_ABI,NDK 都在生成 armeabi 库。即使我只为 APP_ABI 放置 x86。并且文件大小始终相同。这是我的 Application.mk 文件:

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。

【问题讨论】:

    标签: android android-ndk


    【解决方案1】:

    您应该将 APP_ABI 变量放在 Application.mk 文件而不是 Android.mk 文件中。

    它写在 NDK 的文档中(docs/CPU-ARCH-ABIS.html 文件)。

    【讨论】:

    • +1 我不知道以前的问题,但我喜欢你在这里回答我将 APP_ABI := all 放入 android.mk 并且它不起作用但是当我放入 application.mk 时它起作用了谢谢很多…………
    • 为什么人们不从 ndk 的 docs 目录中读取 html 文件对我来说仍然是个谜 :)
    • 没什么神秘的。请大家偷懒。
    • @Mārtiņš - 他为什么要使用Application.mk?他有include $(BUILD_SHARED_LIBRARY),所以他显然是在构建一个共享库;而不是应用程序。另外,Android.mk 文档状态用于在 Android.mk 中定义 APP_“这是您应该依赖或在 Android.mk 中定义的变量列表...”
    【解决方案2】:

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

    project_root/jni/Application.mk

    为其添加目标编译平台:

    APP_ABI := x86

    或平台:

    APP_ABI := armeabi armeabi-v7a x86 mips

    【讨论】:

    • 该文件甚至不需要任何其他内容。为什么不读?逻辑上它需要在另一个 .mk 中,这非常令人困惑。特别是因为它将在没有 Application.mk 的情况下构建 armeabi!
    【解决方案3】:

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

    ndk-build APP_ABI=x86
    

    【讨论】:

    • 这正是您在 Android Studio 中运行 externalNativeBuild.ndkBuild 时所发生的事情,因此 Application.mk 中的任何 APP_ABI 都会被忽略,请参阅 stackoverflow.com/a/45604243/192373
    猜你喜欢
    • 1970-01-01
    • 2018-01-18
    • 2018-06-02
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多