Proguard 错误:“处理任务 java.io.IOException 时出现异常:请先更正上述警告”

Posted

技术标签:

【中文标题】Proguard 错误:“处理任务 java.io.IOException 时出现异常:请先更正上述警告”【英文标题】:Proguard error: "Exception while processing task java.io.IOException: Please correct the above warnings first" 【发布时间】:2018-07-16 09:51:06 【问题描述】:

自从升级到 android gradle 插件 3.0.1 我收到以下错误:

Warning: Exception while processing task java.io.IOException: Please correct the above warnings first.

:app:transformClassesAndResourcesWithProguardForProductionRelease 失败

问题是:我的日志中没有看到任何警告。

我还使用 -i 标志运行了构建,并且得到了以下(大)日志: https://gist.github.com/stoefln/b5e5e899c73b52d8065a5daeead716b3

非常欢迎任何想法!

【问题讨论】:

您应该使用 -i 标志运行构建并将 -verbose 添加到您的 proguard 规则中以获得更多输出。阅读有问题的库后,应立即打印警告。 【参考方案1】:

这是因为在你的依赖中有多个不同版本的 rxjava 隐式依赖。

来自此日志:

Reading program jar [/Users/steph/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava/1.2.5/b423532b5a3c949cbb799468f83bf566032fe98d/rxjava-1.2.5.jar] (filtered)

Reading library jar [/Users/steph/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava/1.2.3/7fe1a94c1aeb958acc876fe616922cc191f3222c/rxjava-1.2.3.jar] (filtered)

您可以看到,在您的应用中,有 2 个版本的 rxjava:1.2.31.2.5

你的一个依赖,android-rxlocationsettings,使用的是rxjava 1.2.5,你可以看看它的build.gradle:

apply plugin: 'com.android.library'

dependencies 
  compile 'pl.charmas.android:android-reactive-location:0.10@aar'
  compile 'com.google.android.gms:play-services-location:10.0.1'
  compile 'com.android.support:support-v4:25.0.1'
  compile 'io.reactivex:rxjava:1.2.5'


android 
  compileSdkVersion 25
  buildToolsVersion "25.0.2"

  defaultConfig 
    minSdkVersion 14
  

因此,您需要使用从依赖项中排除来排除它:

dependencies 
  ...
  compile ('com.github.jetradarmobile:android-rxlocationsettings:1.1.0') 
    exclude group: "io.reactivex", name: "rxjava"
  
  ...

或使用配置:

configurations.all 
    exclude group: "io.reactivex", module:"rxjava"

【讨论】:

能否请您补充一下您是如何发现冲突的? @stoefln:你可以从Note: duplicate definition of library class [rx.BackpressureOverflow$Strategy]找到它。 rx.*** 是 rxjava 的一部分。顺便说一句,你还有另一个重复的库,它可能是 android httpclient。 Note: duplicate definition of library class 的每一行都在告诉您,无论是显式还是隐式,您都有重复的依赖关系。 谢谢,有道理。您是如何发现哪些库引用了 rx? 这很简单,如果您尝试在日志中创建rx.,您会发现如下内容:Note: duplicate definition of library class [rx.plugins.RxJava.**。这意味着 rx.** 是 rxjava 的包。然后去rxjava github确认一下。在那里您会发现该软件包适用于 rxjava 版本 1。 是的,你是对的。您可以使用./gradlew app:dependencies 查看依赖关系树。或者,您可以通过选择左侧的 Project 工具栏,然后将 Android 更改为 Project,快速浏览项目中的依赖关系树。你可以从External Libraries看到这个库。【参考方案2】:

唯一对我有用的是@Moti Bartov 的answer

-ignorewarnings

proguard-rules.pro结尾

【讨论】:

【参考方案3】:

要查看警告,请将选项 -verbose 添加到您的 proguard 文件中,然后从 gradle 输出中 grep 警告:

./gradlew -i clean assemble<buildtype> | grep -i "warning"

其中构建类型可以是 Release 或您定义的包含 proguard 配置的任何其他构建类型。

【讨论】:

【参考方案4】:

只需在 proguard-rules.pro 中使用 -dontwarn,如下所示

-dontwarn com.

【讨论】:

【参考方案5】:

我遇到了类似的问题,在我的情况下,如果您发现任何与类引用相关的警告,我会检查日志中的警告,这表明您需要清理构建项目。

运行gradlew clean,然后是

gradlew 构建

或合并gradlew clean build

Build Failed

Warnings to look out for

【讨论】:

【参考方案6】:

试试这个(对我有用)

我也遇到了 pro guard 的问题,但我发现 git hub 中的以下代码更有用。

在 proguard-rules.pro 中添加这一行

-dontoptimize
-dontpreverify

【讨论】:

【参考方案7】:

只需在 proguard 中添加忽略警告:https://***.com/a/59428966/7308789

【讨论】:

以上是关于Proguard 错误:“处理任务 java.io.IOException 时出现异常:请先更正上述警告”的主要内容,如果未能解决你的问题,请参考以下文章

添加 Facebook sdk 和 Google Firebase sdk 时的 Android Proguard 问题(重复)

Proguard 返回错误 1 ​​- 项目 bin 文件夹中没有 proguard.txt 文件?

改造和 Proguard 错误

Proguard 和错误

带有重复 Zip 输入错误的 Proguard

Proguard & Retrofit 错误