我需要在本机库中获取Android唯一的设备ID。据我所知,这可以使用Java API来完成,而我需要使用JNI。我读了this,有类似的问题,但是访问了不同的ID。但是此解决方案需要参考JNIEnv以获得Java对象/方法。当从Java调用JNI方法时,这不是问题,将从Java传递JNIEnv。但是我如何才能为“全部”本机代码获取JNIEnv?
最佳答案
您的本机活动的入口点将接受struct android_app*
作为其参数。 android_app
包含一个名为ANativeActivity*
的activity
,而该JNIEnv*
又包含一个名为env
的state
。
为了能够从您的本机代码调用Android Java API方法,您必须先将当前线程附加到VM,即:
JNIEnv *env = state->activity->env;
JavaVM *vm = state->activity->vm;
(*vm)->AttachCurrentThread(vm, &env, NULL);
(其中
struct android_app*
是)关于android - JNIEnv用于从 native 代码获取ANDROID_ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25010582/