我有和Android应用程序,各种人测试开发构建和发布版本。开发版本没有混淆,我希望能够在运行时以编程方式确定应用程序是否已被混淆。
有办法做到这一点吗?
答案 0 :(得分:2)
这是一个想法:在您的代码库中添加一个完全没有使用的类。 Proguard将对其进行模糊处理和/或删除。因此,如果通过ProGuard运行,则通过app中的反射加载它应该导致ClassNotFoundException
。
答案 1 :(得分:1)
由于@Sean建议使用一个没有(外部)依赖的类。
但要注意,ProGuard可以检测到反射的使用,所以你必须以某种方式从字符串名称加载类,不使用字符串文字(文本资源可能?):http://proguard.sourceforge.net/index.html#/FAQ.html%23forname
答案 2 :(得分:0)
选择一个在混淆后始终由Proguard重命名的类。它的名称在下面的代码中为ExampleClass.java
。使用以下行在运行时检查其名称:
ExampleClass.java
...
public static final boolean OBFUSCATED = !ExampleClass.class.toString().contains("ExampleClass");
这就是全部。不需要任何辅助类或方法,并且不会导致异常。