我正在尝试混淆我的 Android 应用程序,但是当我生成 apk 作为版本并在设备上运行时,我的 firebase 字段名称会发生更改。而且有些字段数据没有上传到 firebase 实时数据库,例如 System.currentTimeMillisecond()、passwd。
我的应用程序运行良好,没有混淆,并正确插入所有数据。混淆后,它的行为不正确,并且无法将一些数据正确插入到 firebase 中。
预期节点:
-userid
-name:"abc"
-age:15
-passwd:"pass@123"
-timestamp:16003243241
混淆后:
-userid
-a:"abc"
-b:15
我的 UserModel 类
public class UserModel{
public int age;
public String name,passwd;
public long timestamp;
public UserModel(){}
public UserModel(String name, String passwd, int age, long timestamp){
this.name=name;
this.passwd=passwd;
this.age=age;
this.timestamp=timestamp;
}
}
我已申请到build.gradle:app
buildTypes {
release {
minifyEnabled true
shrinkResources=true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
Proguard:
-keep class yourpackage.** { *; }
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
我的最小 SDK 23 和目标 28。请帮助我正确混淆数据。
您发现问题混淆改变了您的模型,您可以忽略这些更改 看看这个解决方案,感谢 Mario Kutlev 和丹麦 Ansari https://stackoverflow.com/a/46156695/9077875
为了解决该问题,我将模型类移至模型包,并为包添加了新的 >ProGuard 规则。
-keep class com.company.myfeature.model.** { *; }
另一种解决方案是使用支持库中的@Keep注释来>禁用类的混淆:
@Keep
data class MyRequestBody(val value: String)
使用@Keep可能会导致问题,因为很容易忘记为新的>类添加它。
希望将来有一种方法可以使用一个 ProGuard 规则来禁用包中所有数据类的>混淆,而无需为模型类创建子>包。