zoukankan      html  css  js  c++  java
  • Android Native Binder,在Native层与App交互数据

        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,进行测试。如果有系统源码,需设置systemsepolicyprebuiltsapi28.0public 文件夹下的例外规则,重新编译系统,使得binder通信不被Selinux限制。

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

  • 相关阅读:
    Spring中内置的一些工具类
    那些年遇到过的面试题
    ThreadPoolExecutor策略配置以及应用场景
    程序员如何谈加薪?
    日常工作中该注意哪些点?
    aarch64的系统上执行armhf程序
    挂载镜像
    pycharm折叠代码
    暴力破解分类
    weblogic常见漏洞
  • 原文地址:https://www.cnblogs.com/acesui/p/12002758.html
Copyright © 2011-2022 走看看