android可执行文件怎么获取JNIEnv?

qq_18050259 2018-12-23 11:08:45
JNIEnv* dlsmgetenv(){
void*runtime = dlopen("/system/lib/libandroid_runtime.so", RTLD_NOW);
JNIEnv*(*getAndroidRuntimeEnv)();
getAndroidRuntimeEnv = (JNIEnv*(*)())dlsym(runtime, "_ZN7android14AndroidRuntime9getJNIEnvEv");
return getAndroidRuntimeEnv();
}
以上代码放在so库里调用可以正常获取JNIEnv,但是放在android可执行文件里面一调用就崩溃!
请问android可执行文件里到底怎样才能获取JNIenv变量?求解,已经忙活一周了还搞不定,谢谢
...全文
392 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
usecf 2018-12-26
  • 打赏
  • 举报
回复
你把ndk+androidstudio下载配置下 一般这种都是和jni相关 ,目前android studio支持开发ndk工程的
头上长西瓜 2018-12-25
  • 打赏
  • 举报
回复
引用 1 楼 GuoQun01 的回复:
崩溃的log有没有?

找不到Log
我猜应该要先拿到JavaVM对象然后再调用AttachCurrentThread函数才行,和多线程获取JNIEnv一个道理
现在的问题是JavaVM拿不到
NDK 不能直接使用android::AndroidRuntime::getJavaVM()方法,只能通过dlsym来调用,但是我搜遍了也没找到这个函数的符号,dlsym参数不知道该怎么写
小听风 2018-12-24
  • 打赏
  • 举报
回复
崩溃的log有没有?

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧