Android soong架构中命名空间模块的概念

参考文章 https://source.android.google.cn/setup/build

命名空间模块

在 Android 完全从 Make 转换为 Soong 之前,Make 产品配置必须指定 PRODUCT_SOONG_NAMESPACES 值。它的值应该是一个以空格分隔的列表,其中包含 Soong 导出到 Make 以使用 m 命令进行编译的命名空间。在 Android 完成到 Soong 的转换之后,启用命名空间的详细信息可能会发生变化。

Soong 可以让不同目录中的模块指定相同的名称,只要每个模块都在单独的命名空间中声明即可。可以按如下方式声明命名空间:

soong_namespace {
    imports: ["path/to/otherNamespace1", "path/to/otherNamespace2"],
}

请注意,命名空间没有 name 属性;其路径会自动指定为其名称。

系统会根据每个 Soong 模块在目录树中的位置为其分配命名空间。每个 Soong 模块都会被视为处于 Android.bp(位于当前目录或最近的父级目录中的 soong_namespace 文件内)定义的命名空间中。如果未找到此类 soong_namespace 模块,则认为该模块位于隐式根命名空间中。

判断依赖是哪里的例子:

Soong 尝试解析由模块 M 在名称空间 N(导入命名空间 I1、I2、I3…)中声明的依赖项 D

  1. 如果 D//namespace:module 格式的完全限定名称,系统将仅在指定的命名空间中搜索指定的模块名称。

  2. 否则,Soong 将首先查找在命名空间 N 中声明的名为 D 的模块。

  3. 如果该模块不存在,Soong 会在命名空间 I1、I2、I3…中查找名为 D 的模块。

  4. 最后,Soong 在根命名空间中查找。

判断是否编译模块的应用的例子

高通Android R基线上面 Bluetooth 的例子

vendor/qcom/opensource/commonsys-intf/bluetooth/bt-system-opensource-product.mk

PRODUCT_SOONG_NAMESPACES += vendor/qcom/opensource/commonsys/packages/apps/Bluetooth
PRODUCT_SOONG_NAMESPACES += vendor/qcom/opensource/commonsys/system/bt/conf

vendor/qcom/opensource/commonsys/packages/apps/Bluetooth/Android.bp

soong_namespace {
}
...
android_app {
    name: "Bluetooth",
....

packages/apps/Bluetooth/Android.bp

// Bluetooth is in it's own namespace to allow it to be replaced with an
// alternate implementation.
soong_namespace {
}
...
// Bluetooth APK
android_app {
    name: "Bluetooth",
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值