关于 Square 的 Okio 库参考的 Android-Studio-1.2.RC Proguard 警告

Posted

技术标签:

【中文标题】关于 Square 的 Okio 库参考的 Android-Studio-1.2.RC Proguard 警告【英文标题】:Android-Studio-1.2.RC Proguard warnings on Square's Okio library reference 【发布时间】:2015-07-05 09:11:46 【问题描述】:

使用 android Studio:1.2.RC

我在 .gradle 中启用了 proguard: ```

minifyEnabled=true

and added these rules to my proguard-rules.pro:

-dontwarn com.squareup.**
-dontwarn okio.**

and added these lint rules to my .gradle file:

warningsAsErrors false
abortOnError false
disable 'InvalidPackage'

```

但是当我尝试在调试模式下运行应用程序时,我仍然收到这些警告:

```
Warning: okio.DeflaterSink: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
Warning: okio.Okio: can't find referenced class java.nio.file.Files
Warning: okio.Okio: can't find referenced class java.nio.file.Files
Warning: okio.Okio: can't find referenced class java.nio.file.Files
Warning: okio.Okio: can't find referenced class java.nio.file.Path
Warning: okio.Okio: can't find referenced class java.nio.file.OpenOption
Warning: okio.Okio: can't find referenced class java.nio.file.Path
Warning: okio.Okio: can't find referenced class java.nio.file.OpenOption
Warning: okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
Warning: okio.Okio: can't find referenced class java.nio.file.Path
Warning: okio.Okio: can't find referenced class java.nio.file.OpenOption
Warning: okio.Okio: can't find referenced class java.nio.file.Path
Warning: okio.Okio: can't find referenced class java.nio.file.OpenOption
Warning: okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
Warning: there were 14 unresolved references to classes or interfaces.
         You may need to add missing library jars or update their versions.
         If your code works fine without the missing classes, you can suppress
         the warnings with '-dontwarn' options.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)
:app:proguardDebug FAILED

```

这很奇怪,因为我还将这些规则/选项添加到我所有依赖于 OkHttp/Picasso 的库模块中,我不知道哪里出了问题,也许这是一个 Android Studio 错误?有人对这个问题有任何线索吗?

我在 github 上开了一个issue。

【问题讨论】:

您可以忽略这些警告。 github.com/square/okio/issues/60 【参考方案1】:

您已禁用

的警告
-dontwarn com.squareup.**
-dontwarn okio.**

但是对于包裹呢(如您发布的日志中所示)

-dontwarn org.codehaus
-dontwarn java.nio

无论哪种方式,忽略警告都不是一个好方法。

尽量避免像这样缩小这些类:

-keep public class org.codehaus.**
-keep public class java.nio.**

【讨论】:

【参考方案2】:

天哪,我忘了为我的调试版本指定 proguard 文件,添加 'proguardFiles' 规则可以解决问题:

    buildTypes 
        release 
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
        debug 
            debuggable false
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            applicationIdSuffix ".debug"
        
    

您努力寻找钥匙的那一刻,它就在您的口袋里。

【讨论】:

同样的事情发生在我身上。我的默认 proguard 文件名是“proguard-android.txt”,我在“proguard-rules.pro”中编写规则。

以上是关于关于 Square 的 Okio 库参考的 Android-Studio-1.2.RC Proguard 警告的主要内容,如果未能解决你的问题,请参考以下文章

网络编程——使用更简洁且性能高效的Okio库来做IO和NIO

网络编程——使用更简洁且性能高效的Okio库来做IO和NIO

08 | Android 高级进阶(源码剖析篇) Square 高效易用的 IO 框架 okio

13 | Android 高级进阶(源码剖析篇) Square 高效易用的 IO 框架 okio

09 | Android 高级进阶(源码剖析篇) Square 高效易用的 IO 框架 okio

12 | Android 高级进阶(源码剖析篇) Square 高效易用的 IO 框架 okio