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",
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
build/soong/java是Android源码的一个目录,它包含了Soong构建系统针对Java代码的相关功能。 Soong是一个用于构建Android源码的构建系统,取代了过去使用的Make构建系统。build/soong/java目录下的代码主要负责处理Java代码的构建和编译过程。 其,build/soong/java的功能作用主要包括以下几个方面: 1. 处理模块依赖:Soong构建系统使用一种模块化的方式来组织代码,每个模块都可以指定自己的依赖关系。build/soong/java会根据模块的依赖关系来确定编译顺序,保证依赖的模块先编译。 2. 解析Android.mk文件:在Android源码,有一种叫做Android.mk的文件,用于描述模块的编译规则。build/soong/java会解析Android.mk文件,提取其的编译规则,并将其转换为Soong构建系统所需要的格式。 3. 处理Java编译:build/soong/java会调用Java编译器,对Java源代码进行编译。它会根据模块的配置和编译规则,生成对应的编译命令。 4. 处理资源文件:在Android开发,除了Java代码,还有一些资源文件需要处理,例如布局文件、图片等。build/soong/java会处理这些资源文件的编译和打包过程,确保它们能够正确地被应用程序使用。 总的来说,build/soong/java是Android源码负责处理Java代码构建和编译的部分,它通过解析Android.mk文件,处理模块依赖关系,调用Java编译器等方式,完成Java代码的构建过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值