十三、apk瘦身配置

2018-10-28  本文已影响2人  Serenity那年
一、使用svg

generatedDensities = ["xhdpi"]

这样就将svg图片生成指定纬度的png图片供5.0以下的使用;


屏幕快照 2018-10-25 下午2.44.25.png

vectorDrawables.useSupportLibrary = true

在dependens中引入

compile 'com.android.support:appcompat-v7:23.2.0'

在xml布局中使用的时候,要使用自定义的命名空间

xmlns:app="http://schemas.android.com/apk/res-auto"
app:srcCompat = "@drawable/ic_launch"

执行转换
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图像目录

备注: 命令里面的 . 代表当前目录 a代表输出文件夹名

二、tint着色器

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


image.png

selector点击效果
必须设置src也为一个selector,这个selector设置相同的图片;否则点击没有效果;


image.png
image.png
image.png

使用代码动态着色

//使用代码着色
        Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);
        DrawableCompat.setTint(drawable,getResources().getColor(R.color.colorAccent));
三、资源打包配置

resources.arsc文件是apk包中的res资源的映射文件,里面保存这id映射的值;
由于第三方库,如appcompat-v7的引入,库中包含了大量的国际化资源,根据情况通过配置删除。
由于默认是value和drawable文件下的资源,现在配置保留了一个英文的资源,如果没有英文资源,就忽略了;


image.png
image.png
四、动态库设置

如果项目中包含第三方SDK或者自己使用了ndk,如果不进行配置会打包全cpu架构的动态库进入apk。对于真机,只需要保留一个armeabi(armeabi-v7a)就可以了。
所以可修改配置:
在app下的build.gradle中android节点下的defaultConfig下配置:

 ndk{
            //设置支持的SO库架构,如果都写上或者不配置,会默认把全架构的都打进apk包
//            abiFilter "armeabi-v7a","x86","arm64-v8a","x86_64"
            //对于真机,只需要"armeabi"或者"armeabi-v7a"即可
            abiFilters "armeabi-v7a"
//            //模拟器
//            abiFilters "x86"
        }
五、移除无用资源

1、在as上有一键移除,如果出现使用动态id使用资源会出现问题(不建议)


image.png

动态获取资源id,未直接使用R.xx.xx ,则这个id代表的资源会被认为没有使用过(类似不能混淆反射类)

        //动态获取资源id
        int identifier = getResources().getIdentifier("app_name", "string", getPackageName());
        String string = getResources().getString(identifier);

2.使用as自带的Lint检查,在analyze选项下的Run Inspaction by Name ,然后输入要检查的项目,指定检测的module,即可;搜出来后,亲在排查,确认没有用的即可删除,不确定的,最好不要删除;


image.png
image.png
image.png
上一篇下一篇

猜你喜欢

热点阅读