Android 吃棉花糖?

Android 吃棉花糖?,android,google-analytics,google-play-services,android-6.0-marshmallow,Android,Google Analytics,Google Play Services,Android 6.0 Marshmallow,我正在使用分析,在编译时收到以下proguard警告: 警告:com.google.android.gms.internal.zzw$zza:找不到超类或接口org.apache.http.client.methods.HttpEntityEnclosingRequestBase 警告:com.google.android.gms.analytics.internal.zzam:找不到引用的类org.apache.http.NameValuePair 警告:com.google.android.

我正在使用分析,在编译时收到以下proguard警告:

警告:com.google.android.gms.internal.zzw$zza:找不到超类或接口org.apache.http.client.methods.HttpEntityEnclosingRequestBase
警告:com.google.android.gms.analytics.internal.zzam:找不到引用的类org.apache.http.NameValuePair
警告:com.google.android.gms.analytics.internal.zzam:找不到引用的类org.apache.http.client.utils.URLEncodedUtils
还有更多

我正在使用这些依赖项:

编译'com.google.android.gms:play services base:7.8.0'
编译'com.google.android.gms:play services gcm:7.8.0'

这是虫子吗?有什么解决方法吗?

这可能是一个bug,请注意,Android Marshmallow尚未发布,根据Google+上的评论,“Android开发者”发表了一篇关于SDK的帖子,proguard和其他东西有很多bug。等待SDK的更新版本发布。

添加到proguard

-keep public class com.google.android.gms.**
-dontwarn com.google.android.gms.**

似乎修复了

根据API 22-23的差异更改,org.apache.http.*包已从Android 6.0(棉花糖)API级别23删除


via:

我认为,如果您将传统Http支持添加到应用程序的build.gradle中(就在android部分中),那么它应该能够解决问题,直到GMS和其他库移动到未删除的类为止

android {
    useLibrary 'org.apache.http.legacy' // Need until GMS upgraded
}

有关官方文档,请参阅。

这是一个bug,在运行Proguard时,我们需要包括所有可选的依赖项(http现在在API 23中是可选的),因为Proguard非常严格地要求查看所有需要的类

问题是,如果您的应用程序项目没有声明它需要http,那么Progard将不会被配置为作为库jar接收它

一个临时的解决方案是让你的应用程序声明它需要它,但这也不是你真正想要的。(见其他答案)

让Proguard不对丢失的类发出警告可能不是一个好主意,但也有可能(参见其他答案)


无论如何,我们会在最后的1.4版本中解决这个问题。它应该出现在下一个测试版(beta2),可能是下周(2015/09/07的一周)

相关:我在玩proguard规则
-dontwarn com.google.android.gms.*
,但我无法创建发布版本。你应该标记为正确。问题在于从Android中删除了
org.apache.http
,这是由Google解决的。修复构建,但是Google Play Services 7.8.0将无法在没有apache http的情况下与互联网通信,因此没有广告、没有分析、没有地图……对不起。没有足够的代表发表评论。但我刚刚遇到了这个。希望它能帮助那些错过了差异消除的人。@Kosso好,然后回答许多新问题,如果你是第一个回答并得到批准的答案,你会得到+15声誉^好消息。那么这是否意味着我们可以告诉proguard我们有一个可选的依赖项呢?不,我们也将使用可选库配置proguard(现在它只是http遗留库),以防依赖项使用它。如果我们有大量的可选库,这会使proguard变慢,那么我们将允许您手动配置,但目前没有必要。