实际项目开发过程到当中随着开发周期的延伸和版本迭代,会产生很多冗余的代码和资源文件,这就直接导致apk的体积变大,下面就针对实际开发过程中apk体积的优化总结如下几个关键步骤:
1、通过SVG矢量图来解决套图的问题:
SVG矢量图很适合做一些简单的小图标的适配,在切图的时候只需要给定一套就可以,无需每个分辨率下给定一个套图
SVG的使用临界版本是Android5.0,需要对5.0以下和5.0以上的版本做兼容
5.0以下的版本兼容方式:
在app的build.gradle文件的defaultConfig标签下添加
vectorDrawables.generatedDensities(‘xhdpi’,’xxhdpi’,’xxxhdpi’)
5.0以上的兼容方式:
在app的build.gradle文件的defaultConfig标签下添加
vectorDrawables.useSupportLibary = true
implementation ‘com.android.support:appcompat-v7:28.0.0’
在我们xml布局中的使用SVG的方式:
app:srcCompat=”@drawable/xxx”
2 、将ui妹纸给定的SVG转换成我们Android中使用的根节点标签“<vector>”
第一种方式 AndroidStudio中是右键res目录 new vector Asset,然后选择local file在“path”中选择本地的svg图片路径
点击next即可,这种方式每次只能转换一张svg
第二种方式通过:svg2vector-cli-1.0.0.jar 在cmd窗口输入命令完成批量转换
Java -jar svg2vector-cli-1.0.0.jar -d . -o a -h 20 -w 20
-d 指定SVG文件所在的目录
-f 指定当个svg文件
-h 设置转换后的svg的高
-w 设置转换后svg的宽
-o 输出android vector图像目录
二、通过tint着色器来解决同一张图片不同颜色的问题
android:tint="@color/xxx" 通过这种方式可以给seclect类型的xml中的图片动态设置颜色值,不用ui提供两张不同状态的图片
三.通过webp的格式来压缩图片
Webp是google在api18 以后出的一个图片格式,
他既能达到png的无损压缩又能达到jpeg的有损压缩
压缩后的质量损失可以互虐不计,但是体积会缩小很多;
使用方式是右键图片选择convert webp
四 资源压缩 (没有keep,所有未用资源一律压缩,不用物理删除)
在build.gradle 文件中设置 shrinkResources true
在raw资源下创建keep.xml文件
五 代码混淆
在build.gradle 文件中设置 minifyEnabled true
六 so库配置
在build.gradle 文件中设置
Sourcesets{
Main{
jniLibs.srcDirs=[‘libs’]
}
}
配置SO库,cpu架构(真机 arm, 模拟器:x86)将指定架构so库打包到apk内
ndk {
abiFilters(‘armebi’,’armebi-v7’)
}
七 String,xml资源配置
由于第三方库,如appcompat-v7的引入,库中包含了大量的国际化资源,根据情况通过配置删除
只保留默认和制定的资源
在build.gradle 文件中设置 defaultConfig { resConfigs('zh-rCN', 'ko') }标识只保留中文和默认资源