android - 如何设置 Eclipse 的构建配置以生成正确的、可调试的 NDK 应用程序?

标签 android eclipse debugging android-ndk adt

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

  1. 调试 - armeabi
  2. 调试 - armeabi-v7a
  3. 发布 - 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 可用时,Android 4.0 会忽略 armeabi-v7a

这就是为什么您可以针对 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/

相关文章:

android - 如何以编程方式选择自定义列表适配器中的所有复选框?

java - Antlr4 : Evaluate math functions f(x)

ios - 如何调试大的 UIView 内存分配

java - 从 DialogFragment 调用 FileProvider 时出错 - 引用对象为空,

android - 如何通过 Android 手机访问我的本地主机?

java - 如何在 Eclipse 中的 Java 调试中找到实例构造函数调用?

python - 在 Python 中以图形方式显示对象和引用

python - 模块未找到错误 : No module named 'xxxdjango'

android - 单击项目时禁用 RecyclerView

eclipse - 创建 GWT Maven 项目