APK瘦身

1. SVG
Scalable Vector Graphics,可缩放矢量图。SVG不会像位图一样因为缩放而让图片质量下降。优点在于节约空间与内存。常用于简单小图标。
svg是由xml定义的,标准svg根节点为
在Android中通过 Vector实现对svg的支持,根节点
https://developer.android.google.cn/studio/write/vector-asset-studio.html
获得一张svg需要先进行转换才能在android当中使用。



如果需要批量的转换SVG可以动过第三方工具转换:
https://github.com/MegatronKing/SVG-Android/blob/master/svg-vector-cli/bat/svg2vector-cli-1.0.0.jar
下载下来就是一个jar包
执行转换命令:
java -jar svg2vector-cli-1.0.0.jar -d 输入路径 -o 输出路径 -h 20 -w 20
-d 指定svg文件所在目录
-f 指定当个svg文件
-h 设置转换后svg的高
-w 设置转换后svg的宽
-o 输出android vector图像目录
建议您将矢量图像限制为最大 200 x 200 dp;否则,绘制它可能需要耗费很长的时间

SVG兼容
Android 5.0(API 级别 21)及更高版本会提供矢量图支持。如果应用的最低 API 级别低于以上版本则需要做兼容处理。

png生成:
app/build.gradle 中添加generatedDensities =['xhdpi','hdpi']



在drawable/test.xml矢量图会生成一个png图片


支持库:
需要Android 支持库 23.2 或更高版本、适用于 Gradle 的 Android 插件 2.0 或更高版本,且仅使用矢量图。利用支持库中的 VectorDrawableCompat 类,可实现在 Android 2.1(API 级别 7)及更高版本中支持 VectorDrawable。



2.Tint着色器
tint能够实现图片变色,利用tint显示不同颜色的图片,原本需要多张相同图片不同颜色的情况,能够减少apk的体积


selector点击效果:


color文件夹下tint的color


    
    

drawable的selector


    
    
\

3. webp
把png、jpeg转换成webp

4. 资源压缩
由于第三方库,如appcompat-v7的引入,库中包含了大量的国际化资源,根据情况通过配置删除。
默认打包的APK是带有很多不同语言的资源,比如日文的字符、韩文的字符,你没有写打包的时候也会生成。
如果只想支持中文和英文,我们通常在默认的values里面的strings.xml写中文,在新建一个values-en里面的strings.xml写英文。这个时候可以在Gradle里配置:


只保留英文资源和默认资源。

5. 动态库打包配置


真机我们只要打包armeabi-v7a的动态库就行。

6. 删除无效的资源
在Android Studio上可以一键删除可能无效的资源,仅仅是可能无效。


但是我们不能这样做,因为会误删除,概率还不小。

使用Lint检查:




选择我们的主工程



这里还需要结合代码选择删除。

7. 代码压缩和资源压缩
官网说明:
https://developer.android.google.cn/studio/build/shrink-code.html#shrink-resources

          minifyEnabled true
          proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

资源压缩:

        debug{
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

这样默认的压缩比较宽松,要执行严格的资源压缩:
在res下建raw文件夹(res/raw/),并建keep.xml,在 keep.xml 文件中将 shrinkMode 设置为 strict,如下所示:



资源压缩也会存在误删除,则需要自定义要保留的资源,也可以在keep.xml中:



tools:keep 属性中指定每个要保留的资源,在 tools:discard 属性中指定每个要舍弃的资源。

你可能感兴趣的:(APK瘦身)