如何在JNI_ONLOAD中获取上下文
我必须在 jni_onload
中获取上下文。由于某些原因,我必须在 system.loadlibrary()
中调用 toctectbasecontext()
,但不是 increate()
。
我在 increate()中调用 system.loadlibrary()
,则该代码效果很好。
// CustomApplication.java
public class CustomApplication extends Application {
@Override
protected void attachBaseContext(Context context) {
super.attachBaseContext(context);
System.loadLibrary("hook_main");
}
// @Override
// public void onCreate() {
// super.onCreate();
// System.loadLibrary("hook_main");
// }
}
// hook_main.c
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
// ...
jclass activityThread = (*env)->FindClass(env, "android/app/ActivityThread");
jmethodID currentActivityThread = (*env)->GetStaticMethodID(env, activityThread, "currentActivityThread", "()Landroid/app/ActivityThread;");
jobject at = (*env)->CallStaticObjectMethod(env, activityThread, currentActivityThread);
jmethodID getApplication = (*env)->GetMethodID(env, activityThread, "getApplication", "()Landroid/app/Application;");
// at and getApplication are not NULL
jobject context = (*env)->CallObjectMethod(env, at, getApplication);
// the context is NULL
return JNI_VERSION;
}
有解决方案吗?谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论