首页
社区
课程
招聘
[求助]android中C程序如何调用JAVA方法
发表于: 2014-3-20 10:26 7940

[求助]android中C程序如何调用JAVA方法

2014-3-20 10:26
7940
在用NDK中,可以使用 JNIEnv *env 来获取一些java使用的方法,比如:

jclass cls_context = (*env)->FindClass(env, "android/content/Context");


但是直接写的android linux C 程序 没有传入的JNIEnv *env,这样情况下怎么调用java里面的类或者方法。

求教

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
原生程序是没有加载dalvik虚拟机的。 所以需要自己手动加载~ 。 也就是类似于app_process做的事情。  

相关代码可以参考android源代码。   我也木有干过
2014-3-20 11:14
0
雪    币: 19
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
谢谢, 要是需要把android源码相关的模块自己复制出来单独编译的话就太复杂
2014-3-20 11:27
0
雪    币: 2325
活跃值: (1058)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
dlsym libdvm.so JNI_CreateJavaVM &call 试试…
2014-3-20 11:39
0
雪    币: 19
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
谢谢,试试了
2014-3-21 18:55
0
雪    币: 19
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
你好

        handle = dlopen("/system/lib/libdvm.so", RTLD_LAZY);

返回的是空指针。。。。 应该怎么加载才行
2014-3-21 20:06
0
雪    币: 30
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
可以参考92cK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3L8s2g2G2M7$3S2W2L8X3N6&6j5h3&6Y4i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5c8X3c8W2N6r3q4A6L8s2y4Q4x3V1j5I4z5o6l9H3y4U0j5@1y4b7`.`.
具体的,AndroidRuntime中创建JniInvocation,来初始化jni环境。这个过程中加载libdvm.so。

与lz的对比了下,貌似人家用的是RTLD_NOW。

建议楼主可以看下源码。ps:上面链接中代码分析针对早期版本,后面新版代码略有变化。
2014-6-14 10:34
0
雪    币: 56
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
JNI+NDK生成(armeabi.so)在Eclipse调用
2014-6-27 11:06
0
游客
登录 | 注册 方可回帖
返回