【问题标题】:How to get a simple Android (Studio) Proguard config working如何让一个简单的 Android (Studio) Proguard 配置工作
【发布时间】:2014-12-03 17:26:04
【问题描述】:

我之前参与过的每个项目都指定了 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 的仇恨,我将不胜感激。

【问题讨论】:

    标签: android proguard


    【解决方案1】:

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

    -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

    【讨论】:

    • 您的回答有助于添加这些行会影响构建,因此我知道正在使用 proguard 配置文件。但我不想一个一个地修复每个库,我想禁用所有删除代码的优化,所以 Proguard 只会混淆代码。我已经尝试使用您提到的方法(特别是我以前没有使用过的 --dontwarn)所以添加像“-dontwarn okio.**”这样的行允许我解决构建警告并创建一个很棒的 AP​​K,但是如果没有 Proguard,APK 会以各种方式崩溃。我需要停止 Proguard 删除代码。
    • 查看 Proguard 手册,看起来我需要的是保持一切的能力。我想从它不删除任何代码的位置开始,只是优化混淆,但我看不到如何保留所有,似乎需要我单独保留每个错误地删除的类,但这并不简单。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多