Skip to content

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

License

Notifications You must be signed in to change notification settings

Robin329/AndroidBinderDemo

Repository files navigation

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

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published