apk瘦身相关

167 阅读2分钟

前言:这是本人学习过程中的一些笔记,可能具体逻辑不会那么连贯,如果有错误之处,敬请斧正。

apk中文件大致介绍

  • aapt对应 -> R资源文件
  • ressources.arsc -> 配合R.java完成对应数据提取的辅助信息。

六点优化处理

1.优化图片

svg

  • 缺点:渲染速度慢,需要经过一次生成才能由cpu渲染,5.0之前不支持。
  • 优点:扩展性好,动态渲染,可以在生成的那里做处理,然后相当于是一个xml文件,所以占用空间小。
  • 适用场景:图标。 png
  • 使用场景:logo jpg
  • 缺点:不支持透明通道,透明会变成白色保存,有损压缩,会导致图片拉大变糊。
  • 使用场景:高保真图标 webp
  • 使用场景:网络传输

资源选择:一般采用720规格做一套图,不会做多套图。

2.删除无用引用(慎用)

3.进行代码混淆和压缩

minifyEnabled = true 然后写混淆文件,注意反射的使用。

4.资源缩减

shrinkResources = true 只管资源,不处理java文件,会把资源打进包中,不会删除文件,但是会将无用资源压缩,比如将图片替换成空白图片。

5.备用资源剔除

as会将几十个版本的语言放到strings的映射表中,如果只需要特定的语言, 例如英语:

resCondigs 'en',在defaultConfig中写入即可。

一份string可以解决所有翻译?(怎么操作,应该是备用资源启用,且里面存在的字符是android内置翻译,自己业务逻辑并不能这样多语言处理)

6.so文件优化

处理不需要的so:

  • so包是用于支撑cpu架构指令的处理,是由ndk编译处理的动态库
  • android使用arm架构,但arm也分很多不同的版本。 image.png image.png 只配置需要的so库即可。不处理的话,所有so库都会被打包进去。 一般生产包ndk{abiFilters "armeabi" , "armeabi-v7a","armeabi-v8a"}就可以.
  • 可以用splits做分包处理,同时打出不同架构的包。

image.png 远程so:

  • 文件需要加密和签名!不然入侵者可以很轻易替换你自己的包。
  • 流程就是首先检查本地有没有so文件,没有就从网络拿

Matrix ApkChecker 使用

官方文档android安装包的分析检测工具

  • 大致是先下载jar包,根据自己的包写config.json配置。然后运行命令

java -jar 名字.jar --config config.json