当前位置: 首页 > 知识库问答 >
问题:

JAVAlang.CompatibleClassChangeError:com的结构更改。谷歌。protobuf。抽象语法是危险的

陆展
2023-03-14
 (declaration of 'com.google.protobuf.UnknownFieldSet$Parser' appears in /data/data/probuff.cmcm.com.protobuftest/files/instant-run/dex/slice-protobuf-java-3.3.0_337abc31829bde926038696b7f238f11a5b7c8a2-classes.dex)
                                                                                   at dalvik.system.DexFile.defineClassNative(Native Method)
                                                                                   at dalvik.system.DexFile.defineClass(DexFile.java:296)
                                                                                   at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:289)
                                                                                   at dalvik.system.DexPathList.findClass(DexPathList.java:418)
                                                                                   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
                                                                                   at com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader.findClass(IncrementalClassLoader.java:90)
                                                                                   at com.android.tools.fd.runtime.IncrementalClassLoader.findClass(IncrementalClassLoader.java:62)
                                                                                   at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
                                                                                   at java.lang.ClassLoader.loadClass(ClassLoader.java:367)
                                                                                   at java.lang.ClassLoader.loadClass(ClassLoader.java:367)
                                                                                   at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                                                                                   at com.google.protobuf.UnknownFieldSet.<clinit>(UnknownFieldSet.java:1037)
                                                                                   at com.google.protobuf.GeneratedMessageV3.<init>(GeneratedMessageV3.java:88)
                                                                                   at mayday.Service$Location.<init>(Service.java:0)
                                                                                   at mayday.Service$Location.<clinit>(Service.java:7970)
                                                                                   at probuff.cmcm.com.protobuftest.MainActivity.testProbuf(MainActivity.java:21)
                                                                                   at probuff.cmcm.com.protobuftest.MainActivity.onCreate(MainActivity.java:16)
                                                                                   at android.app.Activity.performCreate(Activity.java:6679)
                                                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                                                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                                                                                   at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                   at android.os.Looper.loop(Looper.java:154)
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Android代码:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
            testProbuf();


}
private void testProbuf(){
    Service.Location.Builder builder = Service.Location.newBuilder();
    builder.setAccuracy(1);
    builder.setProvider("apple");
    byte[] bytes= builder.build().toByteArray();
    try {
        Service.Location location=  Service.Location.parseFrom(bytes);
        System.out.println("test  accuracy="+location.getAccuracy()+" provider="+location.getProvider());
    } catch (InvalidProtocolBufferException e) {
        e.printStackTrace();
    }


}

}

应用程序构建:

依赖项{编译文件树(dir:'libs',包括:['*. jar'])testCompile'jUnit: jUnit: 4.12'compile'com.android.support: appcompat-v7:25.3.1'compile'com.google.protobuf:原型-java: 3.3.0'compile'io.grpc: grpc-okhttp: 1.4.0'compile'<##########################################################################################################################################################################

共有1个答案

江建明
2023-03-14

正如我在评论中所写,我知道grpc已经包含了一个更新版本的protobuf(3.3.1)。因此,您应该尝试在gradle文件中使用exclude(module:'com.google.protobuf')排除grpc中包含的protobuf版本,或者您可以将版本增加到3.3。1英寸:

compile 'com.google.protobuf:protobuf-java:3.3.1' 
 类似资料:
  • 我已经将一些文件从S3转移到GCS,但是这些对象现在归传输服务所有,当我试图使用GSUTIL更新ACL时,它会说我不是所有者。这似乎是因为传输服务创建了它拥有的对象。是否有一种方法来模仿转移服务(或通过它的服务帐户登录),以便将所有权改变给我自己。 这样做时,我会得到以下错误: 请确保您拥有对此资源的所有者角色访问权限

  • 问题内容: 此问题与偶尔获取SqlException:超时expired有关。实际上,我在我的应用程序中使用率很高。但是用户Remus Rusanu说您不应该使用此功能。为什么我不应该使用它以及它包括什么危险。所以,如果我有 如何重写此语句以使其起作用? 问题答案: 使用合并 您的SQL失败,因为2个并发的重叠调用和非常接近的调用都将在INSERT发生之前从EXISTS中获得“ false”。因此

  • 本文向大家介绍redis禁止几个危险命令的方法,包括了redis禁止几个危险命令的方法的使用技巧和注意事项,需要的朋友参考一下 这几天客户一直给我反映一个问题,那就是他的缓存服务器redis每天会清理库,很纳闷,我配置的redis一般保持的默认,不应该会每天去清理库的,感觉应该还是他的程序上有点问题吧。 不过,不管程序问题还是配置问题,我想到就是可以吧清库的命令禁掉,这样即使他程序要去清理也是没办

  • 我使用Workbox预缓存渲染应用程序外壳所需的资产,包括基本版本的索引。html。Workbox假定索引。html在缓存中可用,否则,页面导航将失败,因为我已在我的Service Worker中注册了此项: 我也有自己。安装侦听器中的skipWaiting()指令: 据我所知,现在有2个侦听器: 由Workbox注册用于预缓存资产(包括index.html)的工具 我在Service Worke

  • 为什么我从下面的代码中得到这个编译错误消息? (程序根据键盘上按下的箭头键,在4个方向上移动箭头:d) Direction.java:41:错误:DirectionBoard。DirectionListener不是抽象的,并且不会覆盖KeyListener中的抽象方法keyReleated(KeyEvent)

  • 23.2. Spring邮件抽象结构 Spring邮件抽象层的主要包为org.springframework.mail。它包括了发送电子邮件的主要接口MailSender,和值对象SimpleMailMessage,它封装了简单邮件的属性如from, to,cc, subject,text。 包里还包含一棵以MailException为根的checked Exception继承树,它们提供了对底层