APK瘦身

2019-11-04  本文已影响0人  飞马_6886

SVG矢量图的使用 用于200*200以下的图片
多个SVG转换为Android的Vector,可以通过第三方工具svg2vector批量转换,命令:
java -jar svg2vector-cli-1.0.0.jar -d . -o a -h 20 -w 20
-d 指定svg所在的目录
-o 输出目录
-h 设置转换后的高
-w 设置转换后的宽

Tint着色器--点击变色

创建两个选择器,然后正常使用即可
//  drawable 选择器  放Drawable文件夹下  back_arrow_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_arrow_back_black_24dp" android:state_pressed="true"></item>
    <item android:drawable="@drawable/ic_arrow_back_black_24dp"></item>
</selector>
//color 选择器  放res-> color文件夹下 tint_color_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorAccent" android:state_pressed="true"></item>
    <item android:color="@color/colorPrimary"></item>
</selector>
使用
        <ImageView
            android:id="@+id/back_img"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:clickable="true"
            android:src="@drawable/back_arrow_selector"
            android:tint="@color/tint_color_selector" />

移除无用资源 2种方案 Refactor -> removeUnused
Tint移除

国际化资源配置

配置国际化  resConfig 'en','cn'
android{
    defaultConfig{
        // 只适配英语
        resConfigs 'en','cn'
    }
}

动态库打包

android{
    defaultConfig{
        ndk{
            abiFilters "armeabi-v7a"
        }
    }
}

压缩代码

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

压缩资源

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

压缩资源
shrinkResources true(与上面配置配合使用)
默认情况未启用严格模式,如需启动则需设置 shrinkMode,创建keep.xml,如下
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/tools"
tools:shrinkMode="strick"
/>
将该文件保存在项目资源中,例如,保存在 res/raw/keep.xml。构建不会将该文件打包到 APK 之中。

如果你有想要保留或舍弃的特定资源,则可以创建如下的 xml 文件,然后在 tools:keep 属性中指定每个要保留的资源,在 tools:discard 属性中指定每个要舍弃的资源。

image.png

资源混淆

resource.arsc -- > Android Resource
R文件中资源的整型数格式为:0xpptteeee(16进制,p代表的是package,t代表的是type,e代表的是entry

image.png
混淆步骤

1.解压待混淆APK,记录APK内文件存储方式(结合强制压缩文件列表,/config/compressData.txt)解析 arsc 文件(ZIP中存储文件两种方式:DEFLATED(压缩)/STORED(仅存储),对于APK文件来说某些资源不允许压缩(如:SoudPool加载raw下的mp3),而有些资源可以压缩但是AS打包APK时却没有压缩(如png/jpg等)。)
2.混淆 arsc 文件数据中对应的资源名与文件路径字节数据
3.输出混淆后的 arsc 文件至 app 目录
4.将 apk 中其他文件拷贝到 app 目录,并根据混淆修改 res/ 目录下文件名
5.打包、对齐并签名

字符串池格式
字符串池格式
混淆ARSC文件
上一篇 下一篇

猜你喜欢

热点阅读