UNIX域套接字与Android 9.0

IPC进程间通信

在Android中用于进程间通信的方法有很多,比如 Binder、ContentProvider、Messenger、AIDL(基于Binder)、广播、socket等等。其实对于原理还是理解不够深入。哈哈,尴尬。

项目背景

在两个应用之间需要进行数据的传输,在这里以应用A、应用B来说明。
应用A调用so库,并在so库中与 应用B进行通信。
应用B在Java层进行数据处理。

解决思路

第一时间想到是通过UNIX域套接字的方式来进行。
虽然因特网域套接字可用于同一目的,但UNIX域套接字的效率更高。UNIX域套接字仅仅复制数据;它们并不执行协议处理,不需要添加或删除网络爆头,无需计算检验和,不要产生顺序号,无需发送确认报文。
应用A使用linux中的unix socket,应用B使用LocalServerSocket。

实验一 两个C 程序

为了验证可行性,我找了一台root过的手机(非Android 9.0),使用两个C可执行文件进行尝试,没问题。心想着这个问题应该很快能解决。

实验二 C程序与Android程序

刚开始进行这个实验的时候老是失败。查看网上资料大部分都是能够解决的,在stack overflow(https://stackoverflow.com/questions/7516018/android-localserversocket) 中,介绍Linux Abstract方式。虽然这个例子是在同一个应用中的,但对于我来说还是帮助很大的。
后面按照连接中使用的方法,成功了。下一步就是应用了。

应用

于是应用到应用A、B上,在Mate20上尝试。可万万没想到,使用Mate20做实验的时候,一直connect 失败。
看书、网上找资料,加班使劲折腾,搞了一天半愣是没有解决。尼玛,真个人都崩溃了。
后面手机被同事借走了,用自己的手机(Android8.0)调试应用A、应用B,发现居然可以工作。

天哪,Android 9.0对这方面做了什么限制么?有没有人能告诉我啊
天哪,Android 9.0对这方面做了什么限制么?有没有人能告诉我啊
天哪,Android 9.0对这方面做了什么限制么?有没有人能告诉我啊
天哪,Android 9.0对这方面做了什么限制么?有没有人能告诉我啊
天哪,Android 9.0对这方面做了什么限制么?有没有人能告诉我啊
天哪,Android 9.0对这方面做了什么限制么?有没有人能告诉我啊
天哪,Android 9.0对这方面做了什么限制么?有没有人能告诉我啊
天哪,Android 9.0对这方面做了什么限制么?有没有人能告诉我啊
天哪,Android 9.0对这方面做了什么限制么?有没有人能告诉我啊

无法自拔了

退而求其次,尝试localhost方式

无奈只得用因特网域套接字的方式。尝试成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值