我们有一个 Android NDK 项目,它具有三种不同的构建配置:

  • 调试 - armeabi
  • 调试 - armeabi-v7a
  • 发布 - aremabi + armeabi-v7a

  • 由于 Android 加载程序中的一个已知错误,我们指定了单独的 aremabi 和 armeabi-v7 调试配置,如果指定了多个 EABI,调试器可能会启动应用程序的错误 EABI 版本,并且不会命中 native 断点 ( More details here, at the end of the document ) .

    过去,我们编辑 Application.mk 文件并通过 APP_ABI 变量指定所需的 EABI。

    我们希望避免这种手动编辑并利用 Eclipse 的构建配置并自动选择正确的 EABI 设置。

    到目前为止,我们通过向 Application.mk 文件添加条件来获得一个可行的解决方案

    这是我们的 Application.mk 的样子:
    ifeq ($(BUILD_CONFIG),RELEASE)
        APP_OPTIM := release
        APP_ABI := armeabi armeabi-v7a
    else ifeq ($(BUILD_CONFIG),ARMEABIV7A_DEBUG)
        APP_OPTIM := debug
        APP_ABI := armeabi-v7a
    else ifeq ($(BUILD_CONFIG),ARMEABI_DEBUG)
        APP_OPTIM := debug
        APP_ABI := armeabi
    endif
    

    此外,我们在 Eclipse 中自定义了编译器构建命令行,以便将正确的 BUILD_CONFIG 变量传递给 make 脚本。

    这对于编译目的非常有效,但是当我们尝试调试应用程序时问题就开始了。问题是我们不知道如何将 BUILD_CONFIG 变量传递给 ndk-gdb 脚本。

    运行 ndk-build DUMP_APP_ABI 命令将始终返回 ARMEABI(预期,因为我们没有明确定义 BUILD_CONFIG 参数),据我所知,这是 ndk-gdb 正在读取的值,以便决定哪个版本的应用程序将由调试器。

    有没有人设法让这个工作或有一个替代解决方案,我们可以使用 Eclipse 的构建配置进行编译和调试?运行一个修补或重命名 Application.mk 文件的命令是可能的,但我们也不知道如何做到这一点。

    最佳答案

    Android 4.0 有错误。如果您提供 armeabiarmeabi-v7a 代码,那么即使您有 ARMv7 兼容的 CPU,也会加载 armeabi 代码。当 armeabi-v7a 可用时,Android 4.0 会忽略 armeabi

    这就是为什么您可以针对 armeabi (ARMv5) 创建 2 个版本的库

    但是没有 ARMv5 CPU(HTC Hero)
    所以大多数 CPU 都是 ARMv6 或 ARMv7

    您应该用 Java 检测您的 CPU 并加载适当的 native 库。
    执行这些操作将使您能够准确控制 .so 加载的内容。
    您将能够创建具有 NEON 支持的库。

    关于android - 如何设置 Eclipse 的构建配置以生成合适的、可调试的 NDK 应用程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21030395/

    10-11 11:02