Android.bp 文件中的 Android R sdk_version 问题

问题描述

我在供应商分区中创建了一个新模块。当我尝试将我的模块与框架链接时,我不断收到此错误。我无法理解 sdk_version 的不同变体之间的关系。 "system_server_current","current","core_platform","module_current" ...

是否有可以解释这些并解决以下问题的文档?

wifi-service-pre-jarjar 依赖于 newmodule。

错误:frameworks/opt/net/wifi/service/Android.bp:47:1:模块“wifi-service-pre-jarjar”变体“android_common”:针对系统服务器API编译,但依赖“newmodule”是针对私有 API 进行编译。调整 sdk_version:源或目标模块的属性,以便使用与源相同或更小的 API 集构建目标模块。

解决方法

我根据 Android 8.1,Introduce link_type in AOSP build system 为它写了一个注释。看起来 Android 11 引入了更多 link_type

sdk_version 基于 link_type,用于拆分系统和应用之间的依赖关系。如果您的应用仅使用标准 SDK API,则应将 sdk_version 设置为 current 或特定 API 版本。否则,您应该根据您使用的 API 将 sdk_version 设置为 system 或其他变体,或者直接设置 platform_apis: true 以让您的模块使用私有 API。

如果您的依赖模块使用私有 API,则您的模块会继承使用私有 API 的状态。这个状态可以从你的依赖模块,或者依赖模块的依赖模块等传递给你的模块。

您可以查看 Android 11 的构建系统源代码,以了解有关 sdk_version 的更准确和详细的知识。