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 源码结构
- ClientDemo.cpp: 客户端程序
- ServerDemo.cpp:服务端程序
- IMyService.h:自定义的MyService服务的头文件
- IMyService.cpp:自定义的MyService服务
- Android.mk:源码build文件
1.2 分层图
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端)
服务端运行结果:
客户端运行结果:
二、 Framework Binder
2.1 源码结构
Server端
- ServerDemo.java:可执行程序
- IMyService.java: 定义IMyService接口
- MyService.java:定义MyService
Client端
- ClientDemo.java:可执行程序
- IMyService.java: 与Server端完全一致
- MyServiceProxy.java:定义MyServiceProxy
2.2 分层图
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/目录下。
服务端&客户端运行结果:
三、 Apk Binder
3.1 源码结构
- ClientActivity.java 本地客户端
- RemoteService.java 远程服务端
- IRemoteService.aidl
- MyData.java 用于传递复杂的Parcelable数据
- MyData.aidl
3.2 分层图
3.3 运行
由/AppBinderDemo/路径下的代码生成的Apk,已经放到/Output/appBinderDemo/BinderDemo.apk。
将apk安装到手机,打开apk界面如下:
界面上有三个按钮,分别是功能分别是bindService(绑定Service), unbindService(解除绑定Service), killProcess(杀死Service进程)。
从左往右,依次点击界面,可得:
NOTE:
-
- 需要将NativeBinderDemo放到vendor下面,否则会报
If an interface must be manually written, add its name to the whitelist
- 需要将NativeBinderDemo放到vendor下面,否则会报
-
- 先运行service端再运行client端