这一次谷歌很强硬,App 再不支持,两个月后将拒绝上架,2024年最新手把手教你在Android-Studio上分析内存泄漏

在左边的情况下,如果 arm64-v8a 的手机用到 b.so 时,就会去 arm64-v8a 目录下找,当然是找不到 b.so 文件的,就会直接抛异常,而不会再去 armeabi-v7a 目录下继续寻找。

如果需要提供多套 ABIs 的支持,就需要保证所有 ABI 目录下,对应的 so 文件保持一致。

而在一些特殊的情况下,我们无法提供对应平台的 so 库,例如腾讯 X5 内核这种情况,就需要做个取舍了。

在没有 Google Play 的强制策略下,同时又因为各方考虑,大多数时候我们可能会舍弃其他 ABIs 的支持。但是现在既然强制执行了,腾讯 X5 内核就可能升级以提供 64 位的 so 库,毕竟一边是无法上架,另外一遍是一个 WebView 的内核,谁都知道怎么取舍。

三、支持 64 位架构


3.1 是否包含 64 位库?

介绍了 Android 下 CPU 架构的一些细节,接下来就要开始正题了,如何升级并支持 64 位架构。

从前文中应该了解到,支持对应的 ABIs,反映在项目中,就是存在对应 ABIs 架构的目录,并且目录中有完备的 so 库支持。

Google 并不要求我们支持所有的 64 位架构,但是对于已经支持的每种原生 32 位架构,就必须包含对应的 64 位架构。

例如:

  • 对于 ARM 架构,有 armeabi-v7a(32位) 就必须 arm64-v8a(64位)。

  • 对于 x86 架构,有 x86(32位) 就必须有 x86_64(64位)

这就要求我们有对应的目录,并且目录中包含对应的 so 文件。APK 中提供了完备的 ABIs 支持,运行的之后,会选取对应的最优支持进行加载和使用。

需要注意的是,有时候我们将 32 位的 so 复制到 64 位中,运行不会出现异常,但是这依然存在隐患。最好的办法是根据不同的架构,编译对应的 so 文件,原则上,我们的目标是确保应用可以在仅支持 64  位架构的环境中正常运行。

3.2 判断是否支持 64 位架构

前面也提到,我们的项目中,可能会引入一些第三方库,导致在不明确的情况下,引入了一些预期之外的 ABIs 库。

通常我们的做法是在 Gradle 中增加 abiFilters 过滤,来确保不会在打包输出的 APK 中存在预期之外的 ABIs 目录和 so 库。

ndk {

//设置支持的SO库架构

abiFilters ‘armeabi-v7a’

}

那么我们拿最终打包输出的 APK 文件去分析,是最稳妥的办法。

分析的方法有两种:

1. AS 的 APK 分析器

在 Android Studio 中,从菜单依次选择  Build → Analyze APK…

选择需要分析的 APK 文件,查看其 lib 目录,是否存在预期的 ABIs 目录以及完备的 so 文件。

2. 使用 zipinfo 命令进行分析

得到待分析的 APK 文件,就可以通过 zipinfo + grep 命令,输出其内包含的 so 文件。

zipinfo -1 YOUR_APK_FILE.apk | grep .so$

lib/armeabi-v7a/libmain.so

lib/armeabi-v7a/libmono.so

lib/armeabi-v7a/libunity.so

lib/arm64-v8a/libmain.so

lib/arm64-v8a/libmono.so

lib/arm64-v8a/libunity.so

依然是去看对应目录和 so 文件是否完备。

3.3 在 64 位设备上测试应用

支持 64 位架构是为了让我们利用 CPU 的特性,以提升性能,但是稳定依然是我们首先要保证的,所以在升级之后,就需要进行测试。

要测试 App,最简单的方式是使用 adb 命令安装该应用,可以配合 --abi 参数,用以指示要将那些 so 库,安装到设备上,这样我们在这个设备上安装的 App,就会仅包含我们制定的库。

成功安装 APK :

adb install --abi armeabi-v7a YOUR_APK_FILE.apk

Success

如果 APK 中不包含 64 位 so 文件:

adb install --abi arm64-v8a YOUR_APK_FILE.apk

adb: failed to install YOUR_APK_FILE.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]

如果你的设备(手机)不支持 64 位架构

adb install --abi arm64-v8a YOUR_APK_FILE.apk

ABI arm64-v8a not supported on this device

去年上市的手机,大部分都是 64 位架构的,找一款来测试即可。

3.4 分包处理

如果我们的应用只需要在国内分发,当前的策略对我们并不影响,保持原样就好了。但是如果存在国际版,需要上架 Google Play 就一定要重视此次升级。

在 Google Play 上传 APK,是可以根据 CPU 架构上传不同的 APK 的,也就是我们可以针对 32 位上传一个 APK,再上传一个 64 位的 APK。

此时就需要用到 Gradle 的打包技巧了,分别输出几个仅包含对应平台的 APK,以此完成 Google Play 的要求,分别上传 32 位的支持 APK 和 64 位的支持 APK,这样能够 APK 文件不至于增大很多。

android {

splits {

abi {

enable true

reset()

include ‘x86’, ‘x86_64’, ‘armeabi-v7a’, ‘arm64-v8a’ //select ABIs to build APKs for

universalApk true //generate an additional APK that contains all the ABIs

}

}

// map for the version code

project.ext.versionCodes = [‘armeabi’: 1, ‘armeabi-v7a’: 2, ‘arm64-v8a’: 3, ‘mips’: 5, ‘mips64’: 6, ‘x86’: 8, ‘x86_64’: 9]

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

文末

那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。
Android希望=技能+面试

  • 技能
  • 面试技巧+面试题

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img
=技能+面试**

  • 技能
    [外链图片转存中…(img-PSu9hN3i-1712764743981)]
  • 面试技巧+面试题
    [外链图片转存中…(img-8Fu4oeqa-1712764743981)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-5AJp5juU-1712764743981)]

  • 14
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值