如何在Android中使用JNI获取设备ID?

我想通过JNI从c获取IMEI,我使用下面的代码,但遇到了无法获取cls的错误,它总是返回NULL 。我检查了env和context,它们都没事。为什么我不能得到Context类? 我从互联网上搜索,有人说我们应该使用java/lang/Object而不是使用android/context/Context ,我试过这个,它工作,cls不再是NULL,但是当我调用getSystemService时它引起了新的错误,也许是因为普通的java/lang/Object没有这个方法。有人可以帮帮我吗?3Q。

 char * get_dev_id(JNIEnv *env, jobject context) { jclass cls = (*env)->FindClass(env, "android/context/Context"); // ---------------- cls == NULL all the time jmethodID mid = (*env)->GetMethodID(env, cls, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;"); jfieldID fid = (*env)->GetStaticFieldID(env, cls, "TELEPHONY_SERVICE", "Ljava/lang/String;"); jstring str = (*env)->GetStaticObjectField(env, cls, fid); jobject telephony = (*env)->CallObjectMethod(env, context, mid, str); cls = (*env)->FindClass(env, "android/telephony/TelephonyManager"); mid =(*env)->GetMethodID(env, cls, "getDeviceId", "()Ljava/lang/String;"); str = (*env)->CallObjectMethod(env, telephony, mid); jsize len = (*env)->GetStringUTFLength(env, str); char* deviceId = calloc(len + 1, 1); (*env)->GetStringUTFRegion(env, str, 0, len, deviceId); (*env)->DeleteLocalRef(env, str); /* to get a string in deviceId */ return deviceId; }