10

Я использую аналитику и во время компиляции я получаю это Proguard предупреждения:Аналитика сломана на Зефир?

Warning: com.google.android.gms.internal.zzw$zza: can't find superclass or interface org.apache.http.client.methods.HttpEntityEnclosingRequestBase 
Warning: com.google.android.gms.analytics.internal.zzam: can't find referenced class org.apache.http.NameValuePair 
Warning: com.google.android.gms.analytics.internal.zzam: can't find referenced class org.apache.http.client.utils.URLEncodedUtils 

и многое другое.

Я использую эти зависимости:

compile 'com.google.android.gms:play-services-base:7.8.0' 
compile 'com.google.android.gms:play-services-gcm:7.8.0' 

Является ли это ошибка? Есть ли обходной путь для этого?

+0

Связано: https://code.google.com/p/android/issues/detail?id=183116 – rekire

+0

Я играю с правилами proguard '-dontwarn com.google.android.gms. **', но я не могу создавать сборки релизов. – rekire

+0

Вы должны отметить [ответ Барри Ирвин] (http://stackoverflow.com/a/32115639/1747491) как правильно. Проблема заключается в удалении «org.apache.http» с Android, который был адресован Google. – theblang

ответ

11

Добавление ProGuard

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

кажется исправить

+2

исправить сборку, но Google Play Services 7.8.0 не сможет общаться с Интернетом без Apache HTTP, поэтому нет объявлений, нет аналитики, нет карт ... – mmathieum

1

Возможно, это ошибка, отметим, что Android Marshmallow еще не выпущен, и согласно комментариям к Google+, когда «Разработчики Android» опубликовали сообщение о SDK, есть много ошибок с proguard и другими вещами. Подождите, пока не появится более новая версия SDK.

0

Согласно API 22-23 дифференциалов изменений, org.apache.http. * Пакеты были удалены от Android 6.0 (Зефир) API Level 23.

http://developer.android.com/sdk/api_diff/23/changes.html

через: http://android-developers.blogspot.co.uk/2015/08/m-developer-preview-3-final-sdk.html

+0

Извините. Недостаточно репутации, чтобы сделать комментарий. Но я только что наткнулся на это. Надеюсь, это поможет тем, кто пропустил удаление diff. – Kosso

+0

@ Kosso Ну, тогда ответьте на многие новые вопросы, если вы первый, кто ответит и получите одобренный ответ, вы получите +15 репутацию ^^ – Max

7

Я думаю, что если добавить поддержку устаревшего Http к build.gradle вашего приложения (только внутри андроид секции), то он должен решить эту проблему до тех пор, GMS и другие библиотеки не перейти к неудалению классов

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

См. this page для официальной документации.

6

Это ошибка, мы должны включить все необязательные зависимости (http теперь необязательно в API 23) при запуске Proguard, поскольку Proguard очень строг в отношении просмотра всех необходимых классов.

Проблема в том, что если ваш проект приложения не объявит, что ему нужен http, то Progard не будет настроен на его получение в качестве библиотеки.

Временное решение должно заключаться в том, чтобы ваше приложение заявляло, что оно ему нужно, но это не то, что вы хотите. (См других ответов)

Создания Proguard не предупреждает об отсутствии классов, вероятно, не является хорошей идеей, но это тоже возможно (см других ответов)

Во всяком случае, мы исправим это в конечном 1.4. Он должен появиться в следующей бета-версии (beta2), на следующей неделе, вероятно (неделя 2015/09/07)

+0

Отличные новости. Значит ли это, что мы сможем сказать proguard, что у нас есть необязательная зависимость? – rekire

+0

Нет, мы просто сконфигурируем proguard с дополнительными библиотеками (сейчас это только HTTP-наследие), если зависимость использует его. Если мы дойдем до точки, где имеется огромное количество дополнительной библиотеки, и это заставит proguard работать медленнее, тогда мы разрешим вам настроить это вручную, но пока нет необходимости. –

Смежные вопросы