com.google.android.gms.internal.zzhu:找不到引用的类android.security.NetworkSecurityPolicy

时间:2015-10-06 15:36:14

标签: android proguard

我尝试使用proguard生成apk,但在尝试构建时遇到此错误:

Warning: com.google.android.gms.internal.zzhu: can't find referenced class android.security.NetworkSecurityPolicy

Warning: there were 3 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:proguardRelease FAILED
Error:Execution failed for task ':app:proguardRelease'.
java.io.IOException: Please correct the above warnings first.

最近,我升级了我的Android SDK工具。在此之前,这个项目没有提出proguard的问题。我找到了这篇帖子(https://plus.google.com/+PaulBurke/posts/T3vmAnRP3q6),其中Oliver Renner写道:

  

“所以基本上是下一个可能无法升级到最新版本的Google库。它似乎还需要compileSdk 23才能在不修改的情况下使用ProGuard(警告:com.google.android.gms.internal。 zzhu:找不到引用类android.security.NetworkSecurityPolicy)“*

我使用SDK 23更新了我的项目以进行编译,但问题没有解决。

Bellow,我包含了build.gradle文件的一些部分:

compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        applicationId "com.sample.sample"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0.0"
    }

.
.
.

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile 'com.google.android.gms:play-services:+'
    compile 'com.android.support:design:23.0.0'
    compile('com.crashlytics.sdk.android:crashlytics:2.5.0@aar') {
        transitive = true;
    }
}

6 个答案:

答案 0 :(得分:25)

我有同样的问题。警告信息显示:

  

如果你的代码工作正常而没有丢失的类,你可以抑制   警告' -dontwarn'选项。

因此,请接受其建议:

-dontwarn com.google.android.gms.internal.zzhu

对我来说,这解决了这个问题。但是,如果由于某种原因你的代码在没有类的情况下不能正常工作,你可以另外做这样的事情(未经测试):

-keep class com.google.android.gms.internal.** { *; }

请注意,无论哪种方式,您都需要-dontwarn行。祝你好运!

答案 1 :(得分:7)

对我来说,看起来这实际上是由谷歌在Play Services Analytics 8.1的依赖项中意外包含AdMob引起的: https://plus.google.com/+GoogleDevelopers/posts/HsSNWEQ6H4e

如果我在play-services-ads中排除了build.gradle模块,我就不会在android.security.NetworkSecurityPolicy中收到Proguard错误,并且我的发布版本安装并运行没有任何问题(以前是使用java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity在启动时崩溃,而调试版本工作正常):

compile ('com.google.android.gms:play-services-analytics:8.1.0') {
    exclude module: 'play-services-ads'
}

在Proguard规则中,您还需要:

-dontwarn com.google.android.gms.ads.**

感谢这篇文章的详细信息(虽然它根本没有引用构建崩溃,只是APK大小): https://medium.com/google-developer-experts/warning-for-google-analytics-users-44b0096084e2#.4b3egtbxh

这是我正在处理的项目的问题,其中包括解决问题的提交: https://github.com/OneBusAway/onebusaway-android/issues/342

修改

用户报告此问题已在8.3中解决,这意味着您可以通过将build.gradle设置为:

来解决此问题

compile 'com.google.android.gms:play-services-analytics:8.3.0'

我还没有证实自己。

答案 2 :(得分:1)

当我最近升级我的播放服务依赖时,我遇到了类似的错误。当您省略更新与您使用的播放服务版本相对应的firebase依赖项时,似乎会发生这种情况。

以下是我的依赖项的两个版本:

依赖项的错误版本

compile 'com.google.firebase:firebase-appindexing:10.0.1'
compile 'com.google.android.gms:play-services-maps:10.0.1'
compile 'com.google.android.gms:play-services-places:10.0.1'
compile 'com.google.android.gms:play-services-location:10.0.1'
compile 'com.google.firebase:firebase-auth:9.8.0'
compile 'com.google.firebase:firebase-database:9.8.0'
compile 'com.firebaseui:firebase-ui-database:1.0.1'
compile 'com.google.firebase:firebase-storage:9.8.0'

依赖项的工作版本 ``

compile 'com.google.firebase:firebase-appindexing:10.0.1'
compile 'com.google.android.gms:play-services-maps:10.0.1'
compile 'com.google.android.gms:play-services-places:10.0.1'
compile 'com.google.android.gms:play-services-location:10.0.1'
compile 'com.google.firebase:firebase-auth:10.0.0'
compile 'com.google.firebase:firebase-database:10.0.0'
compile 'com.firebaseui:firebase-ui-database:1.0.1'
compile 'com.google.firebase:firebase-storage:10.0.0'

`` 谷歌似乎最近将游戏服务更新与firebase更新一起移动。希望这可以节省一些灵魂。

答案 3 :(得分:1)

问题出在我更新版本时,我尝试了所有解决方案,但对我不起作用。然后我看到此问题#24109609,赞成保护措施的规则对我有效。

-keepattributes Signature -keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.apache.** -dontwarn org.w3c.dom.**
-dontwarn android.support.v4.**
-dontwarn com.google.android.gms.**
-dontwarn com.google.firebase.**
-keep class * extends com.myCompany.package.flavor.Flavor { *; }
-keep class com.myCompany.** { *; }

答案 4 :(得分:0)

对我来说,我只是将项目的所有模块同步到最近的游戏服务库,然后我才能使用该软件包。

我在build.gradle中使用的内容(适用于所有模块):

compile 'com.android.support:support-v4:23.0.1'
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.google.android.gms:play-services:7.8.0'

在我使用compile 'com.google.android.gms:play-services:7.5.0'之前

希望这有助于某人。

答案 5 :(得分:-3)

对我而言,它取代了

  

编译com.google.android.gms:play-services-appindexing:9.8.0'

with:

compile 'com.google.android.gms:play-services:10.0.0'