我正在使用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进程损坏的情况下,您可以 也请尝试关闭IDE,然后终止所有Java进程。
- Gradle的 依赖项缓存可能已损坏(这有时在网络之后发生 连接超时。)重新下载依赖项并同步项目 (需要网络)
- Gradle构建过程的状态 (守护程序)可能已损坏。停止所有Gradle守护程序可以解决此问题 问题。停止Gradle构建过程(需要重新启动)
- 您的 项目可能正在使用与以下设备不兼容的第三方插件 项目要求的其他插件或Gradle要求的版本 项目。
答案 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不会不会产生任何影响,而是仅显示它的版本。