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
- Package ID 包ID,系统为0x01,应用程序资源为0x7f。
- Type ID 资源的类型ID,资源的类型有animator、anim、color等等,每一种都会被赋予一个ID。
- Entry ID 资源在其所属的资源类型中所出现的次序。
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文件










网友评论