Google 游戏:使用另一种风格删除云保存游戏
Google Games: Cloud save game gets deleted by using another flavor
我在使用 Google Play Savegames
和 Android flavors
时遇到奇怪的错误。
为了测试我的游戏,我有两个不同的 flavors
,dev
用于测试,release
用于发布。
我使用相同的 google 帐户对两种口味使用 Google Play savegames
。似乎每当我将其中一个版本的游戏存档推送到云端时,另一个版本就找不到它的游戏存档了。
为两个 flavors
启用保存游戏是否会产生某种冲突,这可能会导致我的保存游戏丢失?如果它们具有不同的包名称(com.company.mygame 和 com.company.mygame.dev),难道不应该在云中将其保存为两个不同的游戏,或者 Google Play Games
如何处理这个问题?
我自己解决了这个问题,这是 Proguard
的问题。 Proguard
重命名了我的枚举的名称,它们是我的游戏存档数据的一部分,即使游戏存档数据本身被排除在混淆之外。排除对保存游戏数据中的所有变量名称都有效,但对枚举名称无效。
添加到 Proguard
规则的这些行解决了问题:
# Application classes that will be serialized/deserialized over JSON, keepclassmembers
-keepclassmembers class com.mycompany.mygame.Utility.SaveGameData** { *; }
# all my enums that were renamed
-keep public enum com.mycompany.mygame.Entities.Player$** {
**[] $VALUES;
public *;
}
-keep public enum com.mycompany.mygame.Entities.Enemy$** {
**[] $VALUES;
public *;
}
-keep public enum com.mycompany.mygame.Entities.Quest$** {
**[] $VALUES;
public *;
}
-keep public enum com.mycompany.mygame.Entities.Room$** {
**[] $VALUES;
public *;
}
我在使用 Google Play Savegames
和 Android flavors
时遇到奇怪的错误。
为了测试我的游戏,我有两个不同的 flavors
,dev
用于测试,release
用于发布。
我使用相同的 google 帐户对两种口味使用 Google Play savegames
。似乎每当我将其中一个版本的游戏存档推送到云端时,另一个版本就找不到它的游戏存档了。
为两个 flavors
启用保存游戏是否会产生某种冲突,这可能会导致我的保存游戏丢失?如果它们具有不同的包名称(com.company.mygame 和 com.company.mygame.dev),难道不应该在云中将其保存为两个不同的游戏,或者 Google Play Games
如何处理这个问题?
我自己解决了这个问题,这是 Proguard
的问题。 Proguard
重命名了我的枚举的名称,它们是我的游戏存档数据的一部分,即使游戏存档数据本身被排除在混淆之外。排除对保存游戏数据中的所有变量名称都有效,但对枚举名称无效。
添加到 Proguard
规则的这些行解决了问题:
# Application classes that will be serialized/deserialized over JSON, keepclassmembers
-keepclassmembers class com.mycompany.mygame.Utility.SaveGameData** { *; }
# all my enums that were renamed
-keep public enum com.mycompany.mygame.Entities.Player$** {
**[] $VALUES;
public *;
}
-keep public enum com.mycompany.mygame.Entities.Enemy$** {
**[] $VALUES;
public *;
}
-keep public enum com.mycompany.mygame.Entities.Quest$** {
**[] $VALUES;
public *;
}
-keep public enum com.mycompany.mygame.Entities.Room$** {
**[] $VALUES;
public *;
}