作者goodsheng (恩哈哈)
看板AndroidDev
标题[问题] AS混淆後class不见
时间Wed Sep 13 12:09:42 2017
再出AAR时把混淆开启後,得到的AAR内确有class都不见的状况
想再确认下面几点疑问
1.爬文後知道应该可以从ProGuard设定混淆规则来修改一些类要不要混淆?
2.为什麽class会不见,爬文有看到似乎可能是该class内的code关联性不高?被混淆优化掉?
需要麻烦各位前辈帮忙 谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.42.32.32
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1505275785.A.C58.html
1F:→ ssccg: 从要保留的class/method开始找,有被用到的就会加入要保留 09/13 12:53
2F:→ ssccg: 的,到最後都不需要保留的(=没用的)就删除 09/13 12:54
3F:→ ssccg: 包library通常是把所有要公开的API设为保留 09/13 12:55
4F:→ goodsheng: 但设保留的为什麽就没有混淆到呢 09/13 15:34
5F:→ goodsheng: 不太了解。是否设"保留(保护)"就等於"不会混淆"? 09/13 15:47
6F:→ goodsheng: 应该说我最初的用意就是想要混淆,可是得到的结果是 09/13 15:48
7F:→ goodsheng: class不见.. 09/13 15:49
谢谢ssccg大,後来听您说明我试了这个可以混淆且不会不见..
-keep public class com.example.mylibrary.classA{*;}
想再请教如何
在同一class内让public的method有保护但private的method不保护呢? 关於写法
※ 编辑: goodsheng (114.42.32.32), 09/13/2017 17:20:50
8F:→ ssccg: 直接指定keep的会被保留且不会混淆,由proguard找到会被用 09/13 17:24
9F:→ ssccg: 到但不是直接指定keep的,就会留下来但会被混淆 09/13 17:24
10F:→ ssccg: 用-dontshrink就会一律保留,但混不混淆还是看keep 09/13 17:27
11F:→ goodsheng: 但一开始我没有指定keep时,class却会不见 09/13 17:28
12F:→ ssccg: proguard其实主要是个瘦身工具而不是保护工具 09/13 17:28
13F:→ ssccg: 没指定keep又没被别的keep的class用到的当然会不见啊 09/13 17:29
14F:→ ssccg: 留下public member可以写 { public *; } 09/13 17:30
15F:→ goodsheng: 聊解!!原来是因为"没被别的keep的class用到"这样 09/13 17:30
有试成功了,谢谢ssccg大!
-keep public class com.example.mylibrary.classA{ public *;}
public int cfunction3() {
int var1 = this.a();
byte var2 = 5;
return var2;
}
private int a() {
byte var1 = 5;
return var1;
}
另外刚试了,想额外确认一下。是不是假如这样定义其实是不太有意义的?
-keep public class com.example.mylibrary.classB{ private *;}
因为假如classB内的public method没被别的class用到的话,那就会不见了。
会造成包成jar後要用时,却没办法给拉public method。自己这样想不知是否是这样呢?
※ 编辑: goodsheng (114.42.32.32), 09/13/2017 18:08:06