Android Studio Proguard Base位置

时间:2018-12-09 22:13:37

标签: java android android-studio proguard obfuscation

我正在使用Zelix Klass Master来混淆我的android应用程序。使用它大约一年了。由于我仍在运行3.0.1版,因此我决定升级android studio。更新android studio后,我无法再使用Zelix来混淆我的apk,它使用Proguard来混淆我的android应用程序,而Zelix通过proguard的工作方式是我需要替换目录中的proguard jar。

<Android Studio>\gradle\m2repository\net\sf\proguard\proguard-base

我已经替换了目录中的所有proguard jar,甚至在proguard内引用了sf父文件,它仍然使用proguard混淆了我的android apk,我猜是它不再使用{ {1}},因为我删除了该目录,而android studio仍然使用proguard进行构建。

所以问题是新的proguard库在哪里?以及如何从该目录(proguard-base)中使用proguard? 有关如何设置Zelix的信息,您可以阅读here

编辑:在Svet回答之后,我尝试按照他的建议进行操作,现在抛出此错误。.

  

无法找到方法   'proguard.KeepClassSpecification。(ZZZZZZZLproguard / ClassSpecification; Lproguard / ClassSpecification;)V'。   导致此意外错误的可能原因包括:

  • Gradle的   依赖项缓存可能已损坏(这有时在网络之后发生   连接超时。)重新下载依赖项并同步项目   (需要网络)
  • Gradle构建过程的状态   (守护程序)可能已损坏。停止所有Gradle守护程序可以解决此问题   问题。停止Gradle构建过程(需要重新启动)
  • 您的   项目可能正在使用与以下设备不兼容的第三方插件   项目要求的其他插件或Gradle要求的版本   项目。
在Gradle进程损坏的情况下,您可以   也请尝试关闭IDE,然后终止所有Java进程。

3 个答案:

答案 0 :(得分:0)

问题似乎是因为ProGuard现在在最新版本的Android Studio中被视为Android Gradle插件的依赖项,因此也随之更新。因此,用重命名的proGuardStub.jar替换proguard.jar可能会自动撤消。

我绝对不是Gradle专家。但是,有人告诉我,对build.gradle的更改类似于以下工作。

buildscript {  
    repositories {
        flatDir { dirs '/proguard' }
    }
    dependencies {
        classpath ':proguard:'
    }
}

“ flatDir”指定一个平面目录存储库,我相信它不会自动更新。如果有任何Gradle专家可以改进或详细说明这种方法,那么将不胜感激。

答案 1 :(得分:0)

您收到“无法找到方法'proguard.KeepClassSpecification。(ZZZZZZZLproguard / ClassSpecification; Lproguard / ClassSpecification;)V”的事实,表明您已成功使用重命名的proguardStub.jar。问题是需要更新当前的proguardStub.jar以更全面地反映ProGuard 6.0。似乎ProGuard 6.0添加了一个额外的构造函数,该构造函数不会出现在proguardStub.jar的KeepClassSpecification类中。

您可以合理预期下一周左右会发布新版本的proguardStub.jar。

答案 2 :(得分:0)

好的,感谢Svet,我已解决了此问题。我将奖励他帮助我的赏金。因此,他回答并告诉我,我必须像下面这样更改proguard classPath

buildscript {  
    repositories {
        flatDir { dirs '/proguard' }
    }
    dependencies {
        classpath ':proguard:'
    }
}

在那之后,显然它不能与原始的proguardStub.jar一起使用,因为它是针对proguard 5.0而不是6.0.3的,我将代码分开并将代码注入到旧的proguardStub.jar中,将其视为6.0.3和现在终于可以了!这是我创建的here更新的proguardStub.jar。

如果任何人想知道我是如何做到的,我只是使用ASM更改了字节码,因此它不会导致错误,还更改了旧的String,因此它显示6.0.3而不是5.0 :)当然,String不会不会产生任何影响,而是仅显示它的版本。