com.google.android.gms.internal.zzhu:找不到引用的类 android.security.NetworkSecurityPolicy
Posted
技术标签:
【中文标题】com.google.android.gms.internal.zzhu:找不到引用的类 android.security.NetworkSecurityPolicy【英文标题】:com.google.android.gms.internal.zzhu: can't find referenced class android.security.NetworkSecurityPolicy 【发布时间】:2016-01-03 14:38:55 【问题描述】:我尝试使用 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 写道:
“所以基本上下一个可能不会升级到最新版本的谷歌库。它似乎也需要 compileSdk 23 才能在不修改的情况下使用 ProGuard(警告:com.google.android.gms.internal. zzhu: 找不到引用的类 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;
【问题讨论】:
您是否尝试过-dontwarn android.security.**
加上尝试使用-dontoptimize
禁用优化,看看效果如何
好的,试试这个:在您附加的 gradle 文件中,在您的 buildToolsVersion "23.0.0"
下输入以下 useLibrary 'org.apache.http.legacy'
如果可行,我将写一个更详细的答案,说明其工作原理和原因
遇到了同样的问题,但我没有使用 Gradle 进行构建,-dontwarn android.security.**
为我工作。
我希望您知道在您的依赖项中使用 + 对编译代码有什么影响。尝试在每个构建上确定依赖项的最新版本并下载。这会带来冲突,尤其是对于像 firebase 这样需要与 google play 服务同步的依赖项。
@ThanosFisherman:你的解决方案对我有用 :)
【参考方案1】:
我遇到了同样的问题。警告消息说:
如果您的代码在没有缺少类的情况下运行良好,您可以取消 带有“-dontwarn”选项的警告。
让我们接受它的建议:
-dontwarn com.google.android.gms.internal.zzhu
对我来说,这解决了问题。但是,如果由于某种原因你的代码在没有类的情况下不能正常工作,你可以另外做这样的事情(未经测试):
-keep class com.google.android.gms.internal.** *;
请注意,无论哪种方式,您都需要-dontwarn
行。祝你好运!
【讨论】:
如果它们没有任何用处,请避免向您的 proguard 添加行。 -keep class com.google.android.gms.internal.** *;只告诉 proguard 不要混淆你提到的包中的类。它不会解决警告,因为问题不在于 android.gms.internal.zzhu 类,而是来自该类的引用类 android.security.NetworkSecurityPolicy。 Proguard 只是找不到类的定义,所以它会引发警告。如果您知道此类 (NetworkSecurityPolicy) 在运行时应该存在,您可以使用 dontwarn。 另外我会检查 NetworkSecurityPolicy 类是否被混淆(因此 proguard 看不到它),并且可能会保留它。【参考方案2】:对我来说,这实际上是由于 Google 不小心将 AdMob 包含在 Play Services Analytics 8.1 的依赖项中造成的: https://plus.google.com/+GoogleDevelopers/posts/HsSNWEQ6H4e
如果我在build.gradle
中排除play-services-ads
模块,我不会收到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'
我还没有确认自己。
【讨论】:
感谢您分享我的文章。 此问题似乎已在 8.3.0 中修复 @yuval 谢谢,很高兴知道!我想可能是这样。我也会测试并确认自己。【参考方案3】:当我最近升级我的播放服务依赖项时,我遇到了类似的错误。当您忽略更新与您使用的播放服务版本相对应的 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 更新一起移动。希望这能拯救一些灵魂。
【讨论】:
【参考方案4】:当我更新版本时出现问题,我尝试了所有解决方案但对我不起作用。然后我看到这个问题 #24109609 并且进入 pro-guard 的规则对我有用。
-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.** *;
【讨论】:
【参考方案5】:对我来说,我刚刚同步了我所有项目的模块以使用最近的播放服务库,并且我能够使用该包。
我在 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'
之前
希望这对某人有所帮助。
【讨论】:
【参考方案6】:对我来说,它可以通过替换来工作
编译'com.google.android.gms:play-services-appindexing:9.8.0'
与:
compile 'com.google.android.gms:play-services:10.0.0'
【讨论】:
以上是关于com.google.android.gms.internal.zzhu:找不到引用的类 android.security.NetworkSecurityPolicy的主要内容,如果未能解决你的问题,请参考以下文章