gpt4 book ai didi

android - 从 Android 中的外部 native 可执行文件调用 java 代码

转载 作者:太空宇宙 更新时间:2023-11-03 11:17:35 24 4
gpt4 key购买 nike

这就是我想做的。我有一个由我的 Activity 生成的第三方 native 可执行文件。 Activity 和 native 可执行文件通过 TCP 进行通信。问题是 - 第三方应用程序正在使用 libusb 因此需要 root。所以我认为实际上可以编写一个包装器 libusb-java,它具有与原始 libusb 相同的接口(interface),但使用 Android USB Host API。因此,我可以将我正在运行的可执行文件与我的 libusb-java 链接起来,而不更改它,它会使用 Android USB Host API。问题是,如果我想编写 libusb-java,我需要能够从库内部访问 JVM(它将在第三方可执行文件启动时动态加载),但由于这不会在 Java 端链接,我无法访问它。有没有一种简单的方法可以从未链接到 Activity(可能是反射?)的 native 可执行文件中调用一些 Java 代码。有什么想法吗?

例如:如果我的 native 二进制文件调用 *libusb_open()*,它实际上会从 libusb-java 调用 *libusb_open()*,而后者又应该调用 openDevice() android.hardware.usb.UsbManager 而不是原来的直接原生实现。 (我过于简单化了,但这不是基本思想)

最佳答案

简单的回答:不,没有。您可以启动自己的 Dalvik VM 并可能调用它,但它在 Android 系统中不会作为 Activity 存在,因此很难使用许多平台服务。

您最好尝试重构 native 代码,使其作为由 DVM 加载的库以正常的 Android 方式作为 Activity 或服务托管进程运行。有时这几乎就像从静态 jni 子例程调用它的 main() 一样简单,但请注意进程级静态数据中潜在的不一致,因为 Android 经常会在旧进程中启动一个新实体。

或者您可以通过 TCP、[使用一些技巧]Binder 或其他一些 IPC 机制来代理您的模拟 API 调用。

关于android - 从 Android 中的外部 native 可执行文件调用 java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14128266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com