检测您是否在运行时是ProGuarded?

时间:2015-06-02 17:33:48

标签: android proguard

是否有办法检测(在运行时)您的应用程序是否为ProGuarded?我的目标是根据应用程序是否为ProGuarded设置一个布尔值。

2 个答案:

答案 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配置中指定您自己的类名列表(这提供了另一种方法来执行相同的操作,查找其中一个类名你指定的那个。)