Gradle 3.4.1 无法使用 Proguard 将响应解析为 Object
Posted
技术标签:
【中文标题】Gradle 3.4.1 无法使用 Proguard 将响应解析为 Object【英文标题】:Gradle 3.4.1 not able to parse the response into Object with Proguard 【发布时间】:2019-10-13 12:14:34 【问题描述】:我刚刚将我的 Gradle 更新到 3.4.1。 我的一个模块中有一个 API 调用。 我在应用程序中使用模块:
implementation com.mindvalley.module_login:Module_Login:$rootConfiguration.loginLibraryVersion
现在,当我使用 ProGuard 生成签名构建时,该对象为空,这意味着改造无法解析该对象。
附: :这适用于调试模式,或者如果我使用 Gradle 版本 3.3.2 运行应用程序
我的改造 Proguard 文件:
-dontwarn retrofit2.**
-keep class retrofit2.** *;
-keepattributes Signature
-keepattributes Exceptions
-keepclasseswithmembers class *
@retrofit2.http.* <methods>;
-keepattributes Signature, InnerClasses, EnclosingMethod
-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations
-keepclassmembers,allowshrinking,allowobfuscation interface *
@retrofit2.http.* <methods>;
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn javax.annotation.**
-dontwarn kotlin.Unit
-dontwarn retrofit2.KotlinExtensions
-if interface * @retrofit2.http.* <methods>;
-keep,allowobfuscation interface <1>
-dontwarn org.codehaus.mojo.**
-keepattributes *Annotation*
-keepattributes RuntimeVisibleAnnotations
-keepattributes RuntimeInvisibleAnnotations
-keepattributes RuntimeVisibleParameterAnnotations
-keepattributes RuntimeInvisibleParameterAnnotations
-keepattributes EnclosingMethod
-keepclasseswithmembers class *
@retrofit2.* <methods>;
-keepclasseswithmembers interface *
@retrofit2.* <methods>;
我的 OkHttp proguard 文件:
-keepattributes Signature
-keep class okhttp3.** *;
-keep interface okhttp3.** *;
-dontwarn okhttp3.**
-dontwarn javax.annotation.**
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
-dontwarn org.codehaus.mojo.animal_sniffer.*
-dontwarn okhttp3.internal.platform.ConscryptPlatform
-dontwarn org.codehaus.mojo.animal_sniffer.*
我的 GSON proguard 文件:
-keepattributes Signature
-keepattributes EnclosingMethod
-keep class sun.misc.Unsafe *;
-keep class com.google.gson.stream.** *;
-dontwarn com.google.gson.internal.UnsafeAllocator
-keepattributes Signature
-keepattributes *Annotation*
-dontwarn sun.misc.**
-keep class com.google.gson.examples.android.model.** <fields>;
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
-keepclassmembers,allowobfuscation class *
@com.google.gson.annotations.SerializedName <fields>;
【问题讨论】:
【参考方案1】:附: :这适用于调试模式,或者如果我使用 Gradle 版本 3.3.2 运行应用程序
从 Gradle 插件版本 3.4.0 开始,D8/R8 默认启用,混淆将由 R8 而不是 ProGuard 完成。
请参阅Stick to ProGuard Obfuscation,了解如何坚持使用 Proguard。
请参阅Android/java: Transition / Migration from ProGuard to R8? ,了解如何迁移到 R8。
【讨论】:
如果我在 gradle.properties 中禁用 R8,它可以正常工作。启用 R8 后,它会失败。您能否告诉我们是否需要编辑 ProGuard 文件或为 R8 添加额外内容?以上是关于Gradle 3.4.1 无法使用 Proguard 将响应解析为 Object的主要内容,如果未能解决你的问题,请参考以下文章
使用 Gradle 和 ProGuard 构建的 Android:“输出 jar 必须在输入 jar 之后指定,否则将为空”
Android Error:(1, 0) Gradle version 2.2 is required. Current version is 3.4.1.
Gradle 在运行 Android 检测时忽略 testProguardFile
Spring Tool Suite 无法使用 Gradle 创建新项目:无法使用 Gradle (STS) 导入,因为未安装 STS Gradle Tooling