1

我需要做的简要说明:我修改了 android 框架并创建了两个应用程序,它们都需要与在用户空间中运行的 C 语言程序进行通信。这个 C 程序基本上是我编写的一个存根,用于与驱动程序和一堆 API 接口。就复杂性而言,它实际上是空的,因为它仅用作隐藏机制的单个入口点,但它有几千行长。

我和我的实习导师对如何做这件事有不同的看法:

1/ 应用程序和修改后的框架(客户端)使用套接字与C程序通信,C程序变成一个守护进程(服务器)。该框架不使用任何 JNI - 而是 java 套接字 - 并且应用程序可能需要继续使用套接字的 JNI 实现(还没有为 .apk 尝试 java 套接字)。这已经过测试可以工作。

2/ 框架和应用程序都调用 C 程序,使用起来有点像库。这意味着 -IMO- 我们要么从 java 中“执行”(错误),要么在 JNI 中实现整个代码(目前为 2000 多行)。

我对此有偏见的看法:1 /

+ it's proven to work
+ there is a clear separation between low-level and high-level
+ there might be no JNI usage
+ because I use a C daemon, I can simulate the behaviour on x86 (using an environment provided by the manufacturer)
- architecture is somewhat complex
- depending on whether the .apk can use a java socket or not, the framework and the .apk won't use the exact same mechanisms to
interface with the daemon (java socket and JNI C socket)

2/

+ architecture would be simple (with the whole C in the JNI)
- maintaining is going to be a pain
- it's not simulable, development has to either be on target or on emulator
- the android FW has to use JNI (couldn't make this work so far because of a libc error)
- useless use of JNI (from what I understand, should be used for heavy calculations/low-level interfacing)

这样做的正确Android方式是什么?一种方法看起来比它的对应方法更优雅吗?

4

0 回答 0