Je crée une application Android native et je souhaite la publier. J'utilise retrofit et convertisseur Gson.Erreur lors de l'utilisation de proguard Retrofit2 et GSON Converter
Aussi une vue de recherche. Pour la sortie, je l'ai mis en place les règles ProGuard, comme le suggère la modernisation:
# Add project specific ProGuard rules here.
-dontwarn javax.**
-keep class android.support.v7.widget.SearchView { *; }
# Retrofit
-dontwarn okhttp3.**
-dontwarn okio.**
# Platform calls Class.forName on types which do not exist on Android to determine platform.
-dontnote retrofit2.Platform
# Platform used when running on Java 8 VMs. Will not be used at runtime.
-dontwarn retrofit2.Platform$Java8
# Retain generic type information for use by reflection by converters and adapters.
-keepattributes Signature
# Retain declared checked exceptions for use by a Proxy instance.
-keepattributes Exceptions
En retrofit j'utilise: ApiUtils.java
public static PBTService getPBTService(String BASE_URL) {
return RetrofitClient.getClient(BASE_URL).create(PBTService.class);
}
Service.java
import br.com.adley.ipubg.data.Player;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.Path;
public interface PBTService {
String API_KEY = "MYKEY";
@Headers(API_KEY)
@GET("profile/pc/{nickname}")
Call<Player> getPlayerStatsByNickname(@Path("nickname") String nickname);
}
RetrofitClient.java
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitClient {
private static Retrofit retrofit = null;
public static Retrofit getClient(String baseUrl) {
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
En mode débogage ou lorsque proguard est hors ligne, il fonctionne parfaitement. Mais quand je produis signé avec l'application proguard et faire une mise à niveau en utilisant GET, je reçois l'erreur suivante:
java.lang.IllegalArgumentException: Unable to create converter for class br.com.adley.ipubg.a.a for method a.a
J'ai essayer beaucoup de configs ProGuard. Je pourrais penser que l'erreur est liée au convertisseur GSON.
Je l'ai déjà essayé:
#My retrofit service package
-keep public class br.com.adley.ipubg.data.** {public private protected *;}
-keep public class br.com.adley.ipubg.activities.MainActivity.** {public private protected *;}
#others configs
-keep class com.google.gson.** { ; }
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }:
-keep public class com.google.gson.**
-keep public class com.google.gson.** {public private protected *;}
MISE À JOUR
J'ai ajouter les GSON configs pro-garde:
##---------------Begin: proguard configuration for Gson ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class br.com.adley.ipubg.data.models.MatchHistory.** { *; }
-keep class br.com.adley.ipubg.data.models.Player.** { *; }
-keep class br.com.adley.ipubg.data.models.Season.** { *; }
-keep class br.com.adley.ipubg.data.models.Stats.** { *; }
# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
##---------------End: proguard configuration for Gson ----------
Mais toujours obtenir une erreur:
java.lang.IllegalArgumentException: Unable to create converter for class br.com.adley.ipubg.data.models.Player for method a.a
Gson a également des règles proguard que vous semblez manquer https://github.com/google/gson/blob/master/examples/android-proguard-example/proguard.cfg –
Merci pour la réponse, je vais vérifier il. – Adley
Malheureusement, toujours pas de travail :( – Adley