and*_*per 26 java-native-interface android cpu-architecture android-ndk
我最近开始使用NDK开发一些代码,我想到了使用NDK开发时可能出现的可移植性问题.
由于NDK使用本机代码,因此需要根据CPU架构进行编译.这是一个问题,因为无论设备具有什么CPU,用户都需要运行应用程序.
我注意到我可以修改文件"jni/Application.mk"并使用:
APP_ABI:= armeabi armeabi-v7a x86
但是,我不知道从这一步开始我应该做些什么.该应用程序是否包含每个CPU架构的所有已编译代码,并在运行时自动选择正确的代码?
另外,如果有另一个未知的CPU架构怎么办?
如果我尝试在Google TV上运行该应用会发生什么,根据我记得的内容根本不支持NDK?
我发现的另一个解决方案是多apk支持.但是,我不确定我理解它.这一切是否意味着您每次使用不同的配置创建相同的APK?ADT没有专门的自动化工具来帮助解决这个问题吗?
Ale*_*ohn 31
如果您没有设置APP_ABI,或使用
APP_ABI := all
Run Code Online (Sandbox Code Playgroud)
在您的Application.mk中,然后ndk-build将为您的NDK版本支持的所有体系结构构建.迄今为止最新的一款r8d,除此之外还将为其armeabi armeabi-v7a x86打造mips.当另一个架构发布时,您希望自动获得构建的APK来支持它.
当您的应用程序安装在Android设备上时,系统将自动选择匹配的ABI版本并从APK安装正确的共享库.
这种方法的一个缺点是,如果本机库很大,那么您的"单片"APK文件可能会变得庞大.您可以使用多APK方法使用户下载更小.在官方网站的建议:你一般应使用多个APK来支持不同的设备配置,只有当你的APK过大(大于50MB) .如果选择此路线,则应仔细遵循版本代码guildlines.
不幸的是,关于Google TV上的NDK支持没有值得信赖的预言,但目前的不可用性似乎没有技术上的合理性.如果它到达,你的ndk-build将自动处理它.
更新 这是一个维护拆分APK的简单过程.顺便说一句,新的Android TV确实支持NDK.
对于最新版本(现在为r9),您必须在"jni/Application.mk"中指定
APP_ABI := all
Run Code Online (Sandbox Code Playgroud)
要么
APP_ABI := armeabi armeabi-v7a x86 mips
Run Code Online (Sandbox Code Playgroud)
没有./ndk_build只会构建'armeabi'
| 归档时间: |
|
| 查看次数: |
18532 次 |
| 最近记录: |