-printusage /usage.txt
3. 编译即可
笔者对比过这两种方式的代码缩减效果,相比之下开启R8后被删掉的代码要比proguard的稍微多一些,但整体相差不大。如下图:左边是proguard,4万1千行,右边是R8,4万4千行
3、基于usage文件内容,我们根据包名进行过滤,可以拿到当前工程中被缩减那部分的代码,文章第三部分实践,可以参考
二、基于shrinkResources结果获取无用资源
获取无用资源相对容易些,将shrinkResources置为true,编译后shrinkResources的结果位于build/outputs/mapping/release(或debug)/resources.txt。内容大概长这样:
除此之外,官方还提供了一个开启严苛引用检查的开关。开启了之后,扫描出的无用资源数量大大增加,但需要注意是否会影响业务
开启严苛检查方法:在res/raw/目录下新增keep.xml文件
三、实践
编译后基于usage.txt 和 resources.txt 的结果,可以通过task来过滤,排序处理。可参考以下:
task codeScan(dependsOn: assembleRelease) {
…
doLast {
if (project.getBuildDir().exists()) {
String basePath = project.getBuildDir().path + “/outputs/mapping/release/”
//无用Class
File uoUseClassRecode = new File(basePath + “usage.txt”)
if