Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中使用R8和Proguard时,如何从逆向工程中保护数据模型类?_Android_Proguard_Android R8_Android Obfuscation - Fatal编程技术网

在Android中使用R8和Proguard时,如何从逆向工程中保护数据模型类?

在Android中使用R8和Proguard时,如何从逆向工程中保护数据模型类?,android,proguard,android-r8,android-obfuscation,Android,Proguard,Android R8,Android Obfuscation,现在,在对android应用程序APK文件进行反向工程时,我可以看到纯文本中的数据模型类,就像我使用@keep注释一样。如果没有注释,R8将删除这些文件,应用程序将崩溃 如何通过确保数据模型文件在反向工程中不可见来保护它们?在gradle.properties文件中添加以下行 # Disables R8 for Android Library modules only. android.enableR8.libraries = false # Disables R8 for all module

现在,在对android应用程序APK文件进行反向工程时,我可以看到纯文本中的数据模型类,就像我使用
@keep
注释一样。如果没有注释,R8将删除这些文件,应用程序将崩溃


如何通过确保数据模型文件在反向工程中不可见来保护它们?

gradle.properties
文件中添加以下行

# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false

最近我遇到了同样的问题,我的问题是我有一套过时的proguard规则。请注意,2019年10月4日,Gson更新了其proguard规则,将R8考虑在内。希望你必须更新它们

你可以在

使用字段时,Gson使用存储在类文件中的泛型类型信息。前卫 #默认情况下删除此类信息,因此将其配置为保留所有信息。 -保留署名 #用于使用GSON@Expose注释 -keepattributes*注释* #Gson特定类 -dontwarn sun.misc** #-保持类com.google.gson.stream.*{*;} #将通过Gson进行序列化/反序列化的应用程序类 -保持类com.google.gson.examples.android.model.*{;} #防止proguard从TypeAdapter、TypeAdapterFactory、, #JsonSerializer、JsonDeserializer实例(因此可以在@JsonAdapter中使用) -keep类*实现com.google.gson.TypeAdapter -keep类*实现com.google.gson.TypeAdapterFactory -keep class*实现com.google.gson.JsonSerializer -keep类*实现com.google.gson.JsonDeserializer #防止R8使数据对象成员始终为空 -keepclassmembers,AllowFusion类*{ @com.google.gson.annotations.SerializedName; }
另外,请记住添加您的特定模型类:查看中心的规则,因为它只是一个示例,必须使用您自己的模型进行更改。

请您解释一下这是如何回答OP的问题的?您能否提供有关您使用的数据模型类的更多信息?你使用像GSON这样的库吗?您是否也在Proguard上遇到过同样的崩溃,或者它是在迁移到R8之后出现的?数据模型类是POJO。是的,我使用GSON将服务器响应(json字符串)反序列化到java对象。不,我在使用Proguard时没有遇到崩溃。您最终找到了解决方案吗?
# 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 com.google.gson.examples.android.model.** { <fields>; }

# Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class * {
  @com.google.gson.annotations.SerializedName <fields>;
}