美文网首页
JNI编程报错java.lang.NoSuchMethodErr

JNI编程报错java.lang.NoSuchMethodErr

作者: 被违规后的昵称 | 来源:发表于2021-08-15 22:01 被阅读0次
08-16 20:55:41.769 E/AndroidRuntime(23151): java.lang.NoSuchMethodError: no non-static method "Lcom/example/jniffmpegstaticplay/JNIffPlay
er;.onPrepareFromJNI()"
08-16 20:55:41.769 E/AndroidRuntime(23151):     at com.example.jniffmpegstaticplay.JNIffPlayer.native_prepare(Native Method)
08-16 20:55:41.769 E/AndroidRuntime(23151):     at com.example.jniffmpegstaticplay.JNIffPlayer.prepare(JNIffPlayer.java:46)
08-16 20:55:41.769 E/AndroidRuntime(23151):     at com.example.jniffmpegstaticplay.MainActivity$1.onClick(MainActivity.java:54)
08-16 20:55:41.769 E/AndroidRuntime(23151):     at android.view.View.performClick(View.java:7192)
08-16 20:55:41.769 E/AndroidRuntime(23151):     at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:111

现象:直接闪退,日志不多
用adb命令adb shell logcat -v time > D:\logcat.txt抓取到上面日志

原因onPrepareFromJNI方法找不到,检查路径发现没问题,怀疑是JNI反射调用Java方法签名有问题。

  1. 找到出问题的class文件


    2021-08-16_214938.png
  2. cmd窗口查看类的方法签名:
$ cd 文件路径
$ javap -s -p JNIffPlayer  

得到结果:

 public void prepare();
    descriptor: ()V

  public void setDataSource(java.lang.String);
    descriptor: (Ljava/lang/String;)V

  public void onPrepareFromJNI();
    descriptor: ()V  
    # 方法签名是:()V 

  public void onProgressFromJNI(int);
    descriptor: (I)V

  public void onErrorFromJNI(int);
    descriptor: (I)V

  public void start();
    descriptor: ()V

  public void setOnPrepareListener(com.example.jniffmpegstaticplay.JNIffPlayer$OnPrepareListener);
    descriptor: (Lcom/example/jniffmpegstaticplay/JNIffPlayer$OnPrepareListener;)V

解决
修改反射方法的签名:

2021-08-16_215823.png

相关文章

  • JNI

    Android JNI编程—JNI基础 一天掌握Android JNI本地编程 快速入门 Android深入理解J...

  • 音视频从基础学起——JNI编程

    音视频开发的运用,是要学习JNI编程的。怎么样去学JNI?本篇我们就来学习JNI编程这门技术。 对于Java来说,...

  • JNI 入门

    基础知识 1 什么是JNI?JNI全称为:Java Native Interface。JNI 是本地编程接口,它使...

  • Java与CC++交互JNI编程

    JNI编程 [TOC] JNI是一种本地编程接口。它允许运行在JAVA虚拟机中的JAVA代码和用其他编程语言,诸如...

  • JNI 报错

    Andoird JNI一直调用报错,后来调查发现,方法必须先这样声明。

  • JNI编程

    JNI编程[TOC] JNI是一种本地编程接口。它允许运行在JAVA虚拟机中的JAVA代码和用其他编程语言,诸如C...

  • JNI 编程

    JNI编程 JNI是一种本地编程接口。它允许运行在JAVA虚拟机中的JAVA代码和用其他编程语言,诸如C语言、C+...

  • JNI

    JNI编程 JNI是一种本地编程接口。它允许运行在JAVA虚拟机中的JAVA代码和用其他编程语言,诸如C语言、C+...

  • MAC安装rJava混乱问题

    报错如下: configure: error: Cannot compile a simple JNI progr...

  • Android安全---AndroidStudio3.0JNI编

    JNI介绍 官方介绍: 在编程领域,JNI (Java Native Interface,Java本地接口)是一种...

网友评论

      本文标题:JNI编程报错java.lang.NoSuchMethodErr

      本文链接:https://www.haomeiwen.com/subject/bsmvbltx.html