我们有一个Android NDK项目,它有三种不同的构建配置:
由于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
文件的命令是可能的,但我们也不知道如何执行此操作。
答案 0 :(得分:5)
Android 4.0有bug。如果您提供armeabi
和armeabi-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。