【发布时间】:2013-01-03 10:13:19
【问题描述】:
背景
我最近开始使用 NDK 开发一些代码,并且我想到了在使用 NDK 进行开发时可能会出现的可移植性问题。
问题
由于 NDK 使用原生代码,因此需要根据 CPU 架构进行编译。这是一个问题,因为无论设备具有什么 CPU,用户都需要运行应用程序。
目前我发现的可能解决方案
我注意到我可以修改文件“jni/Application.mk”并使用:
APP_ABI := armeabi armeabi-v7a x86
但是,我不知道从这一步开始我应该做什么。应用程序是否包含每个 CPU 架构的所有编译代码,并在运行时自动选择正确的代码?
另外,如果会有另一个未知的 CPU 架构怎么办?
如果我尝试在 Google TV 上运行该应用程序会发生什么,据我记得它根本不支持 NDK?
我发现的另一个解决方案是多 apk 支持。但是,我不确定我是否理解它。这是否意味着您每次都使用不同的配置创建相同的 APK?没有来自 ADT 的特殊自动化工具来帮助解决这个问题?
【问题讨论】:
-
"应用程序是否会包含每个 CPU 架构的所有编译代码,并在运行时自动选择正确的代码?" -- 是的。
-
“没有来自 ADT 的特殊自动化工具来帮助解决这个问题?” -- 不,因为假设您需要不同的代码来处理不同的环境。如果您确实不需要需要不同的代码,那么您很可能不需要多个 APK。
-
不错。你为什么不把答案放在一个真实的帖子里?另外,你能回答其他问题吗?这很有趣。
-
您是否尝试运行
ndk-build并为库定义APP_ABI := armeabi armeabi-v7a x86?我只能得到它来构建armeabi。ndk-build忽略其他架构。 -
我刚刚使用了所选答案上的内容,对我来说效果很好:APP_ABI := all
标签: android android-ndk java-native-interface cpu-architecture