首页 >> 大全

【Android】apk瘦身技术分享

2023-12-18 大全 32 作者:考证青年

背景

随着业务迭代,apk体积逐渐变大。项目中积累的无用资源,未压缩的图片资源等,都为apk带来了不必要的体积增加。调研了一些apk瘦身的方法后,总结如下。

可用方法

1.删除无用资源

2.删除无用方法

3.混淆(方法混淆&资源混淆

4.使用一套图片资源

5.图片压缩/其他图片格式

6.so兼容一个平台,动态下载

7.精简第三方库

删除无用资源

1⃣️开启

在build.中配置=true

首先介绍一下的原理:在打包过程中会多出一个task,通过调用一个方法进行无用资源的分析并进行处理,具体过程

1)根据R文件生成资源表,然后遍历所有的class文件,分析class中使用的资源,标记可达。

2)分析 res,分析资源文件引用的其他资源,标记可达。

3)调用,标记可能到达的资源。比如通过动态获取的资源⬇以下代码会将所有带有img_前缀的资源标记为已使用。

name = .("img_", angle + 1);

res = ().(name, "", ());

_瘦身分享文案_播放瘦身介绍

(如果想开启严格检测,不标记可能到达的资源,在keep.xml配置 tools:="",对于不进行严格检测的资源,配置tools:keep 风险:开启严格检测可能导致程序有bao

⚠️然而,经过实验发现,开启并没有使apk变小。因为在打包时,无用资源并没有直接被清理,而是把部分无用资源用更小的东西代替掉。

2⃣️开启Lint检测

在 中 -Run by Name- (过程与类似)

注意下图不要打勾,无效的id对apk体积增加微乎其微,删去却可能引起bug,得不偿失。

播放瘦身介绍__瘦身分享文案

还有一种要注意的情况

例如 请输入用户名

其中font size="16" 会被判定为无效资源,但是lint直接清除时,会把font标签内的内容全部删除,清理后的效果

(文字丢失了,lint暂时还不够智能,但这种情况比较少见,的时候仔细检查一下)

⚠️lint的检测可能存在遗漏,如第一次找到100个无用资源,删除后第二次查找后,可能还存在几个无用资源,可以多查几次

3⃣️删除无用的语言资源

在语言的配置上,只保留需要用到的语言,目前项目只保留中文即可,有些项目可能保留英文

{

"zh"

删除无用方法

1⃣️开启

实验发现,开启后方法数从13w缩减到10w,效果还是比较显著的

2⃣️使用Lint查找无用符号并删除

——Run by Name—— ()

——Run by Name—— (Java)

批量删除的时候会一直提问是否safe

开启了后无用声明等基本不会增加apk的大小

3⃣️内部类访问宿主类中的成员时,编译的时候会自动生成acces$方法,这种情况会导致方法数增多,如果

修改为非权限就可以去除这个$方法。(西瓜视频减少了5w左右的方法数,视不同项目决定)

4⃣️java语言中,考虑一些变量修饰符改为非修饰,可以减少一些set和get方法

类/方法混淆

1⃣️配置 le('-.txt'), '-rules.pro',此处采用默认的混淆文本,也可以自定义。使用keep保持不需要进行混淆的文件。

2⃣️配置优化的: le('--.txt'), '-rules.pro' (不太稳定,比如在模拟器上可能发生闪退,不推荐)

资源混淆

是微信推出的一款开源工具,对资源文件进行混淆,使用的方法很简单,效果显著。

使用方法:

原理:用更短的名字替换原来的长名字

res//icon.png 资源混淆后 r/a/b.png

res//icon.png ============> r/c/b.png

res//.png r/c/d.png

(同一文件夹被映射到相同的新路径,同样的名字被映射到相同的资源名字)

⚠️白名单:若想通过方式获得资源,需要放置白名单中,否则找不到对应资源。务必将程序桌面icon加入白名单,友盟等,加入白名单。多测试,多测试,多测试!

_播放瘦身介绍_瘦身分享文案

tags: apk

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了