【问题标题】:Android Studio Proguard Base locationAndroid Studio Proguard Base 位置
【发布时间】:2019-05-10 20:30:15
【问题描述】:

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

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

我已经替换了目录中的所有proguard jars,甚至删除了sf 中的proguard 父文件,它仍然使用proguard 来混淆我的android apk 我的猜测是它不再使用来自<Android Studio>\gradle\m2repository\net\sf\proguard 的proguard,因为我删除了那个目录,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 进程。

【问题讨论】:

  • 你运行windows还是mac?
  • @Pierre Windows 10, 64 位。
  • 在 Android Studio 中,File > Settings > Appearance & Behavior > System Settings > Android SDK > Android SDK Location 在该位置,在 tools > proguard > lib 中放置 ZKM.jar 文件,在 tools > proguard > bin 中编辑 proguard.bat 文件,将 proguard 的文件名更改为 @ 987654334@
  • 查看不支持的内容时,最好使用.pro 文件。否则我建议直接联系他们:zelix.com/klassmaster/support.html ... meta.stackoverflow.com/questions/255745/…
  • @SamzSakerz 原生程序集也为逆向工程添加了及时的努力:stackoverflow.com/questions/13351787/…

标签: java android android-studio proguard obfuscation


【解决方案1】:

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

我绝对不是 Gradle 专家。但是,有人告诉我,对 build.gradle 的更改如下所示。

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

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

【讨论】:

  • @SamzSakerz ProGuard is now treated as a dependency of the Android Gradle plugin ... is updated... may... automatically reversed 正是我的想法
  • 嗨,我奖励了你,因为你帮我修复了它,如果你想将它用于 Zelix,我已经更新了 proguardStub.jar 以与 proguard 6.0.3 一起使用,它可以可以在我的回答中找到! :) 再次感谢
【解决方案2】:

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

您可以合理地期待在下周左右发布新版本的 proguardStub.jar。

【讨论】:

  • @SamzSakerz 您可能不仅应该降级android studio,还应该降级android SDKmanager,使用旧的build tools,一切都应该降级,回滚。或者联系 Zelix,以便他们更新他们的解决方案以适应新的需求。
  • 看看他的活动,你是对的@SamzSakerz :)
【解决方案3】:

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

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

之后显然它不适用于原始 proguardStub.jar,因为它适用于 proguard 5.0 而不是 6.0.3 我将代码拆开并将代码注入旧的 proguardStub.jar 以被视为 6.0.3 和现在它终于起作用了!这是我创建的更新后的 proguardStub.jar here

如果你们中有人想知道我是怎么做到的,我只是使用 ASM 更改了字节码,这样它就不会导致错误,还更改了旧的字符串,所以它显示 6.0.3 而不是 5.0 :) 当然字符串没有'不影响任何东西,而不是只显示它是什么版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 2015-12-08
    • 2022-06-21
    相关资源
    最近更新 更多