Binder底层是基于C实现的,因此可以作为Native进程与App层交互数据的渠道。其应用场景为:Native Service、Hal驱动设置、应用层JNI服务等。

Android 4.4引入SEAndroid/SELinux 安全机制,至Android 5.0以后,Android完全采用此安全机制,对应用访问和操作文件权限进行限制,采用管道、共享内存、LocalSocket等方式进行跨进程交互面临着文件访问权限问题,若非修改固件源码的sepolicy文件(AOSP给定路径为/device/manufacturer/device-name/sepolicy)赋予进程文件访问权限,则可能会发生通讯失败。

采用Binder进行进程间通讯,是相对标准、优雅、高效的方式。

C端:

在Android8.0以下,需继承IInterface.h(路径在/frameworks/native/include/binder/IInterface.h),通过Parcel类(/frameworks/native/include/binder/IParcel.h)完成交互数据传递。Android 8.0以上,可采用HIDL语言定义接口,编译SO库时系统解析生成C代码。

Android端:

   可通过AIDL语言定义交互接口,引用Framework.jar(

compileOnly files('libs/framework.jar')

),使用

ServiceManager.getService(String SERVICE_DESCRIPTOR)方法获取C层Binder服务。

两端需约定使用相同的服务描述符。

另外,Android  9.0以上加强了对Hal 层 Service的Selinux限制,如果要测试binder,在已root的设备上,可使用

setenforce 0

命令,暂时关闭Selinux,进行测试。如果有系统源码,需设置\system\sepolicy\prebuilts\api\28.0\public 文件夹下的例外规则,重新编译系统,使得binder通信不被Selinux限制。

Demo代码:https://github.com/AceSui/NativeJavaBinder

Android Native Binder,在Native层与App交互数据的更多相关文章

  1. 【android官方文档】与其他App交互

    发送用户到另外一个App YOU SHOULD ALSO READ 内容分享 One of Android's most important features is an app's ability ...

  2. android媒体--图库与API层MediaPlayer的交互

    众所周知一个媒体播放器新建的几个步骤: Mediaplayer mp = new MediaPlayer(0 mp.setDatasource(xxx); mp.setDispalyer(xxx); ...

  3. Binder的Native实现libbinder

    libbinder – Binder的Native实现 出于性能和代码统一性的角度考虑,Binder IPC并不Java和Native环境里各实现一次,而只是分别在不同的执行环境里提供使用的接口.使用 ...

  4. Facebook新框架React Native,一套搞定App开发[转]

    Facebook新框架React Native,一套搞定App开发 本文来自微信公众号“给产品经理讲技术”(pm_teacher),欢迎关注. 做为一名产品经理,你是否遇到过这样的窘境,“帮我把字体调 ...

  5. Error处理: android.media.MediaRecorder.start(Native Method) 报错:start failed: -19【转】

    本文转载自:http://blog.csdn.net/netwalk/article/details/17686993 Error处理: android.media.MediaRecorder.sta ...

  6. 错误:Camera录制视频(6.0错误),5.1正常,7.1正常 (java.lang.RuntimeException: start failed.at android.media.MediaRecorder.native_start(Native Method))

    Process: com.example.mycamera2, PID: 24086 java.lang.RuntimeException: start failed. at android.medi ...

  7. [工作积累] Android system dialog with native callback

    JNI: invoke java dialog with native callback: store native function address in java, and invoke nati ...

  8. 从驱动层分析android的Binder机制-android学习之旅(83)

    前言及知识准备 Binder驱动程序 Service组件的注册和启动 Clinet应用获取服务 本次主要介绍Android平台下Binder进程间机制.从机制的组成出发,将按照Binder驱动程序.B ...

  9. at android.view.Surface.unlockCanvasAndPost(Native Method)

    at android.view.Surface.unlockCanvasAndPost(Native Method) 在绘制动画特效的时候点击back键会报以上异常. 主要原因:当点击back按钮时A ...

随机推荐

  1. [Java]Java类和对象内存分配详解

    描述 代码说明: 一.当Person p1 = new Person();第一次被调用时需要做两件事: 1.先判断类加载器是否加载过Person类,如果没有则加载到Person类型到方法区 2.在堆中 ...

  2. Function:凸包,单调栈,题意转化,单峰函数三分,离线处理

    很难啊啊啊!!! bzoj5380原题,应该可以粘题面. 问题转换: 有一个n列1e9行的矩阵,每一列上都写着相同的数字Ai. 你从位置(x,y)出发每一步可以向左上方或左方走一步,最后走到第一行. ...

  3. 八、springboot 简单优雅的通过docker-compose 构建

    前言 这个项目有一段时间没有更新了,不过我可没有偷懒哟,是偷偷准备了一个大招,现在是时候展示啦哈哈. 我们今天要做的,就是将我们的项目通过docker-compose 构建成镜像运行.为什么要这样做呢 ...

  4. VNC的安装以及使用

    VNC (Virtual Network Console)是虚拟网络控制台的缩写.它 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的.VNC 是在基于 UNIX 和  ...

  5. MySQL初始化root密码以及root密码忘记解决方法

    一.MySQL初始化root密码 mysql默认root用户没有密码,输入mysql –u root 进入mysql 1.进入mysql数据库 use mysql; 2.初始化root密码 mysql ...

  6. 使用Rider中搭建specflow+xunit+selenium对web页面进行自动化功能测试环境

    运行rider,创建测试解决方案,选择xunit,点击create创建 ​   导入包,由于本人使用chrome浏览器(需先下载好对应的浏览器驱动),所以导入了selenium.webdriver.c ...

  7. hdu 1385 Minimum Transport Cost (Floyd)

    Minimum Transport CostTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  8. nyoj 74-小学生算术(进位问题)

    74-小学生算术 内存限制:64MB 时间限制:3000ms 特判: No 通过数:23 提交数:53 难度:1 题目描述: 很多小学生在学习加法时,发现“进位”特别容易出错.你的任务是计算两个三位数 ...

  9. 【前端知识体系-CSS相关】CSS工程化方案

    1.如何解决CSS的模块化问题? 使用Less,Sass等CSS预处理器 使用PostCSS插件(postcss-import/precss) 使用webpack处理CSS(css-loader + ...

  10. ENS中文文档系列之一 [ ENS介绍 ]

    前言 ENS中文文档是由我照ENS英文官方文档翻译而来,其中的一些内容和细节得到了ENS官方团队的指导.文档中包含 “LBB译注” 的地方是译者为了便于读者理解而进行的注释. 未来一段时间,我会在该博 ...