是否有办法检测(在运行时)您的应用程序是否为ProGuarded?我的目标是根据应用程序是否为ProGuarded设置一个布尔值。
答案 0 :(得分:3)
我认为如果你在构建变体/风格上设置了一个运行ProGuard的布尔值会更容易。
例如:如果您在发布和暂存上运行ProGuard但未在调试上运行ProGuard,请在发布和暂存时将布尔变量设置为true ,但在调试时为false。 This may help
答案 1 :(得分:2)
这是一种解决方法,但有一些途径可以通过反思来解决这个问题。
一种方法是首先确定在proguard情况下被混淆/缩小的类。所以说你有一个类com.package.Thing
,当启用proguard时,缩小被称为com.package.a
(或者其他什么,没关系)。然后使用反射来查看原始类是否存在。
这样的事情:
boolean isProguardEnabled() {
try{
return Class.forName("com.package.Thing") == null;
catch(ClassNotFoundException cnfe) {
return true;
}
}
显然,只有当你知道在启用proguard时会改变的类时,这才有效。
也许更一般地说,你可以寻找一个类com.package.a
并将其用作启用proguard的信号,当然假设你没有真正拥有一个名为a
的类。 。默认情况下,proguard将使用字母表来提供类名,但您也可以在proguard配置中指定您自己的类名列表(这提供了另一种方法来执行相同的操作,查找其中一个类名你指定的那个。)