Android NDK and CPU architectures
Android NDK and CPU architectures
我刚刚开始使用 Android NDK,我看到大多数使用 Android NDK 的开源应用程序都针对多个 CPU 架构编译了C++库。这真的有必要吗?如果是这样,这是否意味着生成的apk将包含多次编译的C++库,因此apk会变得非常大?如果有人尝试在没有编译库的 CPU 架构上运行该应用程序,会发生什么?另外,有关如何为Android构建C++库的好教程将不胜感激。
没有必要将它们全部放置,但如果您不这样做,则排除了此体系结构的设备。apk 将包含所有二进制文件,安装程序将在安装时选择正确的二进制文件,因此不会发生运行针对另一个应用程序的二进制文件的情况(除非我们正在考虑越狱设备)。
NDK 软件包包含构建 Android 原生代码所需的所有文档(在文档文件夹中)。
您可以为不同的处理器架构构建单独的APK文件,Play商店完全支持此功能。您的客户不会下载一个"胖"APK,而是只会得到他们真正需要的东西,请参阅Android为不同的处理器架构构建单独的Apk。
要使用 ant 执行此类构建,可以使用以下脚本:
<target name="-pre-build">
<exec executable="${ndk.dir}/ndk-build" failonerror="true"/>
<arg value="APP_ABI=${abi}"/>
</target>
并使用批处理文件运行循环(我使用一个简单的sed
脚本;sed 在 %NDK_ROOT%prebuiltwindowsbin
和所有其他平台上可用):
sed -i -e "s/versionCode="([0-9]*).]"/versionCode="11"/" AndroidManifest.xml
ant -Dsdk.dir=%SDK_ROOT% -Dndk.dir=%NDK_ROOT% -Dabi=armeabi release
ren %apkfile%.apk %apkfile%_armeabi.apk
sed -i -e "s/versionCode="([0-9]*)."/versionCode="12"/" AndroidManifest.xml
ant -Dsdk.dir=%SDK_ROOT% -Dndk.dir=%NDK_ROOT% -Dabi=mips release
ren %apkfile%.apk %apkfile%_mips.apk
sed -i -e "s/versionCode="([0-9]*)."/versionCode="13"/" AndroidManifest.xml
ant -Dsdk.dir=%SDK_ROOT% -Dndk.dir=%NDK_ROOT% -Dabi=armeabi-v7a release
ren %apkfile%.apk %apkfile%_armeabi-v7a.apk
sed -i -e "s/versionCode="([0-9]*)."/versionCode="14"/" AndroidManifest.xml
ant -Dsdk.dir=%SDK_ROOT% -Dndk.dir=%NDK_ROOT% -Dabi=x86 release
ren %apkfile%.apk %apkfile%_x86.apk
这假设清单文件中的android.verisonCode最后一个数字为零,例如 android:versionCode="40260"
.
请注意,从技术上讲,没有理由更改 armeabi 和 mips 变体的版本代码,但将 armeabi 保留
相关文章:
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 如何禁用 CPU 的无序执行
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 分别测量每个线程上花费的 CPU 时间(C++)
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 在程序运行时监视 VxWorks 中的任务 CPU 利用率
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 您选择的 CPU 不支持 x86-64 指令集
- 如何降低应用程序的 CPU 使用率?
- 对于 CPU 无法原子操作的类型,std::atomic 有什么意义?
- 如何区分CPU和内存瓶颈?
- 如何以编程方式获取任务管理器进程CPU使用率(不是PerfMon API)
- CPU 如何提供memory_order_acquire保证?
- 一段时间后 CPU 使用率高
- C/C++memcpu基准测试:测量CPU和墙时间
- 高CPU使用率,在API桌面复制中获取帧之间具有不同的超时间隔
- 超过CPU时间限制:当MPI_Sent一个非常大的int*时
- Android NDK and CPU architectures