2

HIDL示例-JAVA服务创建-Client验证-Android10.0 HwBinder通信原理(四)

 2 years ago
source link: https://blog.csdn.net/yiranfeng/article/details/107899517
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

HIDL示例-JAVA服务创建-Client验证-Android10.0 HwBinder通信原理(四)

摘要:本节主要来讲解Android10.0 JAVA层的HIDL服务创建和JAVA层的Client验证

阅读本文大约需要花费15分钟。

文章首发微信公众号:IngresGe

专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢!

欢迎关注我的公众号!

20200113052246361.jpg

[Android取经之路] 的源码都基于Android-Q(10.0) 进行分析

[Android取经之路] 系列文章:

《系统启动篇》

《日志系统篇》

《Binder通信原理》

  《HwBinder通信原理》

《编译原理》

    上一节,我们写了Native层的HIDL服务和客户端进程验证,这一节我们准备写一个JAVA层的HIDL服务和客户端进行验证。

  本节会直接写一个APP用来与HIDL服务进行通信。

1.1 JAVA层的HwBinder架构

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lpcmFuZmVuZw==,size_16,color_FFFFFF,t_70

1.2 HwBinder通信原理

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lpcmFuZmVuZw==,size_16,color_FFFFFF,t_70

2. 示例说明

Server进程目录结构:

Server:

hal_demo

├─src

│  └─com

│       └─android

│               └─demo

│                   └─Server.java

├─Android.bp

└─hidldemo_service_test

Client进程目录结构:

Client:

hidl_demo\app\src\main

├─java

│  └─com

│       └─android

│               └─hidldemo

│                   └─MainActivity.java

├─res

├─Android.bp

└─AndroidManifest.xml

3.Java的HIDL服务

3.1  创建一个HIDL java服务的目录,并实现服务代码

命令:

vim vendor/ingres/hal_demo/java/src/com/android/demo/Server.java

code:

2.2 配置Android.bp

命令:

vim vendor/ingres/hal_demo/java/Android.bp

Code:

2.3 编译

命令:

mmm vendor/ingres/hal_demo/java/

生成文件:

\out\target\product\kona\testcases\hidldemo_service\arm64\hidldemo_service.jar

2.4 服务启动 可执行程序

命令:

vim  vendor/ingres/hal_demo/java/hidldemo_service_test

code:

3. 通过AS写一个简单的Activity Demo

activity_main.xml

code:

20200809203312206.jpg

3.1.把AS的工程移植到Android工程中

     1)mkdir -p vendor/ingres/hidl_demo

     2)拷贝AS的工程到hidl_demo的目录中

3.2.工程实现:

   1)创建Android.bp

vim vendor/ingres/hidl_demo/app/src/main/Android.bp

code:

2)实现hal服务的调用

修改以下文件:

vendor/ingres/hidl_demo/app/src/main/java/com/android/hidldemo/MainActivity.java

code:

遇到的编译问题:

原因:

 Android.bp里添加 sdk_version: "current", 后不能使用 @hide API

解决办法:

 从Android.bp中去除 sdk_version: "current"

结合上一节Native层的HIDL服务,我这里准备进行两种验证:

1) JAVA层HIDL服务 + JAVA层Client

2) Native层HIDL 服务 + JAVA层Client

4.1  JAVA 层HIDL服务+ JAVA层client

1).安装编译好的hidldemo.apk到手机中

2).把 hidldemo_service.jar push到 /data/framework中

    adb push xxx/hidldemo_service.jar  /data/framework

3).把 hidldemo_service_test push 到 /data/nativetest64 中

   adb push xxx/hidldemo_service_test  /data/nativetest64

4).启动服务

   ./data/nativetest64/hidldemo_service_test

5).打开hidldemo app,点击button

log展示:

服务启动:

Client接口调用成功:

4.2  C++ 层HIDL服务+ JAVA层client:

接上一节的C++ HIDL服务

1.安装编译好的hidldemo.apk到手机中

2.启动Native层的hal服务:

./vendor/bin/hw/./[email protected]

3.打开hidldemo app,点击button

log展示:

Client接口调用成功:

注:

我在使用时是关闭了selinux进行的验证,真正使用时,还需要配置Selinux

我的微信公众号:IngresGe

20200113052246361.jpg

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK