Android JNI开发,C调用Java方法遇到的问题

问题:

 Android Studio 3.0.1中java.lang.NoSuchMethodError: no method with name='XXXXXX' signature='(Ljava/lang/byte[];I)V' in class

原因:.C中调用Java中的方法,参数的类型没有写正确,即Java方法映射到C中的签名错误:

byte是基本数据类型,对应C中的B,C中数组的写法为”[“+”基本数据类型“,如java中的byte[] 写法应为[B,所以才会导致上述错误。

问题延伸:Java方法映射到C中的签名有两部分组成的,“()”括号里面代表的是方法的参数类型, 括号后面代表方法的返回值。

这两部分参数的数据类型分为基本数据类型和引用数据类型,基本数据类型的对应关系如下:

在Java中:boolean     C中:Z

                 byte                    B

                 char                     C

                  short                   S

                   int                       I

                   long                    J

                   float                    F

                   double                D

引用数据类型:已“L”开头, 以“;”结束,中间对应的是该类型的路径

如:String: Lava/lang/String;

       Object:  Ljava/lang/Object;

自定义的类:XXX 在包com.mm 中

        XXX:Lcom/mm/XXX

数组表示:数组表示的时候以“[”为标志,一个“[”表示一维数组,同理“[[”表示二维数组

以此类推

如:byte[]:[B

       int[][]:[[I

       Object[][][]:[[[Object;

猜你喜欢

转载自blog.csdn.net/m782008517/article/details/79067508