每到夏日我们就因为增长的体重而拼命瘦身,那么在面对越发庞大的APK,你又是如何进行APK瘦身呢?
APK文件结构
1. META-INF\(Jar文件中常可以看到)
2. res\(存放资源文件的目录)
3. AndroidManifest.xml(程序全局配置文件)
4. classes.dex(Dalvik字节码)
5. resources.arsc(编译后的二进制资源文件)
AndroidStudio分析APK文件大小
使用AS的Build-Analyze APK
查看APK包内各个文字资源大小
APK瘦身思路
1.图片处理
1)使用一套图
一般市场上使用一套图就能够适应大部分需求,使用720dp分辨率,放置于xhdpi
2)使用TinyPng压缩图片
官网:https://tinypng.com/
图片压缩后对视觉影响不大,但体积显著减小
3)使用webp
4)使用jpg替代png
使用jpg替换不需要保留透明区的png
5)使用矢量图
VectorDrawable
AnimatedVectorDrawable
6)使用shape背景
7)使用selector文件
8)使用tintColor
9)使用.9图
2.去除多余资源
1)Andorid Studio Lint
AS的Analyze Run Inspection By Name
输入unused resources查找多余的资源
2)shrinkResources
使用资源缩减器,去除无用资源
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
3)resConfigs
通过resConfig属性指定语言(未指定的语言的任何资源都会被删除)
android {
defaultConfig {
... resConfigs " zh","en"
}
}
3.缩小资源AndResGuard
微信资源混淆打包工具AndResGuard
“AndResGuard是一个帮助你缩小APK大小的工具,
他的原理类似Java Proguard,但是只针对资源。
它会将原本冗长的资源路径变短,
例如将res/drawable/wechat变为r/d/a”
官网:
https://github.com/shwenzhang/AndResGuard
4.去除多余包依赖
第三方库里包含了你所需的引用包,则无需额外引入
使用Android Studio查看包依赖
android studio 终端terminal输入
gradlew :Your Module Name:dependencies
或者使用
gradlew :Your Module Name:dependencies --configuration compile(或者implementation)
可以查看到详细的包依赖关系
5.去除冗余代码
Proguard
ProGuard是一个压缩、优化和混淆Java字节码文件的免费的工具,它可以删除无用的类、字段、方法和属性。
可以删除没用的注释,最大限度地优化字节码文件。
它还可以使用简短的无意义的名称来重命名已经存在的类、字段、方法和属性。
buildTypes {
release {
minifyEnabled true //开启混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//混淆配置文件
}
}
6.APK分割splits
android {
...
splits {
density {
enable true //打开apk分割功能
exclude "ldpi", "tvdpi", "xxxhdpi" //exclude排除
compatibleScreens 'small', 'normal', 'large', 'xlarge' //将注入到mainfest配置compatible-screens中
}
abi {
enable true
reset() //重置列表,与include搭配使用,指定生成include包含的apk
include 'x86', 'armeabi-v7a', 'mips' //include包括
universalApk false // 不打包一个通用版本(包含所有的ABI)
}
}
7.在线资源&H5
在线资源替代本地资源或者使用h5
--------------我是快乐的分割线--------------
以上就是今天TIP的内容了
愿你的APK瘦瘦瘦,愿你的身材棒棒棒~
本人公众号(程序员七猫) 不定期更新 欢迎关注与建议