Binder service入门—框架层、应用层调用native binder service
1.前言
Binder service入门系列:
- Binder service入门–创建native binder service:
http://www.cloudchou.com/android/post-332.html - Binder service入门—Framework binder service:
http://www.cloudchou.com/android/post-447.html - Binder service入门—应用层binder service:
http://www.cloudchou.com/android/post-458.html
上一篇介绍了如何创建应用层binder service,本篇将综合先前介绍的native binder service,framework binder service,应用层binder service等知识,讲述如何使用native 的client,framework层的client,应用层的client测试native binder service。
2.程序构成
因为编译native的binder service,framework层的client都需要在源码环境下编译,故此本篇讲述的工程需要在源码环境下编译。
整个工程可以在github上下载:
https://github.com/cloudchou/NativeBinderJavaClientDemo
程序由4个部分组成:
- 1) native_bserver 创建并注册native binder service的本地服务端
- 2) native_bclient 测试native binder service的本地客户端
- 3) fclient和fclient.jar测试native binder service的框架层客户端
- 4) NativeBinderServiceTest 测试native binder service的应用层客户端
3.程序源码构成
源程序目录结构如下所示:
顶层Android.mk只是简单包含各个子目录的Android.mk,BServer目录存放本地服务端和本地客户端源码,FClient存放框架层客户端源码,NatviveBinderServiceTest存放应用层客户端源码。
本地服务端和本地客户端
-
1) BServer的Android.mk源码如下所示:
-
2) binder service接口ICloudManager(ICloudManager.h):
-
3) 实现实现ICloudManager接口的方法(ICloudManager.cpp)
-
4) 实现服务端(TestServer.cpp)
-
5) 实现客户端(TestClient.cpp)
框架层客户端
-
1) Android.mk
-
2) 定义接口类(ICloudManager.java)
-
3) 定义接口代理类(CloudManagerProxy.java)
-
4) 客户端(FClient.java)
-
5) 客户端脚本fclient
应用层客户端
先前我们有讲到在应用层是不能直接使用ServiceManager这个类的,因为Sdk并未包含该类,应用层只能通过bind service去使用binder service,但是我们的native service并不是使用应用层的Service子类创建的,这样看来貌似应用层不能使用native的binder service。
这里介绍一个技巧,其实我们的应用在运行时可以使用系统隐藏的类,比如ServiceManager,SystemProperties,只是编译时Sdk并未提供这些类,我们若使用这些类就无法编译。但是我们可以创建这些类所在的包,并创建这些类,在类里定义我们要使用的那些方法,我们就可以通过编译了。比如ServiceManager这个类,我们就可以为之创建android.os这个package,并在这个package下创建ServiceManager类,定义我们需要的方法getService。也许读者会担心运行时使用的ServiceManger类就是我们创建的ServiceManager类,但实际上运行时使用的ServiceManager类是framework.jar里的ServiceManager类,这是因为classloader在查找类时优先使用系统的类。
-
1) Android.mk
-
2) 我们创建的ServiceManager源码
-
3) 定义接口ICloudManager
-
4) 定义代理类CloudManagerProxy
-
5) 测试用的Activity(TestAc.java)
4.测试
上传程序:
使用native_client测试:
使用框架层的client测试:
使用应用层的client测试:
服务端:
客户端:
本文详细介绍了一个综合性的BinderService示例,包括本地服务端与客户端、框架层客户端和服务的使用,以及应用层客户端如何通过特殊技巧调用Native BinderService。





1万+






