随着项目的版本迭代,APP的apk体积越来越大,导致用户体验不好,所以必须进行对项目体积的优化整理。
整理优化的地方:
①各种各样的图片资源
②过期的资源,例如:图片、代码、文件等
③结合自身项目,去掉不必要的国际化
一、图片资源
①图片资源使用SVG
APP中,会有非常多的元素图片,而且Android还需要根据不同的分辨率,进行多套尺寸的图,放在不同的分辨率文件夹中,随着项目的开发,图片会越来越多。SVG就可以完美解决多余的图片资源,并且SVG的体积更加小。
之后就可以在控件中设置背景或者src了。
使用SVG的好处是,我们已经不需要导入多套图片了,而且SVG会根据我们设置的控件大小,自己缩放,而且不会失真。
②处理特殊的复杂大图
有些图片背景,是个大图而且图案相对复杂,这时候我们就不能使用SVG了,需要进行APP内的大图压缩,转为webp格式,达到减少体积的效果。 image.png 选择后会弹出对话框 image.png 这里需要选择有损压缩还是无损压缩,无损压缩需要APP的最低版本是4.3。如果选择有损压缩,则会弹出下图给你操作 image.png 你可以看到原图大小、压缩后大小、压缩率等信息,还可以预览压缩前后的图片效果,点击finish就可以生产图片。③Tint着色器
在美工出的效果图中,如果有两个icon图案完全一样,而且只有一种颜色,这时候我们就可以使用tint来着色,从而避免多引入多一个SVG或者png。
<ImageView
android:id="@+id/ivCoin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:tint="@color/cB32a3c58"
android:src="@drawable/icon_coins" />
二、移除无用资源
①移除版本迭代导致不使用的资源
先选择分析里面的筛选 image.png 然后输入名称,我这里输入unused resource image.png 等扫描完毕,得到下图结果。 image.png 这里就是没有引用过的资源,但是也有可能是代码里面利用反射之类的方法进行使用,所以删除之前,先根据自身项目的逻辑,进行谨慎删除。最后配合gradle配置移除无用资源。release {
buildConfigField "String", "ENVIRONMENT", "\"RELEASE\""
buildConfigField "boolean", "IS_RELEASE", "true"
minifyEnabled true
//移除无用的resource文件
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
ndk {
abiFilters "armeabi" // 保留这种架构的CPU
}
}
②去掉多余的国际化
defaultConfig {
applicationId "com.tnaot.news"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 45
versionName "3.4.0"
//只保留指定和默认的资源
resConfigs('zh-rCN','km-rKH','en-rUS')
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
//版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了
flavorDimensions "1"
}
对于项目APP瘦身,我暂时做了这些工作,效果也算非常的明显,主要图片的那一部分,就已经可以减少30%以上。
网友评论