Android Apk包瘦身

2020-03-05  本文已影响0人  竖起大拇指

首先我们来了解Android编译打包流程

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

image.png

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构成

image.png

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'
        }
上一篇 下一篇

猜你喜欢

热点阅读