Android-APP瘦身

2020-01-20  本文已影响0人  超人TIGA

随着项目的版本迭代,APP的apk体积越来越大,导致用户体验不好,所以必须进行对项目体积的优化整理。
整理优化的地方:
①各种各样的图片资源
②过期的资源,例如:图片、代码、文件等
③结合自身项目,去掉不必要的国际化

一、图片资源

①图片资源使用SVG

APP中,会有非常多的元素图片,而且Android还需要根据不同的分辨率,进行多套尺寸的图,放在不同的分辨率文件夹中,随着项目的开发,图片会越来越多。SVG就可以完美解决多余的图片资源,并且SVG的体积更加小。

但是美工给我们的SVG图,Android Studio不能直接使用,我们需要转化一下: image.png 转化成功后,会在drawable文件夹中生成一个xml的资源文件,如下图: image.png

之后就可以在控件中设置背景或者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%以上。

上一篇下一篇

猜你喜欢

热点阅读