首先我们来了解Android编译打包流程
1.Android编译打包流程及APK构成

1).通过Java编译器对于工程本身的java代码进行编译,产出.class文件。这些java代码有三个来源:app源代码;由资源文件生成的R文件(aapt工具);以及有aidl文件生成的java接口文件(aidl工具)。
2).通过dex工具将上一步生成的.class文件和依赖的第三方库的.class,生成Dalvik虚拟机可执行的.dex文件
3).通过apkbuilder工具将.dex文件和编译后的资源文件生成未签名对齐的apk文件。(这里编译后的资源文件包括两部分,一部分是由aapt编译产生的编译后的资源文件,而是依赖的三方库里面的资源文件)
4).通过JarSigner和zipalign对apk文件进行签名和对齐,生成最终的apk文件。
5).所谓对齐,主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度会更快。对齐的作用主要是为了减少运行时内存的使用。
APK构成

2.Apk包瘦身
1)资源瘦身
对于图片资源
使用更高压缩率的文件格式(使用Shape XML,Color,WebP替代PNG,JPG。WebP对大图片特别有用)
Lint去除未引用资源
去除无用的语言资源 列如appcompat库中会包含多国的语言资源,但是我们的app主需要支持中文,可以使用resConfig去除不会使用的语言资源
apply plugin: 'com.android.application'
android {
compileSdkVersion rootProject.compileSdkVersion
defaultConfig {
resConfigs "zh-rCN", "en-rUS"
}
lintOptions {
abortOnError false
}
}
开启shrinkResources
2)代码瘦身
内部代码清理
定期情能力已废弃,未引用的代码
清除无用的jar包或者依赖
移除重复的框架等
3)Native瘦身
去除不必要的硬件平台对应的so文件。目前市面上大部分都是armeabi架构,我们只需要支持armeabi-v7就行了。
ndk {
abiFilters 'armeabi-v7a'
}
网友评论