【问题标题】:Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease' while generating APK错误:生成 APK 时任务 ':app:transformClassesAndResourcesWithProguardForRelease' 执行失败
【发布时间】:2016-12-29 09:43:52
【问题描述】:

我已经为我的 Android 应用程序生成了一个 APK(作为尝试),我没有遇到任何问题,APK 已正确生成。

现在,我想在生成 APK 时混淆我的代码,所以我在 build.gradle 文件的 release 块中使用了以下行。

minifyEnabled true

问题是现在它抛出了以下错误:

错误:任务 ':app:transformClassesAndResourcesWithProguardForRelease' 执行失败。 java.io.IOException: 请先更正上述警告。

有很多警告。更准确地说,是 1018 条警告。

大部分都是这样的:

警告:com.itextpdf.text.pdf.security.PdfPKCS7:找不到引用的类 org.spongycastle.asn1.tsp.MessageImprint

或

警告:com.github.mikephil.charting.data.realm.base.RealmBaseDataSet:找不到引用的类 io.realm.Sort

总是同样的错误。找不到引用类的类。

我正在使用 MPAndroidChart,所以我认为这是相关的(因为警告中出现了包的名称),但我无法更正这些警告。

编辑:作为证明,我尝试使用以下方法保留课程:

-keep public class com.itextpdf.text.pdf.**

在我的 proguard-rules.pro 文件上,但我仍然收到相同的警告。

build.gradle 文件中我的release 部分是:

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

我在混淆我的代码时是否遗漏了什么?

提前致谢!

【问题讨论】:

  • @VygintasB 我不认为-dontwarn 将是一个安全的选择。我正在尝试使用 -keep 公共课程,但我无法使其正常工作。

标签: android proguard mpandroidchart android-proguard


【解决方案1】:

最后,我发现MPAndroidChart有一个document,告诉你如何配置Proguard。

使用以下配置:

-keep class com.github.mikephil.charting.** { *; }
-dontwarn io.realm.**

我能够在没有任何警告的情况下创建混淆 APK。

另外,我注意到itextpdf 是我过去使用的一个库,但现在我不需要它,所以我只需要将它从我的 gradle 文件的依赖项中删除,警告也消失了。

【讨论】:

    【解决方案2】:

    我在 apk 生成过程中找到了解决此问题的方法。

    打开 build.gradle(app) 并更改构建类型如下。

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt')
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-27
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 2018-06-18
      相关资源
      最近更新 更多