gpt4 book ai didi

android - 如何让一个简单的 Android (Studio) Proguard 配置正常工作

转载 作者:太空狗 更新时间:2023-10-29 15:00:35 25 4
gpt4 key购买 nike

我之前工作过的每个项目都指定了 Proguard,但最终都被放弃了,因为启用它会导致很多问题无法使用,并且会消耗大量资源。但我目前的项目确实需要混淆以增加逆向工程的难度。当我使用 Android Studio 和 Gradle 时,我在构建配置中启用了它:

    release {
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}

然后我构建了一个发布版本,看到了 292 条警告和构建失败。大部分如下,与库相关(Retrofit、Joda Time、Butterknife 等)

Warning:butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.lang.model.element.TypeElement

好的,所以我假设它正在优化部分库。所以我尝试将这样的行添加到 proguard-rules.pro 文件(在 Gradle 文件中指定并由 Android Studio 自动创建):

-keep class butterknife.internal.** { *; }

没有区别。好的,所以我会尝试禁用所有收缩和优化,希望只从混淆中受益(即使承认混淆的好处少了一点)。我将这些行添加到 Proguard 配置文件中:

-dontshrink
-dontoptimize

我重新编译,绝对没有任何变化,我仍然留下 292 个相当无意义的编译警告。现在我真的很困惑。

  • 我如何才能 100% 确定 Proguard 确实在读取我的 Proguard 配置文件?或者它正在使用它但我设置了错误的选项?
  • 我可以向 Proguard 文件添加什么来减少它的工作以仅进行混淆,所以我有一个启用 Proguard 的构建配置作为起点(不会破坏我的应用程序)并且不会优化掉任何代码。

如果能帮助我减少对 Proguard 的仇恨,我将不胜感激。

最佳答案

将以下内容放入您的 proguard 配置中,这样它就不会破坏您的 butterknife 库。

-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewInjector { *; }

-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}

这是关于同一问题的 github 讨论链接,https://github.com/JakeWharton/butterknife/pull/117#issuecomment-51292624

关于android - 如何让一个简单的 Android (Studio) Proguard 配置正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27277916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com