以前没感受过android的混淆资源,结果给客户整sdk的时候遇到一个怪事,图片明明存在,为什么图片大小变成了空,宽度尺寸变成1了呢?
我还以为是会移除图标的,这也是因为我只听说过没感受过所以我和客户因为这个事情折腾了许久,虽然我意料到是有可能是混淆资源开启导致的,但是客户否认,我也没多说自己也没验证。.
https://developer.android.com/studio/build/shrink-code#shrink-resources
语法
,
分割多个,*
表示匹配任意字符
开启条件
1、build.gradle修改
shrinkResources true
minifyEnabled true
2、必须都开启,而且只支持主模块。
保持不被混淆
tools:keep=" 内容规则”
保持必须混淆哪怕被引用
tools:discard="规则"
qssq_keep.xml
内容为
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="
@drawable/qssq_*,
@layout/qssq_*,
@string/bcs_string*,
@drawable/qssq_icon*,
@drawable/qssq_bg*,
@drawable/qssq_xicon*,
" />
<!--@drawable/bcs_icon*,-->
强制剔除xml
remove.xml内容
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:discard="
@drawable/test_remove_x*,
@drawable/test_remove_a*,
@drawable/shadow*,
@layout/activity_main*,
@layout/activity_demo*,
" />
xml被移除后的效果 空xml
压缩效果
xml被压缩后效果
<?xml version="1.0" encoding="utf-8"?>
<x/>
强制解析xml会得到的错误
: android.view.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class x
图片被压缩的效果
空图片 透明 宽高为1,
混淆之后实际上图片存在,但是图片是空白的。
这个的作用是防止没有被引用的资源被混淆掉.
只开启资源混淆没配置策略会出现什么情况
没有被java代码通过R.xxx 资源引用使用的都将被压缩处理。