【发布时间】:2011-08-07 05:23:02
【问题描述】:
我发现似乎有2个通用的解决方案:
- 不要混淆通过反射 API 引用的内容 [Retroguard, Jobfuscate]
- 将反射 API 调用中的字符串替换为混淆名称。
这些解决方案仅适用于同一项目中的调用 - 客户端代码(在另一个项目中)可能不会使用反射 API 来访问非公共 API 方法。
在 2 的情况下,它也仅在反射 API 与编译时已知的字符串一起使用时才有效(私有方法测试?)。在这些情况下,dp4j 还提供了一种在混淆后注入反射代码的解决方案。
阅读Proguard FAQ我想知道2是否总是在它说时起作用:
ProGuard 自动处理 像这样的结构 Class.forName("SomeClass") 和 SomeClass.class。被引用的 类被保留在缩小 阶段,字符串参数是 在混淆中正确替换 阶段。
使用可变字符串参数,通常无法确定 它们的可能值。
问:粗体字是什么意思?有什么例子吗?
【问题讨论】:
标签: java reflection obfuscation proguard