在Android中,有几种方式可以和native层进行通讯,根据权限不同可以适当选择沟通的方式:
1.基于JNI在上层java代码中直接调用native code中的C API,这个所有第三方权限都可以,即所谓的NDK编程。
2.基于socket stream进行通讯,在native c层建立一个server task,通过socket连接与上层进行通信。-----需要系统权限
3.基于驱动模块进行通讯,即自定义一个驱动模块,将相关native code写成驱动模块,通过读写设备流进行通信。---需要系统权限
本文以Android源代码来说明第二种通讯方式,android source code中installer模块就是通过socket stream通讯的典型例子,通过分析这个例子可以了解如何设计socket通讯方式。
一、底层server侧native代码(socket通讯就是典型的c/s模型)
源代码文件路径:
android_4.1_src\frameworks\base\cmds\installd
1. installd.h
定义驻留程序server的socketname,在客户端需要通过这个socketname来与server建立连接。
#define SOCKET_PATH "installd"
2.installd.c
定义一个无穷循环,等待客户端的连接,与普通的socket编程并无多大区别:
int main(const int argc, const char *argv[]) {
char buf[BUFFER_MAX];
struct sock