立即注册
查看: 2278|回复: 3

[展讯开发资料] 展讯平台Android10.0 Stable AIDL介绍

已绑定手机
发表于 2022-1-11 14:56:54 | 显示全部楼层 |阅读模式 来自 广东省深圳市
本文档介绍了Android 10上新引入的Stable AIDL,作为Mainline要求的一部分。

1、概览
Android 10上google引入了mainline module,一种通过应用商店更新系统组件的机制。Mainline module 开发过程中依赖 public API、System API 会涉及部分 AIDL 的使用。由于 AIDL 在不同版本之间的兼容性存在较大的风险, 因此,google 引入了一种称为 stable AIDL 的接口,该接口实现了 AIDL API/ABI 的可追溯性—版本管理以及向后兼容。 Stable AIDL 有如下特点:
- 由编译系统支持的 aidl_interface 关键字定义
- 仅支持结构化数据,数据类型(结构化数据)的序列化/反序列化由编译系统自动完成

2、Stable AIDL与AIDL的主要差异
2.1 自动支持 Parcelable
序列化,表示将一个对象转换成可存储或可传输的状态。
Parcel,翻译过来是打包的意思,其实就是包装了我们需要传输的数据,然后在 Binder 中传输,也就是用于跨进程传输数据。
图2-1 Parcel 跨进程数据传输
1.jpg
- 是一个接口,实现该接口的类,其句柄可以写入到 Parcel(或者从 Parcel 中还原)
- AIDL 传递数据要自己实现 Parcelable
- Stable AIDL 只需要声明传递数据的结构,编译系统负责实现 Parcelable

2.2 API 版本化
Stable AIDL 接口稳定后,可通过 m <module name>-freeze-api 进行 freeze 操作,AIDL 接口被打上版本号并归档。

2.3 meta interface methods
Stable AIDL 默认支持如下接口方法:
- getInterfaceVersion:查询接口的版本号
- setDefaultImpl:当 client 使用的 aidl 版本比 server 新,调用 server 未实现的方法时,会触发默认实现的方法

3、如何使用 Stable AIDL
3.1 定义 Stable AIDL
在 Android.bp 中通过如下方式可以声明一个 Stable AIDL,如图 3-1 所示。
图3-1 Stable AIDL 声明
2.jpg
name:模块的名称。 在这种情况下,将创建两个对应语言的存根库:my-module-name-java 和 my-module-name-cpp。 为了防止创建 C++ 库,使用了 gen_cpp。 这还会创建额外的构建系统操作,可用于检查和更新 API。
local_include_dir:包开始的路径。
srcs:将被编译成目标语言的稳定 AIDL 源文件列表。
api_dir:转储以前版本接口的API定义的路径;用于确保捕获对接口的APl中断更改(见下文描述的过程)。
版本:这里列出了在api_dir下冻结的接口的以前版本。 这是可选的。

3.2 书写 AIDL 文件
先来看 AIDL 的写法,写一个 AIDL 文件,例如 UidRange.aidl。之后分别写头文件以及源文件来实现Parcelable,例如 UidRange.h 以及 UidRange.cpp。
/sprdroid9.0_trunk/system/netd/server/binder/android/net/UidRange.aidl
package android.net;
/**
* An inclusive range of UIDs. *
* {@hide} */
parcelable UidRange cpp_header "binder/android/net/UidRange.h";
/sprdroid9.0_trunk/system/netd/server/binder/android/net/UidRange.h
……
/sprdroid9.0_trunk/system/netd/server/binder/android/net/UidRange.cpp ……
再来看 Stable AIDL 的典型写法,例如 UidRangeParcel.aidl 中定义一个结构化的数据 UidRangeParcel;接下来在编译时,编译系统会自动实现 Parcelable。
/sprdroidq_trunk/system/netd/server/binder/android/net/UidRangeParcel.aidl
package android.net;
/**
* An inclusive range of UIDs. *
* {@hide} */
parcelable UidRangeParcel {
int start;
int stop; }
4.jpg

更多详细内容请下载附件查看
2022-1-11 14:56 上传
文件大小:
1.34 MB
下载次数:
40
本地下载

16RD supports Paypal , Payment is calculated at the exchange rate of the day. Unable to download please contact 18902843661 (WhatsApp OR wechat number)

关于一牛网在微软浏览器(Microsoft Edge、IE浏览器)警报通告&解决方案!(无法下载直接更换浏览器即可)

*附件为作者发布,与本站无关,如有侵权,请联系客服删除

已绑定手机
发表于 2022-1-12 09:58:08 | 显示全部楼层 来自 上海市
了解一下
已绑定手机
发表于 2022-1-12 10:19:19 | 显示全部楼层 来自 上海市浦东新区
学习一下
已绑定手机
发表于 2023-11-9 12:04:28 | 显示全部楼层 来自 亚太地区
Thank you for your help
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表