- 注册时间
- 2013-4-19
- 最后登录
- 2024-9-26
- 阅读权限
- 200
- 积分
- 6404
- 精华
- 0
- 帖子
- 640
|
https://developer.android.com/to ... educe-apk-size.html
精简APK包
首先理解APK文件的结构
apk也是zip格式中的一种
包含的文件夹
META-INF : CERT.SF CERT.RSA 和MANIFEST.MF文件
assets : 项目需要的资源文件,这些文件不会被编译成二进制 不同于res/raw目录 这个里面可以有多层目录结构
res : 包含那些没有被编译到resources.arsc文件中的资源文件
lib : 包含不同处理器平台下使用的类库文件 armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, 和 mips等
包含的文件
AndroidManifest.xml : 应用的清单文件
resources.arsc : 编译之后的资源文件,各种xml文件和图片文件
classes.dex : 编译之后的代码文件,在Dalvik或者ART上运行的文件
APK文件的大小影响应用的载入速度,内存使用,以及耗能,最简单的方式是移除应用不用的各种资源文件,以及用可缩放的图片替换大图
接下来介绍一些减小apk大小的方法
<1> lint工具
能够检测出未使用的引用资源等 (注意 lint不扫描assets目录以及lib下面的文件)
此外可以配置shrinkResources 这个参考 https://developer.android.com/studio/build/shrink-code.html
<2> 精简类库
很多类库不一定是移动端专用的,可以包含很多pc端的方法,这个可以花些精力移除一些不需要的部分
<3> 尽量只做常用屏幕密度的资源 (真正实施起来比较难,因为产品设计的要求都很高)
官方推荐 至少要包含 xxhdpi 其他的尽量使用可缩放的或者drawable-nodpi
<4> 用shape代替一些图片文件
在一些地方可以使用xml中的shape来代替图片,也能节省很多空间
PS:在一些需要用图片的地方,个人也觉得有时候图片不一定要那么高清,可能美工MM的审美要求都太高了
<5> 重复利用现有的图片
有些地方可能用到相似的图片,只是方向不同,比如上下左右的“箭头” 可以在xml中定义rotate属性android:fromDegrees="180"
<6> 有些地方可以用代码来“渲染”图片
比如有些地方的背景,分割线之类的
<7> 处理PNG文件
实际上在编译过程中appt会对res/drawable下面的图片进行优化处理,但是assets目录下的图片需要自己手动处理
aaptOptions {
cruncherEnabled = false
}
可以通过这个配置来关闭aapt默认的优化
<8> 手动处理PNG和JPG图片
官方推荐的工具有 pngcrush pngquant zopflipng
packJPG quetzli
<9> 官方推荐用WebP格式代替PNG和JPG格式的图片
PS:应用的icon图标最好还是是png格式的
<10> 采用矢量图节省图片所占空间
<11> 采用动画矢量图代替帧动画
<12> 合理的代码结构,方法重构,移除不必要的自动生成的代码(注释)
<13> 尽量少用枚举类,如果用的话也尽量用整型的
<14> 如果包含native库,一定要用无符号的so文件
<15> 避免提取so文件
android:extractNativeLibs=“false”
<16> 根据不同的用户维护不同的版本
这个在android系统的编译中很直观的体现就是overlay编译,可以为不同的产品提供不同的apk
??????? android:tint and tintMode
??????? ColorFilter
??????? webP格式 代替图片
|
|