你所在的位置: 首页 > 正文

如何为安卓应用提供64位原生的支持

2019-07-17 点击:1632

  

  狗熊镇楼

  写在开头的话 by仕明

  必须承认,64位构建会让APK的体积变的更大,多了so库嘛

  64位通常会使应用运行的更加的快,因为64位的指令集支持更高的代码运行效率,举个例子:能够使用两倍数量的寄存器,支持双精度的浮点的运算,这使得编译器可以做更加复杂的矢量化优化

  使用App Bundle发布格式在GooglePlay,Apk包的体积也不会受到太大影响,GooglePlay会按照用户设备的架构仅推送所需的文件,即使提供了32位和64位的文件,根据用户设备的架构类型,只需下载最使用的一套文件

  在GooglePaly上可以构架一个包含X86和X86-64的文件Bundle,而不用担心对目标ARM设备应用体积的影响

  从 2019 年 8 月 1 日开始,您在 Google Play 上发布的应用必须支持 64 位架构。后续不知道国内的应用市场是否也要强制

  64 位 CPU 能够为您的用户提供更快、更丰富的体验。添加 64 件,还能针对仅支持 64 位架构的设备做好准备。

  1、使用以 Java 编程语言或 Kotlin 编写的代码(包括任何库或 SDK),那么就表示该应用已经支持 64 位设备

  2、应用使用了任何原生代码,或者不确定自己的应用是否使用了这类代码,那么需要评估应用并相应采取措施。

  是否使用了原生代码?

  使用了任何 C/C++(原生)代码。

  与任何第三方原生库关联。

  通过使用原生库的第三方应用构建程序构建而成。

  应用是否包含 64 位库?

  要确定应用是否包含 64 位库,最简单的方法就是检查 APK 文件的结构,在编译时,APK 会与应用所需的所有原生库打包在一起。应用无需支持所有 64 位架构,但对于支持的每种原生 32 位架构,则应用都必须包含相应的 64 位架构。,说通俗一点就是成对?某鱿钟Φ敝С值募芄?

  对于 ARM 架构,32 位库位于 armeabi-v7a 中。对应的 64 位库位于 arm64-v8a 中

  对于 x86 架构, x86(32 位)和 x86_64(64 位)

  分析APK,只有32的架构

  

  image.png

  分析APK,32位和64位的架构

  

  image.png

  如果使用 或 进行编译,如何为安卓应用提供64位原生的支持呢?

  大多数 Android Studio 项目都使用 Gradle 作为底层编译系统,因此本部分适用于使用这两种工具进行编译的情况。针对原生代码进行编译很简单,只需将 arm64-v8a 和/或 x86_64(取决于您要支持的架构)添加到应用的“build.gradle”文件中的 ndk.abiFilters 设置

  在 加入

  

  image.png

  如果使用 CMake 进行编译?

  可以通过将 arm64-v8a 传递到“-DANDROID_ABI”参数来编译 64 位 ABI

  使用 ndk-build 进行编译?JNI

  可以通过 变量修改“app.mk”文件,从而编译 64 位 ABI:

日期归档
胜博发888 版权所有© www.ailijiaguoji.com 技术支持:胜博发888 | 网站地图