【问题标题】:How to use -dontwarn in ProGuard?如何在 ProGuard 中使用 -dontwarn?
【发布时间】:2014-02-03 02:52:46
【问题描述】:

我正在使用 android studio 构建调试和发布应用程序。 当我构建调试/发布应用程序时

./gradlew assembleDebug

./gradlew assembleRelease

两个构建都完美地创建并运行。显示适当的调试或发布对话框

现在我在 build.gradle 中添加了 proguard 详细信息:

signingConfigs {
    myConfig {
           storeFile file("keystore.jks")
           storePassword "abc123!"
           keyAlias "androidreleasekey"
           keyPassword "pqrs123!"
    }
}

buildTypes {
    release {
        runProguard true
        proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
        signingConfig signingConfigs.myConfig
    }
}
productFlavors {
    defaultFlavor {
        proguardFile 'proguard-rules.txt'
    }
}

现在它在事件日志中显示错误

警告:有 7 个未解析的类或接口引用。 您可能需要添加缺少的库 jar 或更新它们的版本。 如果您的代码在没有丢失类的情况下工作正常,您可以抑制 带有“-dontwarn”选项的警告。 (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)

警告:对程序类成员有 2 个未解决的引用。 您的输入类似乎不一致。 您可能需要重新编译代码。

(http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember) :Flash Sales:proguardDefaultFlavorRelease FAILED

如果我将 runProguard 选项设置为 false,则它正在运行。

我有这些问题:

1) 可以用runProguard = false 发布apk 吗?

2) 创建发布版本时如何使用 dontwarn?

【问题讨论】:

  • 这是完整的错误日志吗?似乎您遗漏了实际的 7 + 2 个未解决的引用。使用-dontwarn 非常简单,参见例如例如:stackoverflow.com/questions/6974231/…
  • 关于您的问题 1),对于实际发布版本(到 Google Play 等),建议使用 ProGuard。 (但如果您不关心您的应用程序是否易于逆向工程,则不是强制性的。)我认为绝对值得花一到两个小时来学习使用 ProGuard 并解决您遇到的错误。
  • 感谢您的快速回复。现在,当在 proguard-rules.txt 中添加该行时,构建成功创建。现在我还有一个问题,我收到参考警告警告:jcifs.http.NetworkExplorer:找不到超类或接口 javax.servlet.http.HttpServlet 警告:jcifs.http.NtlmHttpFilter:找不到超类或接口 javax .servlet.Filter 当我使用方式 1:-dontwarn javax.servlet.** 或这种方式 2:-dontwarn jcifs.http.** 构建成功创建。那么应该首选哪种方式,这两种方式有什么区别?
  • 我想你可以在这个链接stackoverflow.com/questions/35268287/…找到你的答案

标签: android proguard


【解决方案1】:

当我向项目添加新库时,通常这是我需要为 Progaurd 定义的方式。

假设我正在使用 Twitter4J lib,然后我以这种方式添加 dontwarn。

-保持类 twitter4j.** { *; }

-不要警告 twitter4j.**

【讨论】:

  • “未解析的引用”警告是否意味着 Proguard 确实删除了这些类?我不应该过滤那些而不是不警告吗?
  • 你在哪里添加这个?
  • @jonney 请查看this 帖子,可能对您有所帮助。
  • 我可以使用 -dontwarn .* 吗?
  • 注意:为所有库编写-keep class some.library.** { *; } 就像根本不使用 ProGuard。
【解决方案2】:

将 -dontwarn 行放在 proguard-rules.pro 或 proguard-rules.txt 文件中。

不得不在其他地方用谷歌搜索,因为没有一个答案包含此信息。检查您的案例所需的特定行的其他答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多