我发现,似乎有2级通用的解决方案:如果代码将被模糊处理,我总是可以使用Reflection API吗?
- 不要混淆什么是通过反射API简称[Retroguard,Jobfuscate]
- 与混淆的名称反射API调用替换字符串。
这些解决方案仅适用于同一项目内的调用 - 客户端代码(在另一个项目中)可能不使用反射API访问非公共API方法。
在2的情况下,它也只适用于反射API与编译时已知的字符串(私有方法测试?)一起使用。在这些情况下,dp4j也提供了在混淆之后注入反射代码的解决方案。
阅读Proguard FAQ我想,如果2;否则,始终当它说的工作:
的ProGuard会自动处理 结构,如 的Class.forName( “SomeClass的”)和 SomeClass.class。引用的 类保留在缩小的 阶段中,并且在混淆 阶段正确替换了字符串参数 。
对于可变字符串参数,通常不可能确定其可能的值为 。
问:粗体语句是什么意思?任何例子?
好的,也就是说,在编译时或者这种情况的一个子集(即编译器无法找到它)时,字符串是未知的。 – simpatico 2011-04-17 07:46:56
正确。事实上,上述样本在理论上可能意味着通过反射加载的100个类。 – MeBigFatGuy 2011-04-17 08:00:43