我正在使用Zelix Klass Master来混淆我的android应用程序。已经使用了大约1年。我决定升级我的android工作室,因为我仍然运行3.0.1版本。更新安卓工作室后,我不能再用Zelix模糊我的apk,它使用Proguard模糊我的安卓应用程序Zelix通过Proguard工作的方式是,我需要替换目录中的Proguard jar
<Android Studio>gradlem2repositorynetsfproguardproguard-base
我已经替换了目录中的所有proguard jar,甚至延迟了sf
中的proguard
父文件,它仍然使用proguard来混淆我的android apk。我猜它不再使用<Android Studio>gradlem2repositorynetsfproguard
中的proguard,因为我删除了该目录,android studio仍然使用progard构建。
那么问题来了,新的proguard lib在哪里?以及如何使用该目录中的proguard(proguard-base(?有关如何设置Zelix的信息,你可以在这里阅读:
编辑:在Svet的回答之后,我试着按照他的建议去做,现在却出现了这个错误。。
找不到方法proguard。KeepClassSpecification。(ZZZZZZZ Lproguard/ClassSpecification;Lproguard/ClassSpecification;(V'。此意外错误的可能原因包括:
在Gradle进程损坏的情况下,您可以也可以尝试关闭IDE,然后终止所有Java进程。
- Gradle依赖缓存可能已损坏(这种情况有时发生在网络之后连接超时。(重新下载依赖项并同步项目(需要网络(
- Gradle构建过程的状态(守护程序(可能已损坏。停止所有Gradle守护程序可能会解决此问题问题停止Gradle生成过程(需要重新启动(
- 您的项目可能正在使用与不兼容的第三方插件项目中的其他插件或由请求的Gradle版本项目
问题似乎是ProGuard在最新版本的Android Studio中被视为Android Gradle插件的依赖项,因此它也随之更新。因此,用重命名的proGuardTub.jar替换ProGuard.jar可能会自动逆转。
我绝对不是Gradle专家。然而,我被告知,对build.gradle的更改就像下面的工作一样。
buildscript {
repositories {
flatDir { dirs '/proguard' }
}
dependencies {
classpath ':proguard:'
}
}
"flatDir"指定了一个平面目录存储库,我相信它不会自动更新。如果有任何Gradle专家能够改进或阐述这种方法,我们将不胜感激。
好的,多亏了Svet,我已经解决了这个问题。我会奖励他帮助我的赏金。所以他回答说,我必须像下面的一样更改proguard classPath
buildscript {
repositories {
flatDir { dirs '/proguard' }
}
dependencies {
classpath ':proguard:'
}
}
在那之后,它显然不能与原始的proguardStub.jar一起使用,因为它是针对proguard 5.0而不是6.0.3的!这是我在这里创建的更新的proguardStub.jar。
如果你们中有人想知道我是怎么做到的,我只是用ASM更改了字节码,这样它就不会引起错误,还更改了旧的字符串,这样它显示的是6.0.3而不是5.0:(当然,字符串不会影响任何东西,而只是显示它的版本。
您收到"Unable to find method’proguard.KeepClassSpecification。(ZZZZZZZ Lproguard/ClassSpecification;Lproguard/ClassSpecification;(V"错误表明您已成功使用重命名的proguardStub.jar。问题是当前的proguartStub.jar需要更新以更全面地反映proguard 6.0。看起来ProGuard 6.0添加了一个额外的构造函数,这个构造函数没有出现在proguardStub.jar的KeepClassSpecification类中
你可以合理地期待proguardStub.jar在下周左右的新版本