印象笔记目录架构_android基础架构建设

印象笔记目录架构_android基础架构建设64 位 CPU 能够为您的用户提供更快、更丰富的体验。添加 64 位的应用版本不仅可以提升性能、为未来创新创造条件,还能针对仅支持 64 位架构的设备做好准备。

  • 64位架构升级的背景

为更好地提升APP性能体验,降低APP功耗影响,小米应用商店与OPPO应用商店、vivo应用商店共同推进国内安卓生态对64位架构的升级支持。行业适配节奏如下:

  • 2021年12月底:现有和新发布的应用/游戏,需上传包含64位包体的APK包(支持双包在架,和64位兼容32位的两个形式,不再接收仅支持32位的APK包)
  • 2022年8月底:硬件支持64位的系统,将仅接收含64位版本的APK包
  • 2023年底:硬件将仅支持64位APK,32位应用无法在终端上运行

公告链接:dev.mi.com/distribute/…

  • 64位架构升级前期准备

64 位 CPU 能够为您的用户提供更快、更丰富的体验。添加 64 位的应用版本不仅可以提升性能、为未来创新创造条件,还能针对仅支持 64 位架构的设备做好准备。

  • 1、评估您的应用

如果您的应用仅使用以 Java 编程语言或 Kotlin 编写的代码(包括所有库或 SDK),那么就表示该应用已经能支持 64 位设备。如果您的应用使用了任何原生代码,或者您不确定应用是否使用了这类代码,那么您需要评估应用并采取措施。

  • 2、查看你的应用是否使用了原生代码?

首先需要检查您的应用是否使用了任何原生代码。 如果您的应用符合以下情况,便是使用了原生代码:

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

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

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

  • 3、应用是否包含 64 位库?

若要确定应用是否包含 64 位库,最简单的方法就是检查 APK 文件的结构。在构建时,APK 会与应用所需的所有原生库打包在一起。原生库会根据 ABI 存储在不同的文件夹中。您的应用不一定要支持所有 64 位架构,但对于支持的每种原生 32 位架构,应用都必须包含相应的 64 位架构。

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

对于 x86 架构,32 位库位于 x86 中,64 位库则位于 x86_64 中。

首先要确保这两个文件夹中都有原生库。总结如下:

平台 32 位库文件夹 64 位库文件夹
ARM lib/armeabi-v7a lib/arm64-v8a
x86 lib/x86 lib/x86_64

请注意,每个文件夹中的一套库可能完全相同,也可能不完全相同,这取决于应用的具体情况。您应达到的目标是确保您的应用能够在仅支持 64 位架构的环境中正常运行。

通常情况下,同时针对 32 位和 64 位架构构建的 APK 或软件包会具有这两种 ABI 的文件夹,每个文件夹中都有一套相应的原生库。如果您的应用不支持 64 位架构,那么您很可能会看到 32 位 ABI 文件夹,但没有 64 位文件夹。

  • 4、查看你的应用中的原生库

查看APK中原生库的方式

参考文档:developer.android.com/distribute/…

  • 使用64位架构构建APK

通过查看apk中的原生库,我们需要一一找到各个原生库的64位版本,并编译打包到apk中 以我们的工程为例:

image.png

如果上图所示,apk中引用了十几个原生库,我们需要找到各个来源并重新打包apk。 原生库的so来源大致可以分几类:

  • 引用第三方SDK的aar里面的so
  • 引用第三方SDK,复制so文件到jnilib目录
  • 本地工程的C++源码,编译成so引入工程中

接下来我们挨个分析场景:

  • 1、第三方SDK中aar的so

image.png 如上图所示,小米支付的aar中,只有armeabi-v7a的so,没有arm64-v8a的so。 因为我们需要升级小米支付,一般情况下,最新版的SDK,都会提供64位的so。 如下图所示:

image.png

  • 2、直接复制第三方SDK的so到工程目录

image.png

如上图所示,libetconverter.so 就是第三方SDK的一个原生库。 我们能做的就是找到这个第三个SDK的提供者,并找到不同平台的so,如armeabi-v7a,arm64-v8a,x86,x86_64。 然后将so放到对应的文件夹目录,重新打包即可。

由于工程历史较久远,相关SDK可能已停止维护,因此这一项可能会耗费你很多精力去查找。

  • 3、本地工程的C++源码编译so

image.png
如上图所示,工程中有部分功能,为了更快的效率或者从PC、ios等共享的源码,我们需要编译相关C++文件,生成so。

  • 3.1 使用ndk-build编译so

使用ndk-build 编译文档,可以参考:
Android Studio 简单生成so文件并调用
如何编译可执行程序

编译流程,简单概况如下:
(1)创建.c源文件,编写C代码。

(2)编写两个android.mk和application.mk文件:文件官方说明点 Application.mk

android.mk示例 image.png

Application.mk 示例,其中APP_STL := stlport_static 由于ndk版本升级,改为了APP_STL := c++_static image.png

(3)Android studio下载ndk,并配置环境变量

image.png

(4)打开命令行,cd到项目工程的jni目录,输入ndk-build 即可编译,

image.png 编译后生成的文件目录:

image.png

复制各平台的so,到工程的对应目录即可。

  • 3.2 使用CMake编译so

使用CMake的方式,可以参考如下文档

CMake编译

developer.android.com/studio/proj…

向您的项目添加 C 和 C++ 代码

  • 使用gradle 64 位库构建应用

使用 Android Studio 或 Gradle 进行构建

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

// Your app's build.gradle
apply plugin: 'com.android.app'

android {
   compileSdkVersion 27
   defaultConfig {
       appId "com.google.example.64bit"
       minSdkVersion 15
       targetSdkVersion 28
       versionCode 1
       versionName "1.0"
       ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
// ...

由于so文件不是很大,因此32位和64位的so,我们都打包到同一个apk了。 如果so文件过大,可以考虑,32位和64位so打包两个apk安装包,降低体积 小米、oppo等商店支持32位和64位分开上传安装包,并且在应用商店搜索,也只会跟进手机硬件型号,只搜到一apk。
上传apk参考文档:dev.mi.com/distribute/…

  • 在64位硬件上测试应用

image.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13355.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注