pra*_*raj 8 android proguard gson android-proguard retrofit2
我在我的项目中使用ProGuard,但它在新的Gson().toJson(Request)中提供了错误的数据;
我正在退出
{"a":"manage","b":"689184d4418b6d975d9a8e53105d3382","c":"10","d":"76"}
Run Code Online (Sandbox Code Playgroud)
代替
{"username":"manage","password":"689184d4418b6d975d9a8e53105d3382","value":"10","store":"76"}
Run Code Online (Sandbox Code Playgroud)
我的ProGuard规则
-dontwarn okio.**
-dontwarn retrofit2.Platform$Java8
-dontwarn sun.misc.Unsafe
-dontwarn org.w3c.dom.bootstrap.DOMImplementationRegistry
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
-keepclassmembers class rx.internal.util.unsafe.** {
long producerIndex;
long consumerIndex;
}
-keepclasseswithmembers class * {
@retrofit2.http.* <methods>;
}
-keep class com.google.gson.** { *; }
-keep class com.google.inject.** { *; }
Run Code Online (Sandbox Code Playgroud)
而我正在使用
compile 'com.squareup.retrofit2:converter-gson:2.0.0'
Run Code Online (Sandbox Code Playgroud)
是否有一个新推荐的ProGuard配置用于retrofit2:在Android中的converter-gson?
Dod*_*dge 14
你要么想用gson保留你正在使用的类,要么使用@SerializedName注释.
选项1(保持等级)
// all classes in a package
-keep class com.example.app.json.** { *; }
// or a specific class
-keep class com.example.app.json.SpecificClass { *; }
选项2(使用@SerializedName):
public class YourJsonClass{
@SerializedName("name") String username;
public MyClass(String username) {
this.username = username;
}
}
使用第二个选项proguard仍会模糊类和字段名称,但gosn可以使用注释来获取每个字段的正确名称
在您想要的类(如 authToken)上使用 android @Keep 注释
@Keep
data class AuthToken(
var access_token: String,
var token_type: String,
var expires_in: String,
var userName: String,
var issued: String,
var expires: String) {}
Run Code Online (Sandbox Code Playgroud)
然后在 ProGuard 中添加以下行:
如果使用 androidx
-keep @androidx.annotation.Keep public class *
Run Code Online (Sandbox Code Playgroud)
别的
-keep @android.support.annotation.Keep public class *
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5527 次 |
| 最近记录: |