我需要在本机库中获取Android唯一的设备ID。据我所知,这可以使用Java API来完成,而我需要使用JNI。我读了this,有类似的问题,但是访问了不同的ID。但是此解决方案需要参考JNIEnv以获得Java对象/方法。当从Java调用JNI方法时,这不是问题,将从Java传递JNIEnv。但是我如何才能为“全部”本机代码获取JNIEnv?

最佳答案

您的本机活动的入口点将接受struct android_app*作为其参数。 android_app包含一个名为ANativeActivity*activity,而该JNIEnv*又包含一个名为envstate

为了能够从您的本机代码调用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/

10-12 01:34