Robin329 / AndroidBinderDemo

Android binder related test demo, easy to understand the binder mechanism in Android

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

BinderSample

Binder sample程序,分为app, framework, native三大类,每一类生成的可执行文件都位于/Output文件夹相应的子文件下。

  • OS: Darwin 192.168.0.100 21.1.0 Darwin Kernel Version 21.1.0: Wed Oct 13 17:33:01 PDT 2021; root:xnu-8019.41.5~1/RELEASE_ARM64_T6000 arm64
  • Android: Q
  • Device Info: Pixel 3XL
示例程序 说明
NativeBinderDemo 从Native角度编写的Binder Demo程序
FrameworkBinderDemo 从framework角度编写的Binder Demo程序
AppBinderDemo 从Apk角度编写的Binder Demo程序

一、 Native Binder

1.1 源码结构

  1. ClientDemo.cpp: 客户端程序
  2. ServerDemo.cpp:服务端程序
  3. IMyService.h:自定义的MyService服务的头文件
  4. IMyService.cpp:自定义的MyService服务
  5. Android.mk:源码build文件

1.2 分层图

native_binder_demo

1.3 编译 && 运行

编译

source build/envsetup.sh
lunch 20
make NativeServerDemo -j32
make NativeClientDemo -j32

首先将这两个生成在out目录下的NativeServerDemo,NativeClientDemo可执行文件push到手机

adb push NativeServerDemo /system/bin
adb push NativeClientDemo /system/bin

上面的2个文件,是由/nativeBinderDemo/路径下的代码生成的,生成的文件已经放到/Output/nativeBinderDemo/目录下。如果push不成功,那么先执行adb roo;adb remount,再执行上面的指令;如果还不成功,可能就是权限不够。如果上述开启成功,通过开启两个窗口运行(一个运行client端,另一个运行server端)

服务端运行结果:

native_server

客户端运行结果:

native_client

二、 Framework Binder

2.1 源码结构

Server端

  1. ServerDemo.java:可执行程序
  2. IMyService.java: 定义IMyService接口
  3. MyService.java:定义MyService

Client端

  1. ClientDemo.java:可执行程序
  2. IMyService.java: 与Server端完全一致
  3. MyServiceProxy.java:定义MyServiceProxy

2.2 分层图

framework_binder_demo

2.3 运行

首先将ServerDemo,ClientDemo可执行文件,以及ServerDemo.jar,ClientDemo.jar都push到手机。

adb push ServerDemo /system/bin
adb push ClientDemo /system/bin
adb push ServerDemo.jar /system/framework
adb push ClientDemo.jar /system/framework

上面的4个文件,是由/FrameworkBinderDemo/路径下的代码生成的,生成的文件已经放到/Output/frameworkBinderDemo/目录下。

服务端&客户端运行结果:

framework_client

三、 Apk Binder

3.1 源码结构

  1. ClientActivity.java 本地客户端
  2. RemoteService.java 远程服务端
  3. IRemoteService.aidl
  4. MyData.java 用于传递复杂的Parcelable数据
  5. MyData.aidl

3.2 分层图

app_binder_demo

3.3 运行

由/AppBinderDemo/路径下的代码生成的Apk,已经放到/Output/appBinderDemo/BinderDemo.apk。

将apk安装到手机,打开apk界面如下:

apk

界面上有三个按钮,分别是功能分别是bindService(绑定Service), unbindService(解除绑定Service), killProcess(杀死Service进程)。

从左往右,依次点击界面,可得:

apk


NOTE:

    1. 需要将NativeBinderDemo放到vendor下面,否则会报If an interface must be manually written, add its name to the whitelist
    1. 先运行service端再运行client端

About

Android binder related test demo, easy to understand the binder mechanism in Android

License:Apache License 2.0


Languages

Language:Java 49.7%Language:C++ 41.1%Language:Makefile 8.4%Language:AIDL 0.8%