Android13 新增 Stable AIDL接口

Android13 稳定AIDL接口添加与问题解决
本文介绍了在Android13中如何在netd AIDL中添加稳定接口,包括setHardwareAddress方法。详细阐述了稳定AIDL的背景、接口更新过程,以及遇到的错误和解决方案,包括更新API、编译错误和调用问题。

问题描述:

我需要在netd aidl 中添加新的接口:

设置网卡MAC地址:

void setHardwareAddress(in @utf8InCpp String iface, in @utf8InCpp String hwAddr);

背景:

Android 10 添加了对稳定的 Android 接口定义语言 (AIDL) 的支持,这是一种跟踪由 AIDL 接口提供的应用编程接口 (API)/应用二进制接口 (ABI) 的新方法。稳定的 AIDL 与 AIDL 的主要区别如下:

在构建系统中使用 aidl_interfaces 定义接口。
接口只能包含结构化数据。对于代表所需类型的 Parcelable,系统会根据其 AIDL 定义自动创建,并自动对其进行编组和解组。
可以将接口声明为“稳定”接口(向后兼容)。声明之后,会在 AIDL 接口旁的一个文件中对这些接口的 API 进行跟踪和版本编号。
 

添加以后:使用如下指令编译模块

mmm /frameworks/libs/net/common/netd

报错提示说需要更新api:

API dump for the current version of AIDL interface setHardwareAddress does not exist.

Run m netd_aidl_interface-update-api or add unstable: true to the build rule for the interface if it does not need to be versioned

我们按照提示更新api:

make netd_aidl_interface-update-api 更新当前api 此命令执行成会更新如下目录下的aidl文件

QSSI.13\frameworks\libs\net\common\netd\aidl_api\netd_aidl_interface\current 

因为我们是在原来的aidl文件内新增的接口, 所以我们需要使用如下指令重新生成一个version 的api

make netd_aidl_interface-freeze-api 此命令会生成新的版本号的api:之前最大是10,更新以后多了11

QSSI.13\frameworks\libs\net\common\netd\aidl_api\netd_a

<think>嗯,用户遇到了一个Android构建错误,看起来是和AIDL相关的。错误信息提到了vendor.xiaomi.hardware.fx.tunnel.V1_0_interface模块的srcs属性缺少源文件。首先,我需要理解这个错误的上下文。 首先,错误信息中的关键点是什么?用户提到模块在Android.bp文件中第6行,第9列,指出没有在aidl_api路径下找到对应版本的源文件。另外,还有一个提示说是否手动添加了版本到.bp文件,而正常情况下应该由-freeze-api自动处理。 可能的原因有几个:一是AIDL接口定义文件没有正确放置,导致构建系统找不到;二是版本管理问题,可能手动修改了Android.bp而没有使用正确的工具,导致版本冻结的问题;三是模块声明中的路径错误,srcs属性指向的位置不存在或文件缺失。 接下来,我需要思考如何解决这些问题。首先检查aidl_api目录结构是否正确,确认V1_0版本的AIDL文件是否存在。然后,确认是否应该使用-freeze-api来自动生成版本,而不是手动修改。如果是手动添加了版本号,可能需要删除并重新生成。 另外,查看Android.bp文件中的模块定义是否正确,特别是srcs属性是否指向正确的源文件路径。可能需要修正路径或者补充缺失的AIDL文件。如果使用了版本冻结,可能需要执行相应的命令来生成所需的API版本。 还有可能需要清理构建缓存,比如删除out目录,然后重新构建,避免旧缓存导致的问题。此外,查阅相关文档或团队内部是否有特殊配置,确保遵循正确的AIDL接口添加流程。 用户可能需要逐步排查这些可能性,确认文件位置、检查构建脚本、使用正确工具生成API版本,以及清理构建环境。如果这些步骤都做了,应该能解决这个错误。</think>这个错误属于Android源码编译过程中遇到的AIDL接口版本管理问题。以下是分步解析与解决方案: **错误核心原因:** AIDL接口版本管理机制检测到以下问题: 1. 在路径 `aidl_api/vendor.xiaomi.hardware.fx.tunnel.V1_0/1` 中缺少接口定义文件 2. 可能存在手动修改`Android.bp`而未通过官方版本冻结工具操作 **具体诊断流程:** 1. **检查AIDL接口定义文件** ```bash # 确认接口文件存在性 ls -l aidl_api/vendor.xiaomi.hardware.fx.tunnel.V1_0/1/ ``` - 应包含`.aidl`文件(如 `IFxTunnel.aidl`) - 如缺失则需要从上游仓库同步或手动创建 2. **验证Android.bp配置** ```python // 示例正确配置结构 aidl_interface { name: "vendor.xiaomi.hardware.fx.tunnel.V1_0", srcs: ["aidl_api/vendor.xiaomi.hardware.fx.tunnel.V1_0/1/*.aidl"], versions: ["1"], } ``` - 检查`srcs`路径是否与实际文件位置匹配 - 确认`versions`数组是否包含正确的版本号 3. **执行版本冻结操作** ```bash # 在源码根目录执行 m vendor.xiaomi.hardware.fx.tunnel.V1_0-freeze-api ``` - 该命令会自动生成版本快照 - 会创建`current`和`1`版本目录结构 - 禁止手动修改生成的版本目录 4. **清理构建缓存** ```bash make clean rm -rf out/ ``` **典型修复步骤:** 1. 回退所有手动修改的.bp文件 2. 确保AIDL文件存在于正确路径: ``` aidl_api/ └── vendor.xiaomi.hardware.fx.tunnel.V1_0/ ├── 1/ │ └── IFxTunnel.aidl └── Android.bp ``` 3. 通过官方流程更新接口: ```bash # 更新接口后执行 m <module_name>-update-api m <module_name>-freeze-api ``` **注意事项:** - 所有AIDL接口变更必须通过`-freeze-api`机制 - 多个版本共存时需要维护版本目录(如1/, 2/) - 跨版本兼容性需在接口设计时考虑 建议结合具体业务场景: - 如果是新增功能接口,应创建新版本目录(如2/) - 如果是修复现有接口,应在当前版本目录操作 - 若继承其他接口,需在Android.bp中声明`imports`字段
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值