问题:
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;