ProGuard no funciona con okhttp
ProGuard no jugará bien con okhttp y sigo recibiendo las siguientes advertencias:
Warning:com.squareup.okhttp.internal.huc.HttpsURLConnectionImpl: can't find referenced method 'long getContentLengthLong()' in program class com.squareup.okhttp.internal.huc.HttpURLConnectionImpl Warning:com.squareup.okhttp.internal.huc.HttpsURLConnectionImpl: can't find referenced method 'long getHeaderFieldLong(java.lang.String,long)' in program class com.squareup.okhttp.internal.huc.HttpURLConnectionImpl Warning:com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpsURLConnection: can't find referenced method 'long getContentLengthLong()' in program class com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpURLConnection Warning:com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpsURLConnection: can't find referenced method 'long getHeaderFieldLong(java.lang.String,long)' in program class com.squareup.okhttp.internal.huc.JavaApiConverter$CacheHttpURLConnection Warning:there were 4 unresolved references to program class members. Your input classes appear to be inconsistent. You may need to recompile the code. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember)
Estos son mis ajustes proguard para okhttp y retrofit:
- Retrofit 2: enviar archivos con el objeto json
- Android: subir imagen a Twitter utilizando REST API y Fabric, error de tubería roto
- Android: agregando imagen al tweet usando la API REST de tela, Twitter y Retrofit
- Retrofit error de lanzamiento Se esperaba BEGIN_ARRAY pero era BEGIN_OBJECT
- NetworkOnMainThreadException con retrofit-beta2 y rxjava
-dontwarn rx.** -dontwarn okio.** -dontwarn com.squareup.okhttp.* -dontwarn retrofit.appengine.UrlFetchClient -keep class retrofit.** { *; } -keepclasseswithmembers class * { @retrofit.http.* <methods>; } -keepattributes Signature -keepattributes *Annotation*
¿Podría esto tener algo que ver con los cambios a ProGuard en Android Studio 1.0?
He intentado las respuestas a las preguntas relacionadas, pero sólo sugirió que utilice la configuración que ya tengo.
- Cómo manejar la paginación en retrofit
- No se puede crear un conversor para mi clase en Android Retrofit library
- Uso de Gson y Retrofit 2 para deserializar las complejas respuestas de la API
- Rx java retrofit 2 manejo de errores
- Deserializador de Gson con el convertidor de Retrofit: solo necesita JSON interno para todas las respuestas
- Android: Realm + Retrofit 2 + Gson
- Deshabilitar la comprobación de certificados SSL en la biblioteca de actualización
- Retrofit y SimpleXML para el elemento raíz desconocido?
Esto funciona para mí:
Usted tiene que agregar a su proguard-rules.pro estas dos líneas:
-keep class com.squareup.okhttp.** { *; } -keep interface com.squareup.okhttp.** { *; }
El archivo proguard-rules.pro completo se verá así:
-dontwarn rx.** -dontwarn okio.** -dontwarn com.squareup.okhttp.** -keep class com.squareup.okhttp.** { *; } -keep interface com.squareup.okhttp.** { *; } -dontwarn retrofit.** -dontwarn retrofit.appengine.UrlFetchClient -keep class retrofit.** { *; } -keepclasseswithmembers class * { @retrofit.http.* <methods>; } -keepattributes Signature -keepattributes *Annotation*
Finalmente pude resolver este problema.
Las advertencias que encontré eran realmente sin sentido y pueden ser ignoradas.
En cambio, olvidé no ofuscar mis clases de modelo:
-keep class com.example.datamodel.** { *; }
Después de este cambio todo funcionó bien.
Funciona para mí con este configs. Use **
lugar de *
para todas las sub clases con paquetes secundarios encapsulados
-dontwarn org.xmlpull.v1.** -dontwarn com.squareup.** -keep class com.squareup.** { *; }
Añada esto a su configuración de proguard:
-dontwarn com.squareup.okhttp.internal.huc.**
Creo que es seguro asumir que usted no está usando ninguna de las clases en com.squareup.okhttp.internal
desde que es donde sus advertencias se originan.
Okhttp
-keepattributes Firma
-keepattributes Anotaciones
-mantener la clase okhttp3. ** {*; }
– Mantenga la interfaz okhttp3. ** {*; }
-dontwarn okhttp3. **
- JDBC vs Servicio Web para Android
- ¿Qué encabezado se debe utilizar para enviar GZIP comprimido JSON de Android Client a Server?