Android Apk包瘦身

目录

1、Android 编译打包流程
2、Apk包瘦身

1、Android 编译打包流程及APK构成

1.1、Android 编译打包流程
android编译打包流程

(1)、通过Java编译器对工程本身的java代码进行编译,产出为.class文件。这些java代码有三个来源:app的源代码;由资源文件生成的R文件(aapt工具);以及有aidl文件生成的java接口文件(aidl工具)。
(2)、通过dex工具将上一步生成的.class文件和依赖的第三方库的.class,生成Delvik虚拟机可执行的.dex文件。
(3)、通过apkbuilder工具将.dex文件和编译后的资源文件生成未经签名对齐的apk文件。(这里编译后的资源文件包括两部分,一是由aapt编译产生的编译后的资源文件,二是依赖的三方库里的资源文件)。
(4)、通过Jarsigner和zipalign对apk文件进行签名和对齐,生成最终的apk文件。

1.2、APK构成
APK组成

2、Apk包瘦身

2.1、资源瘦身

对于图片资源

2.1.1、使用更高压缩率的文件格式
(使用Shape XML、Color 、WebP替代PNG,JPG。WebP尤其对大图片有用)

2.1.2、更深度的资源压缩
图片质量:TinyPNG深度压缩
图片尺寸:ReSize,针对大图、套图

2.1.3、Lint去除未引用资源

2.2.3、对于drawable图片只保留3倍图。
2.2.4、对资源的id和路径进行压缩。使用andresguard,对resources.arsc文件进行压缩,就是让资源id名称变短了。

2.1.5、去除无用的语言资源,例如appcompat库中会包含多国的语言资源,但是我们的app只需要支持中文,可以使用resConfig去除不会使用的语言资源。

2.1.6、开启shrinkResources未使用的资源(前提是是开启混淆)。因为只有开启混淆移除未经使用的代码之后,才知道哪些资源是真正被有用的代码所引用的。

2.1.7、MR时引入流水线,流水线中对提交代码中的资源文件大小进行控制

2.2、代码瘦身

2.2.1、内部代码清理

(1)、合并功能相同的代码(utils)。定期清理已废弃、未引用代码
(2)、合并扩展重复的轮子,提高模块复用性(titlebar)

注意反射以及AOP对类/方法的调用,会误认为未引用

2.2.2、外部依赖清理

(1)、移除无用的jar包或依赖
(2)、移除功能重复的框架,例如视频播放库,OkHttp&Volley,Fresco&glide,避免共存

2.2.3、开启minifyEnabled混淆代码,去掉没用引用的代码。
2.2.4、review机制审核代码质量

2.3、native瘦身

去除不必要的硬件平台对应的so文件,根据我们的统计,我们用户的手机大部分都是armeabi架构,x86机型占比极低,只有几个,所有我们只需要保留armeabi对应的so文件,另外x86架构是可兼容armeabi平台对应的so文件指令的。通过build.gradle内abiFilters配置。
ndk {
abiFilters 'armeabi', 'armabi'
}

Android中的so文件简介

.so文件是一种文件格式,可以类比.java或者.class文件格式。
.so文件是与平台相关的二进制机器码,与ABI(Application Binary Interface)相对应,一个ABI表示相应的CPU的指令集与内存页管理,也对应于不同的运行环境,所以so是有不同的系统版本的。
随着Android系统的快速发展,搭载Android的硬件平台也早已多样化了(对比WinTel联盟,直到2012年才新发展了Windows RT来适配ARM平台,2015年的Win10才进入 Raspberry Pi 2这类基于ARM的新型设备中),现在已经运行在7个ABI:armeabi,armeabi-v7a (armeabi-v7a-hard),arm64-v8a,x86,x86_64,mips 和 mips64。

2.4、资源动态下发

(1)、重量级的资源(拍摄页资源,大图片)
(2)、H5插件,需开发成熟的Hybrid方案
(3)、Native插件,需对项目进行插件化

1,https://blog.csdn.net/u011889786/article/details/56686492
2,https://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=208135658&idx=1&sn=ac9bd6b4927e9e82f9fa14e396183a8f#rd

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容