例如有如下的native代码用来寻找类,然后注册接口函数:
static const char *classPathName = "android/device/PiccReaderNative/PiccReaderNative";
static int registerNatives(JNIEnv* env)
{
jclass clazz;
clazz = env->FindClass(classPathName);
if (clazz == NULL) {
ALOGE("Native registration unable to find class '%s'", classPathName);
return JNI_FALSE;
}else{
ALOGI("find class sucess");
}
if (env->RegisterNatives(clazz, gMethods, sizeof(gMethods)/sizeof(gMethods[0])) < 0) {
ALOGE("RegisterNatives failed for '%s'", classPathName);
return JNI_FALSE;
}
有java代码如:
文件名为:android/device/PiccReaderNative/PiccReaderNative.java
package android.device.PiccReaderNative;
public class PiccReaderNative {
//picc jni api
public native int picc_open();
public native int picc_remove(byte mode);
之前我老是失败,原来是类名的格式没注意,类名classPathName的格式是:包名/类名,先提供包的名字,然后提供包里面的类的名字。从上面的例子,你的包名是android.device.PiccReaderNative,那么前面就是android/device/PiccReaderNative,包里面有个类叫做PiccReaderNative,那么后面的类名就是PiccReaderNative,所以全部的类的路径名就是:android/device/PiccReaderNative/PiccReaderNative