美文网首页
十三、apk瘦身配置

十三、apk瘦身配置

作者: Serenity那年 | 来源:发表于2018-10-28 21:27 被阅读2次
    一、使用svg
    • 1.生成png方式;使用svg图片时,为了兼容5.0以前,需要在app下的build.gradle文件中的android节点下的defaultConfig中添加如下:

    generatedDensities = ["xhdpi"]

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


    屏幕快照 2018-10-25 下午2.44.25.png
    • 2.使用Android支持库23.2以上或更高版本,适用于Gradle插件2.0以上或更高,在app下的build.gradle中的defaultConfig中配置:

    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

    相关文章

      网友评论

          本文标题:十三、apk瘦身配置

          本文链接:https://www.haomeiwen.com/subject/vqtctqtx.html