Java应用程序调用系统中任意一个so文件的方法 大家看看是否可行?

__linux__ 2011-10-11 05:12:08
如果我想编写一个apk程序,而这个apk程序要调用系统中的非JNI的so文件的某些内容。目前,使用Java程序调用系统中非JNI的so文件中的内容,好像只有Java——>系统中的JNI so——>系统中的非JNI so文件,这一种方法吧?那么,apk程序就无法做到可以任意调用系统中的任何一个so文件。

也就是说,java程序要调用系统中的非JNI的so文件中的东西,必须要通过系统中的JNI so文件作为过渡。再换句话说,如果系统中的非JNI的so文件,如果没有某个带JNI的so文件作为桥梁,java程序就没有任何办法调用到它的内容。我的理解是否正确?

刚刚想到了一种新方法来绕过这个JNI的so,不知道是否可行。我不使用系统中自带的JNI so文件做桥梁,用别人的桥限制太多,太麻烦。我可以使用C++自己编一个JNI so文件,让这个so调用系统中的非JNI的so。然后把我自己编写的这个JNI so打包到我的apk中。相当于我自己搭了一座新桥,这样不就实现了apk程序直接调用系统中任意一个so文件的功能了吗?
...全文
1958 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lonuery 2013-12-30
  • 打赏
  • 举报
回复
这个是可行的,已经有人实现过了,通过自己写的.so文件,在java层通过JNI去调用就行了 http://bbs.csdn.net/topics/380226107?page=1#post-396461583
yuliu312832473 2013-03-13
  • 打赏
  • 举报
回复
明显不行嘛 要那样 你的java应用层就成了fromwork层了
__linux__ 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 peijiangping1989 的回复:]
期待楼主实验,可是理想和现实的差距你懂的。
[/Quote]
这样不可以吗?能否说一下原因?
小裴同学 2011-10-12
  • 打赏
  • 举报
回复
期待楼主实验,可是理想和现实的差距你懂的。
__linux__ 2011-10-12
  • 打赏
  • 举报
回复
可以在apk中自己用c语言编写几个so库,然后让这些so库在c语言层面直接调用系统so库(/system/lib下的so库),就可以了。最后只需要把这几个自己编写的so库打包进apk,就ok了。

这样,调用顺序相当于这样:java应用程序——>自己编写的JNI——>自己编写的so库——>系统so库,也就是说,apk应用程序可以绕过google提供的framework层,自然也不需要再进一步经过官方的JNI了,可以直接调用到system/lib下的系统so库,如下图所示:



这样,就绕开了google官方framework层对我们的限制,apk应用程序可以直接任意调用系统中C/C++层的任意so文件了。虽然没有试验过,但理论上应该是可以实现的吧。

80,471

社区成员

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

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