![e20ed37d39e76526a41884f77367f753.png](https://img-blog.csdnimg.cn/img_convert/e20ed37d39e76526a41884f77367f753.png)
一个APP的包之所以大,主要包括一下文件
瘦身就主要瘦这些。
一、打包的時候刪除不用的代码
二、减少不必要的打包
或者
三、lib
尽量不用太复杂的lib,轻量级lib是首选。如果你的应用没用到兼容库,可以考虑去掉support包。
四、资源文件
我们可以通过Lint工具找到没有使用的资源(在Android Studio的“Analyze”菜单中选择“Inspect Code…”)
五、把现有图片转换为webP
我们可以通过 智图 或者isparta将其它格式的图片转换成webP格式,isparta可实现批量转换。
五、图片相关
六、混淆
1 构建多个版本
2 混淆参数
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
关于proguard-android.txt文件:
-dontusemixedcaseclassnames: 表示混淆时不使用大小写混淆类名。
-dontskipnonpubliclibraryclasses:不跳过library中的非public方法。
-verbose: 打印混淆的详细信息。
-dontoptimize: 不进行优化,优化可能会造成一些潜在风险,不能保证在所有版本的Dalvik上都正常运行。
-dontpreverify: 不进行预校验。
-keepattributes Annotation :对注解参数进行保留。
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService:
表示不混淆上述声明的两个类。
proguard中一共有三组六个keep关键字的含义
keep 保留类和类中的成员,防止它们被混淆或移除。
keepnames 保留类和类中的成员,防止它们被混淆,但当成员没有被引用时会被移除。
keepclassmembers 只保留类中的成员,防止它们被混淆或移除。
keepclassmembernames 只保留类中的成员,防止它们被混淆,但当成员没有被引用时会被移除。
keepclasseswithmembers 保留类和类中的成员,防止它们被混淆或移除,前提是指名的类中的成员必须存在,如果不存在则还是会混淆。
keepclasseswithmembernames 保留类和类中的成员,防止它们被混淆,但当成员没有被引用时会被移除,前提是指名的类中的成员必须存在,如果不存在则还是会混淆。
keepclasseswithmember和keep关键字的区别:
如果这个类没有native的方法,那么这个类会被混淆
不管这个类有没有native的方法,那么这个类不会被混淆
另外、 你可以使用 APK Analyser 分解你的 APK
Android Studio 提供了一个有用的工具:APK Analyser。APK Analyser 将会拆解你的应用并让你知道 .apk 文件中的那个部分占据了大量空间。让我们看一下 Anti-Theft 在没有经过优化之前的截图。
![8ee1af243483926393e48a761b68928c.png](https://img-blog.csdnimg.cn/img_convert/8ee1af243483926393e48a761b68928c.png)
从 Apk Analyser 的输出来看,应用的原大小是 3.1MB。经过 Play 商店的压缩,大致是 2.5MB。
从截图中可以看出主要有 3 个文件夹占据了应用的大多数空间。
classes.dex —— 这是 dex 文件,包含了所有会运行在你的 DVM 或 ART 里的字节码文件。
res —— 这个文件夹包含了所有在 res 文件夹下的文件。大部分情况下它包含所有图片,图标和源文件,菜单文件和布局。
![0e0d10ce0f8a30f18a2a8216285696b9.png](https://img-blog.csdnimg.cn/img_convert/0e0d10ce0f8a30f18a2a8216285696b9.png)
resources.arsc —— 这个文件包含了所有 value 资源。这个文件包含了你 value 目录下的所有数据。包括 strings、dimensions、styles、intergers、ids 等等。
![668b52e7232e565d3531b59f032c0d44.png](https://img-blog.csdnimg.cn/img_convert/668b52e7232e565d3531b59f032c0d44.png)
你有两个默认的混淆文件。
proguard-android-optimize.txt
proguard-android.txt
就像文件名写的那样,“proguard-android-optimize.txt”是更积极的混淆选项。我们将这个作为默认的混淆配置。你可以在 /app 目录下的 proguard-rules.pro 里添加自定义的混淆配置。
通过设置 minifyEnabled 为 true,混淆将会移除所有未使用的方法、指令以减小 classes.dex 文件。
这是启用了 minify 之后的 APK。
七、AndroidStudio使用lint清除无用的资源文件
在使用AndroidStudio进行App开发的时候,我们经常会在项目中引用多种资源文件,包括图片,布局文件,常量引用定义。随着项目版本开发的迭代,每一期的资源会有变动必定会留下一些无用的资源这个时候我们手动去一个一个寻找效率就会很低下。这个时候我们就要学会AndroidStudio使用lint清除无用的资源文件。
![3643fe47a7eff89e306e41f004ddd40c.png](https://img-blog.csdnimg.cn/img_convert/3643fe47a7eff89e306e41f004ddd40c.png)
![bbb67c6f230226f08a11960eb240b1f4.png](https://img-blog.csdnimg.cn/img_convert/bbb67c6f230226f08a11960eb240b1f4.png)
![cbcb1f32690652439c8314e0b6cf1c5b.png](https://img-blog.csdnimg.cn/img_convert/cbcb1f32690652439c8314e0b6cf1c5b.png)