http://www.yurushao.net/?p=789

Android应用程序使用Localsocket与Linux层通信


此条目发表在
学习分类目录,贴了Android,Linux,localsocket标签。将固定链接加入收藏夹。localsocket,也叫做Unix Domain Socket,在前一篇文章中讲到过:Unix Domain Socket IPC

在Android API中,有几个类对localsocket进行了封装,不仅可以用来应用程序之间进行IPC通信,还可以跨应用程序层和Linux层运行的程序进行通信。

假设一种情境,你的应用程序需要访问一些本身没有权限访问的数据或者设备,通过Java调用现有的命令行命令无法满足需求。可以考虑的方法是:将功能代码使用C/C++实现,然后编译成二进制文件。应用程序使用Runtime.getRuntime().exec()执行命令行命令,su提权后运行二进制文件,然后使用localsocket与之通信——C/S模式。当然,前提是手机要有root权限。

在Unix Domain Socket IPC已经贴过Server端代码,移植到Android编译不会出现太大的问题。其实Android已经对Linux socket进行了封装,直接使用更加方便。


实例化一个LocalSocket对象之后,只需要简单的connect就行了。LocalSocket的connect函数接受一个LocalSocketAddress对象作为参数。

2. 命名空间

LocalSocketAddress构造函数的第一个参数String name,是Server创建的socket文件的路径。需要注意的是第二个参数Namespace,有以下三种取值:

ABSTRACT A socket in the Linux abstract namespace  FILESYSTEM A socket named with a normal filesystem path. RESERVED A socket in the Android reserved namespace in /dev/socket. 

具体选择哪一个(RESERVED貌似是系统用的,我们只需要在ABSTRACT和FILESYSTEM中选择一个),要看Server中实现方式,但是Client和Server一定要统一!!!之前写的Server例子直接就是在文件系统上创建的一个socket文件,所以选择FILESYSTEM。

ABSTRACT何时使用可以参考:Linux manual- unix, AF_UNIX, AF_LOCAL – Sockets for local interprocess communication大致上是Linux在内存中维护一个socket文件描述符集合,但是不会在文件系统中生成一个具体的socket文件。

3. Android中对Localsocket的封装

Android本身就大量使用到了Localsocket进行跨系统层次的通信,对Localsocket的一些常用操作进行了封装。具体细节和使用方法可以参考Android系统源码的以下文件( 代码源码文件根目录):
/system/core/include/cutils/sockets.h
/sysetm/core/libcutils/socket_local_server.c
/system/core/libcutils/socket_local_client.c

Unix Domain Socket IPC

更多相关文章

  1. Android(安卓)初识AppBarLayout 和 CoordinatorLayout
  2. Android-常用UI控件(Spinner/AutoCompleteTextView)
  3. 【MarsChen】D03_Say_Hello_to_Android
  4. Android+JNI调用–文件操作
  5. Android(安卓)视图绑定,找不到类 'ResultProfileBinding'
  6. Android(安卓)如何使一个service 开机启动
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. android 图片背景使用这种方式很爽
  2. Android(安卓)ViewPager 几种开发案例的
  3. Android : Menus Part 3: Alternative Me
  4. Android 自制一个工作日历 原代码
  5. Android = Java ?
  6. ch020 Android SQLite3(第一部分)
  7. Android(安卓)getDecorView用途——屏幕
  8. Android 屏幕适配工具类
  9. Android调用Restfull
  10. android中的dumpsys命令