例如有如下的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 apipublic native int picc_open();public native int picc_remove(byte mode);
之前我老是失败,原来是类名的格式没注意,类名classPathName的格式是:包名/类名,先提供包的名字,然后提供包里面的类的名字。从上面的例子,你的包名是android.device.PiccReaderNative,那么前面就是android/device/PiccReaderNative,包里面有个类叫做PiccReaderNative,那么后面的类名就是PiccReaderNative,所以全部的类的路径名就是:android/device/PiccReaderNative/PiccReaderNative