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

Fel*_*ier 22 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.
Run Code Online (Sandbox Code Playgroud)

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

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

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

贝娄,我包含了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;
    }
}
Run Code Online (Sandbox Code Playgroud)

yuv*_*val 25

我有同样的问题.警告信息说:

如果您的代码在没有缺少类的情况下正常工作,则可以使用"-dontwarn"选项来禁止警告.

那么我们来看看它的建议:

-dontwarn com.google.android.gms.internal.zzhu
Run Code Online (Sandbox Code Playgroud)

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

-keep class com.google.android.gms.internal.** { *; }
Run Code Online (Sandbox Code Playgroud)

请注意,-dontwarn无论哪种方式,您都需要这条线.祝好运!

  • 如果它们没有任何用处,请避免向您的 proguard 添加行。-保持类com.google.android.gms.internal.** { *; 只告诉 proguard 不要混淆你提到的包中的类。它不会解决警告,因为问题不在于类 android.gms.internal.zzhu 而在于该类中引用的类 android.security.NetworkSecurityPolicy。Proguard 只是找不到类的定义,所以它会发出警告。如果您知道这个类 (NetworkSecurityPolicy) 应该在运行时存在,您可以使用 dontwarn。 (2认同)

Sea*_*eau 7

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

如果我排除了play-services-ads模块,build.gradle我没有得到Proguard错误android.security.NetworkSecurityPolicy,并且我的发布版本安装并运行没有任何问题(它在启动时崩溃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'
}
Run Code Online (Sandbox Code Playgroud)

在Proguard规则中,您还需要:

-dontwarn com.google.android.gms.ads.**
Run Code Online (Sandbox Code Playgroud)

感谢这篇文章的详细信息(虽然它没有引用构建崩溃,只有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认同)