看来这可能只是包装未对准的问题。看一下错误:
Caused by: java.lang.RuntimeException: Generated message class
"org.mypackage.Control$MessageControlHandCard$Builder"
missing method "getCardId".
...
所以那是org.mypackage.Control
.
现在看看你的 Proguard 配置:
-keep public class org.mypackage.messages.* {
}
那是用org.mypackage.messages
,其中不包括org.mypackage.Control
.
现在大概那些不是你的real包名称 - 但如果它们具有代表性,听起来您需要更改您的.proto
文件以发出包中的类org.mypackage.messages
代替org.mypackage
。 (你可以更改你的 Proguard 配置,但听起来这会增加太多。)
或者,您也许可以只使用继承树。我自己不是 Proguard 用户,但从examples http://proguard.sourceforge.net/index.html#manual/examples.html, 你可能想要:
-keep public class * extends com.google.protobuf.GeneratedMessage
我希望它适用于所有协议缓冲区类,无论包如何。你may发现 protobuf 在“顶级”类中还有其他字段/方法。
编辑:进一步查看文档,您可能需要:
-keep public class * extends com.google.protobuf.GeneratedMessage { *; }
or
-keep public class * extends com.google.protobuf.GeneratedMessageLite { *; }
也保护所有成员。还有其他“保留”选项正在考虑而不是-keep
, 例如-keepnames
.