如何设置Eclipse的Build Configurations以生成适当的,可调试的NDK应用程序?

时间:2014-01-09 20:25:07

标签: android eclipse debugging android-ndk adt

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

  1. DEBUG - armeabi
  2. DEBUG - armeabi-v7a
  3. RELEASE - aremabi + armeabi-v7a
  4. 由于Android加载程序中存在已知错误,我们指定了单独的aremabi和armeabi-v7调试配置,如果指定了多个EABI,调试器可能会启动错误的EABI版本的应用程序,并且不会发现本机断点(More details here, at the end of the document)。

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

    我们希望避免这种手动编辑,并利用Eclipse的Build Configurations并自动选择合适的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参数,因此预期),据我所知,这是{{{ 1}}正在读取以决定调试器将启动哪个版本的应用程序。

    有没有人设法让这个工作或有一个替代解决方案,我们可以使用Eclipse的构建配置正确地进行编译和调试?运行修补或重命名ndk-gdb文件的命令是可能的,但我们也不知道如何执行此操作。

1 个答案:

答案 0 :(得分:5)

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

这就是为什么你可以创建两个版本的目标为armeabi的lib(ARMv5)

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

您应该使用Java检测CPU并加载适当的本机库。 执行这些操作可以控制完全加载的.so。 您可以使用NEON支持创建lib。