Google 프로토콜 버퍼가 사용되는 프로젝트가 있습니다. ProGuard로 난독 화하려고하면 protobuf가 문제를 일으키는 것 같습니다.프로토콜 버퍼가있는 프로젝트에서 Proguard를 사용하는 기능은 무엇입니까?
내 모든 클래스는 mybuildedclasses.jar
에 패키지되어 있습니다. 구글 코드는 내가 mybuildedclasses.jar
를 당황하게하려고 그 후 protbuf.jar
mybuildedclasses.jar
protobuf.jar
other external jars
로 패키지됩니다. 구성 파일은 one과 유사합니다. 결국 모든 항아리는 다른 지방 항아리 안에 포장됩니다.
프로그램을 실행하고 메시지를 보내려고하면 이런 종류의 예외가 인쇄됩니다.
Caused by: java.lang.RuntimeException: Generated message class "org.mypackage.messages.Control$MessageControlHandCard$Builder" missing method "getCardId".
at com.google.protobuf.GeneratedMessage.getMethodOrDie(GeneratedMessage.
java:1366)
at com.google.protobuf.GeneratedMessage.access$1(GeneratedMessage.java:1
361)
at com.google.protobuf.GeneratedMessage$FieldAccessorTable$SingularField
Accessor.<init>(GeneratedMessage.java:1502)
at com.google.protobuf.GeneratedMessage$FieldAccessorTable.<init>(Genera
tedMessage.java:1441)
at org.mypackage.Control$1.assignDescriptors(SourceFile:32
20)
at com.google.protobuf.Descriptors$FileDescriptor.internalBuildGenerated
FileFrom(Descriptors.java:300)
at org.evogame.common.messages.Control.<clinit>(SourceFile:3278)
... 60 more
Caused by: java.lang.NoSuchMethodException: org.evogame.common.messages.Control$
MessageControlHandCard$Builder.getCardId()
at java.lang.Class.getMethod(Class.java:1622)
at com.google.protobuf.GeneratedMessage.getMethodOrDie(GeneratedMessage.
java:1364)
그리고
Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
at org.mypackage.messages.Control$MessageControlGameRequest.interna
lGetFieldAccessorTable(SourceFile:527)
at com.google.protobuf.GeneratedMessage.getAllFieldsMutable(GeneratedMes
sage.java:105)
at com.google.protobuf.GeneratedMessage.getAllFields(GeneratedMessage.ja
va:153)
at com.google.protobuf.TextFormat$Printer.print(TextFormat.java:229)
at com.google.protobuf.TextFormat$Printer.access$2(TextFormat.java:226)
at com.google.protobuf.TextFormat.print(TextFormat.java:69)
at com.google.protobuf.TextFormat.printToString(TextFormat.java:116)
at com.google.protobuf.AbstractMessage.toString(AbstractMessage.java:87)
내가 모든 것을 완벽하게 작동 한 후 당황하지 않는 경우
. 그래서 Google 프로토콜 버퍼 관련 코드에 대해-keep
옵션을 특별히 구성해야합니까?
나는 생성 된 메시지 파일을 만들려고했지만 동일한 예외가 있습니다.
-keep public class org.mypackage.messages.* {
}
해결할 수 있었습니까? 그렇다면 귀하의 연구 결과를 공유 할 수 있습니까? 오랜 시간 같은 문제에 갇혀있다. – Atul