asysbang

 找回密码
 立即注册
查看: 3804|回复: 0
打印 上一主题 下一主题

APK瘦身

[复制链接]

513

主题

2

好友

6404

积分

管理员

Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

最佳新人 活跃会员 热心会员 推广达人 宣传达人 灌水之王 突出贡献 优秀版主 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2017-8-15 14:25:02 |只看该作者 |倒序浏览
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格式 代替图片








回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|aSys-帮 ( 京ICP备13033689号 )

GMT+8, 2024-10-5 23:30 , Processed in 0.043377 second(s), 19 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部