我已经通过这个关于单元测试私有方法和字段的问题,这个答案说它可以通过反射机制来完成。但是有评论说如果被混淆会惨败。为什么会这样?
问问题
125 次
2 回答
6
混淆的工作原理是用难以阅读的名称替换符号名称(方法、字段 ..)。所以在反编译后你得到一个java文件,你得到一个真正无用的java代码。
方法名称会更改,因此通过反射查找将不起作用。(除非测试代码使用带有混淆方法名称的反射——这不是一件容易的事)
于 2012-09-06T09:31:10.110 回答
4
混淆可以将私有方法重命名为它喜欢的任何名称(它不能用公共方法来做,因为其他包可能依赖它)。
反射的危险在于你有一个代表方法名的字符串;混淆器无法检测到这个字符串引用了一个私有方法,所以它可以自由地重命名它认为合适的方法。
于 2012-09-06T09:31:11.183 回答