gpt4 book ai didi

android - 使用 proguard Retrofit2 和 GSON 转换器时出错

转载 作者:行者123 更新时间:2023-11-29 02:36:24 31 4
gpt4 key购买 nike

我正在创建一个原生 Android 应用程序,我想发布它。

我正在使用 retrofit 和 Gson 转换器。也是一个搜索 View 。对于这个版本,我已经按照 retrofit 的建议设置了 proguard 规则:

# 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

在改造中我使用:ApiUtils.java

 public static PBTService getPBTService(String BASE_URL) {
return RetrofitClient.getClient(BASE_URL).create(PBTService.class);
}

服务.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;
}
}

在 Debug模式下或混淆器离线时,它可以完美运行。但是当我使用 proguard 生成签名的应用程序并使用改造进行 GET 时,我收到以下错误:

java.lang.IllegalArgumentException: Unable to create converter for class br.com.adley.ipubg.a.a for method a.a

我已经尝试了很多混淆器配置。我可能认为错误与 GSON 转换器有关。

我已经试过了:

#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 *;}

更新

我已经将 GSON 配置添加到 pro-guard:

##---------------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 ----------

但还是报错:

java.lang.IllegalArgumentException: Unable to create converter for class br.com.adley.ipubg.data.models.Player for method a.a

最佳答案

查看评论后,我添加了 GSON proguard 规则并进行了改造。

此外,如果您有一个使用您的模型的包装器,请小心,它会导致转换错误。

我的最终 pro-guard 规则是:

# Add project specific ProGuard rules here.
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}

-dontwarn org.ini4j.** # Ignore warning for missing classes in ini4j
-dontwarn javax.**
-keep class android.support.v7.widget.SearchView { *; }

# Retrofit
-dontwarn okhttp3.**
-dontwarn okio.**
-dontnote retrofit2.Platform
-dontwarn retrofit2.Platform$Java8
-keepattributes Signature
-keepattributes Exceptions

##---------------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.** { *; }
-keep class br.com.adley.ipubg.wrapper.** { *; }

# 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 ----------

感谢大家的评论。

关于android - 使用 proguard Retrofit2 和 GSON 转换器时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46760346/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com