美文网首页
性能优化-安装包大小优化

性能优化-安装包大小优化

作者: Vinson武 | 来源:发表于2020-02-22 22:41 被阅读0次

    安装包大小优化

    安装包大小对应用的使用没什么影响,但提高来用户的下载门槛。减少安装包大小用户更愿意下载和体验。减少安装包大小之前先了解安装包(APK文件)的构成。

    应用装包的构成

    APK是一个压缩文件,包含Android应用程序的所有内容,是Android平台用于安装应用程序的文件。

    1. assets

    assets目录可以根据应用需求存放任何文件夹架构,如配置文件、资源文件,这些文件的内容可通过AssetManager类获得。和res的不同点在于,res目录下的文件会在.R文件中生成对应的资源ID,assets不会自动生成对应的ID,而是通过AssetManager类的接口获取。

    1. lib

    存放应用程序依赖的用C/C++编写的native库文件。

    1. res

    这个目录存放资源文件,在这个文件夹下的所有文件都会生成对应的ID映射到Android工程的.R文件中。

    1. META-INF

    保存应用的签名信息,签名信息可以验证APK文件的完整性。

    1. AndroidManifest.xml

    是用来描述Android应用“整体资讯”的设定文件,文件名是固定的不能修改。

    1. classes.dex

    Java可执行程序,需要先把Java文件编译成class文件,字节码都保存在class文件中,Android虚拟机把Java字节码转为Dalvik字节码。

    1. proguard.cfg

    代码混淆配置文件

    1. rsources.arsc

    记录资源文件和资源ID之间的映射关系,用来根据资源ID寻找资源。

    以上APK组成中,classes.dex、lib、资源文件是大头,AKP瘦身主要就是优化这三类。

    减少安装包大小的常用方案

    1. 代码混淆

    ProGuard是一个开源的Java代码混淆器,默认集成到Android SDK中,主要具有以下功能:

    • 压缩:移除无效的类、属性、方法等
    • 优化:移除没有的结构
    • 混淆:把类名、属性名、方法名替换为一到两个字母

    ProGuard配置参数非常多,具体可参考网站

    按照语法规则编写proguard-rules.pro后,需要在build.gradle中配置,同时设置minifyEnabled为true,在编译工程时自动混淆代码,代码如下:

    buildTypes{
        debug{
            minifyEnabled false
        }
        release{
            signingConfig signingConfigs.release
            minifyEnabled true
            proguardFiles 'proguard-rule.pro'
        }
    }
    

    2. 资源优化

    ProGuard只能对代码进行分析和优化,但对资源文件没有类似的效果。

    • 使用Android Lint检测并删除冗余资源

    (1)单击菜单栏中的Analyze -> Run Inspection by Name,弹出工具选择框;

    (2)在弹出的输入框中输入Unused resources,回车;

    (3)选择要扫描的目录或整个工程,单击OK开始扫描;

    (4)扫描完生成报告,可在AS中直接查看并删除确认无用的资源文件。

    Android Lint不会分析assets文件夹下的资源,因为它们不需要通过具体的引用,Lint无法判断资源是否被用到。

    • 资源文件最少化

    如果为了适配不同屏幕,每个文件夹都放一套图,对安装包大小影响很大。虽然Android支持很多中屏幕密度,但不代表应用为没一个屏幕都提供一套资源,在这方面可以参考以下几点:

    (1)尽量使用一套图片资源,遇到一些图片在不同分辨率手机变化过大时,在考虑在相应文件放入特定图片;

    (2)使用一套图、一套布局、多套dimens.xml文件,在使用最小资源都情况下,解决多分辨率适配;

    (3)使用轻量级的第三方库;

    (4)减少项目中预置图片,改成服务下发。

    • 图片优化

    对于非透明大图,JPG文件会比PNG小很多,一般情况下能用JPG代替PNG就用JPG,如果用PNG可以用工具降低图片色彩位数和压缩(Zopfli和PNGoo)。

    WebP是一种新的图片格式,支持透明度,压缩比JPG更高,但效果不比JPG差,是一种更好的选择。(但只能4.2.2以上版本使用)

    3. 其他优化

    • 避免重复功能的库:比如几种图片库,最好只选择一种,如果有业务无法满足,最好在这个基础上扩展而不是加入另一个库。不仅增加体检也增加维护成本。
    • 插件化

    本文参考书籍《Android应用性能优化最佳实践》

    相关文章

      网友评论

          本文标题:性能优化-安装包大小优化

          本文链接:https://www.haomeiwen.com/subject/pgnrqhtx.html