Android 如何在ProGuard中使用-dontwarn?

Android 如何在ProGuard中使用-dontwarn?,android,proguard,Android,Proguard,我正在使用android studio构建调试和发布应用程序。 当我构建调试/发布应用程序时 ./gradlew assembleDebug ./gradlew assembleRelease 这两个构建都是完美创建的,并且运行良好。显示调试或发布的相应对话框 现在,我在build.gradle中添加了proguard详细信息: signingConfigs { myConfig { storeFile file("keystore.jks")

我正在使用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”选项的警告。 ()

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

() :闪存销售:proguardDefaultFlavorRelease失败

如果我将runProguard选项设置为false,那么它将运行

我有以下问题:

1) 使用runProguard=false释放apk可以吗


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

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

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

-保持类twitter4j.*{*;}

-dontwarn twitter4j**


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


因为没有一个答案包含这些信息,所以不得不在其他地方用谷歌搜索。检查其他答案,了解您的案例所需的具体行。

这是完整的错误日志吗?看起来你遗漏了实际的7+2未解决的引用。使用
-dontwarn
非常简单,请参见示例:关于您的问题1),对于实际发布版本(到Google Play等),建议使用ProGuard。(但如果你不在乎你的应用程序很容易进行反向工程,这不是强制性的。)我想说,花一到两个小时学习使用ProGuard并解决你遇到的错误绝对值得。谢谢你的快速响应。现在,当在proguard-rules.txt中添加该行dontwarn时,构建已成功创建。现在我还有一个问题,我得到了参考警告作为警告:jcifs.http.NetworkExplorer:找不到超类或接口javax.servlet.http.HttpServlet警告:jcifs.http.NtlmHttpFilter:当我使用方法1:-dontwarn javax.servlet.*或这种方法2:-dontwarn jcifs.http.*时找不到超类或接口javax.servlet.Filter已成功创建生成。那么,哪种方式应该是首选的,这两者的区别是什么?我想你可以在这个链接上找到答案,“未解析引用”警告是否意味着Proguard删除了类?我是不是应该过滤掉那些而不是dontwarn?你到底在哪里添加这个呢?@jonney请查看帖子,可能会对你有所帮助。我可以使用-dontwarn.*吗?注意:编写
-保留一些类。库。**{*}
对于你所有的库来说就像根本不使用ProGuard一样。