Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.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
java.lang.VerifyError:验证程序拒绝类-验证失败_Java_Android_Protocol Buffers_Grpc_Grpc Java - Fatal编程技术网

java.lang.VerifyError:验证程序拒绝类-验证失败

java.lang.VerifyError:验证程序拒绝类-验证失败,java,android,protocol-buffers,grpc,grpc-java,Java,Android,Protocol Buffers,Grpc,Grpc Java,我正在使用protobuf在技术上在我的android客户端自动生成API服务。我已经好几个月没出问题了。现在,AndroidRuntime验证器突然拒绝了我API中自动生成的方法之一 这是stacktrace: com.company.companyplayer E/AndroidRuntime: FATAL EXCEPTION: main Process: com.company.companyplayer,

我正在使用
protobuf
在技术上在我的android客户端自动生成API服务。我已经好几个月没出问题了。现在,AndroidRuntime验证器突然拒绝了我API中自动生成的方法之一


这是stacktrace:

com.company.companyplayer E/AndroidRuntime: FATAL EXCEPTION: main
                                        Process: com.company.companyplayer, PID: 18181
                                        java.lang.VerifyError: Verifier rejected class company.v1.PlayerEarningsPageDataResponse: void company.v1.PlayerEarningsPageDataResponse.mergeNextDepositDate(com.google.protobuf.Timestamp) failed to verify: void company.v1.PlayerEarningsPageDataResponse.mergeNextDepositDate(com.google.protobuf.Timestamp): [0x26] register v5 has type Precise Reference: com.google.protobuf.Timestamp but expected Reference: com.google.protobuf.GeneratedMessageLiteVerifier rejected class company.v1.PlayerEarningsPageDataResponse: java.lang.Object company.v1.PlayerEarningsPageDataResponse.dynamicMethod(com.google.protobuf.GeneratedMessageLite$MethodToInvoke, java.lang.Object, java.lang.Object) failed to verify: java.lang.Object company.v1.PlayerEarningsPageDataResponse.dynamicMethod(com.google.protobuf.GeneratedMessageLite$MethodToInvoke, java.lang.Object, java.lang.Object): [0x16E] register v8 has type Precise Reference: com.google.protobuf.Timestamp but expected Reference: com.google.protobuf.GeneratedMessageLite (declaration of 'company.v1.PlayerEarningsPageDataResponse' appears in /data/app/com.company.companyplayer-1/split_lib_slice_4_apk.apk)
                                            at company.v1.PlayerEarningsPageDataResponse.getDefaultInstance(PlayerEarningsPageDataResponse.java:0)
                                            at company.v1.APIGrpc.<clinit>(APIGrpc.java:47)
                                            at company.v1.APIGrpc.newStub(APIGrpc.java:0)
                                            at com.company.companyplayer.backend.Client.getAuthAsyncStub(Client.java:103)
                                            at com.company.companyplayer.backend.Client.playerLogin(Client.java:119)
                                            at com.company.companyplayer.ui.activity.LoginActivity.loginAndGoToMainActivity(LoginActivity.java:202)
                                            at com.company.companyplayer.ui.activity.LoginActivity.onActivityResult(LoginActivity.java:127)
                                            at android.app.Activity.dispatchActivityResult(Activity.java:6935)
                                            at android.app.ActivityThread.deliverResults(ActivityThread.java:4086)
                                            at android.app.ActivityThread.handleSendResult(ActivityThread.java:4133)
                                            at android.app.ActivityThread.-wrap20(ActivityThread.java)
                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1534)
                                            at android.os.Handler.dispatchMessage(Handler.java:102)
                                            at android.os.Looper.loop(Looper.java:154)
                                            at android.app.ActivityThread.main(ActivityThread.java:6121)
                                            at java.lang.reflect.Method.invoke(Native Method)
                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
  private void mergeNextDepositDate(com.google.protobuf.Timestamp value) {
    if (nextDepositDate_ != null && nextDepositDate_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
      nextDepositDate_ = com.google.protobuf.Timestamp.newBuilder(nextDepositDate_).mergeFrom(value).buildPartial();
    } else {
      nextDepositDate_ = value;
    } 
  }
可以看出,该方法既不冗长,也不需要太多的参数;有些已经说过的事情可能是导致这一错误的常见原因


以下是我的应用程序的build.gradle:(自上次所有这些都正常运行以来,gradle中没有任何更改)



更新:该错误肯定与
google.protobuf.Timestamp
有关。下面是重现此问题的示例。

您正在混合lite和full protobuf

您不能对
googleapis common protos
具有编译或运行时依赖关系,因为它是为完整protobuf生成的代码,而完整protobuf不适用于lite protobuf。它还带来了对
protobufjava
的依赖,当与
protobuflite
混合时,将导致重复的类。不要编译依赖项,而是使用protobuf依赖项让protobuf gradle插件从JAR中包含的
.proto
s生成代码

您目前也不依赖于
protobuf-lite
,因此如果没有公共protos依赖项,您将获得编译失败。通用protos还引入了所需的
grpc protobuf lite
依赖项。我建议在
io.grpc:grpc-protobuf-lite:1.3.0
上添加编译时依赖项,这也将引入
protobuf-lite

因此,简而言之,对项目进行这些更改,它将编译:

diff --git a/app/build.gradle b/app/build.gradle
index 8f606bb..2fb997b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -62,7 +62,8 @@ dependencies {
     compile 'javax.annotation:javax.annotation-api:1.2'
     compile 'io.grpc:grpc-stub:1.3.0'
     compile 'io.grpc:grpc-okhttp:1.3.0'
+    compile 'io.grpc:grpc-protobuf-lite:1.3.0'

-    compile 'com.google.api.grpc:googleapis-common-protos:0.0.3'
+    protobuf 'com.google.api.grpc:googleapis-common-protos:0.0.3'
     protobuf 'com.google.protobuf:protobuf-java:3.1.0'
 }

您是否可能意外地将完整protobuf作为依赖项?我想你应该使用protobuf lite。运行
/gradlew dependencies
,确保您只有com.google.protobuf:protobuf lite依赖项,而不是com.google.protobuf:protobuf-java@EricAnderson在我的gradle中有许多与protobuf相关的条目,其中大多数是“lite”。因为我不确定你说的是哪一个,所以我将我的build.gradle添加到上面的问题中。
diff --git a/app/build.gradle b/app/build.gradle
index 8f606bb..2fb997b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -62,7 +62,8 @@ dependencies {
     compile 'javax.annotation:javax.annotation-api:1.2'
     compile 'io.grpc:grpc-stub:1.3.0'
     compile 'io.grpc:grpc-okhttp:1.3.0'
+    compile 'io.grpc:grpc-protobuf-lite:1.3.0'

-    compile 'com.google.api.grpc:googleapis-common-protos:0.0.3'
+    protobuf 'com.google.api.grpc:googleapis-common-protos:0.0.3'
     protobuf 'com.google.protobuf:protobuf-java:3.1.0'
 }