- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试根据环境变量集在 Android.bp 中添加/删除模块。例如,如果我将 BUILD_SOURCE 设置为 1,则 Android.bp 中的 cc_prebuilt_binary 会被删除,而会添加一些 cc_binary。
我看过指南和下面的句子, a https://android.googlesource.com/platform/build/soong/#how-do-i-write-conditionals
Soong deliberately does not support conditionals in Android.bp files. Instead, complexity in build rules that would require conditionals are handled in Go
但是我找不到控制整个模块而不是模块中的属性的方法。
有谁知道怎么做或者指南在哪里?
提前致谢:)
最佳答案
我假设您有以下设置:
cc_binary {
name: "my_binary",
srcs: ["some_file.cc"]
}
cc_prebuilt_binary {
name: "my_binary_prebuilt",
srcs: ["some_blob"]
}
我建议采用以下方法:
soong 构建系统要求模块名称是唯一的。因此,在您的情况下,cc_prebuilt_binary
和 cc_binary
需要不同的名称。因此,在您需要这些模块的地方,您必须选择正确的模块。
由于您正在处理二进制文件,我假设您是通过某些 .mk
文件中的 PRODUCT_PACKAGES
变量选择这些模块(而不是库,它可以也被选为另一个模块的依赖项)。然后,您可以将 PRODUCT_PACKAGES
声明调整为例如:
ifeq ($(BUILD_SOURCE),1)
PRODUCT_PACKAGES += my_binary
else
PRODUCT_PACKAGES += my_binary_prebuilt
endif
如果两个模块的源文件始终可用,则不需要进一步的工作。但是,如果例如当 BUILD_SOURCE=1
时,预构建的二进制文件根本不可用,您需要完全禁用此模块。这与在步骤 1 中不选择它不同:对于禁用的模块,未验证 srcs
中指定的文件的可用性。
可以通过以下方式手动禁用:
cc_prebuilt_binary {
name: "my_binary_prebuilt",
srcs: ["some_blob"],
enabled: false
}
但是,我假设您想根据 BUILD_SOURCE
环境变量自动执行此操作。
为此,您将定义一个自定义模块预设(例如,在文件 my_prebuilt_preset.go
中),根据 BUILD_SOURCE< 设置
环境变量:enabled
标志
package my_prebuilt_preset
import (
"android/soong/android"
"android/soong/cc"
)
func myPrebuiltDefaults(ctx android.LoadHookContext) {
type props struct {
Target struct {
Android struct {
Enabled *bool
}
}
}
p := &props{}
p.Target.Android.Enabled = new(bool)
*p.Target.Android.Enabled = !ctx.AConfig().IsEnvTrue("BUILD_SOURCE")
ctx.AppendProperties(p)
}
func myPrebuiltDefaultsFactory() android.Module {
module := cc.DefaultsFactory()
android.AddLoadHook(module, myPrebuiltDefaults)
return module
}
func init() {
android.RegisterModuleType("my_prebuilt_preset", myPrebuiltDefaultsFactory)
}
您将在 Android.bp 中为 Go 文件添加一个模块:
bootstrap_go_package {
name: "soong-my_prebuilt_preset",
pkgPath: "android/soong/external/my_prebuilt_preset",
deps: [
"soong",
"soong-android",
"soong-cc"
],
srcs: [
"my_prebuilt_preset.go"
],
pluginFor: ["soong_build"]
}
然后将预设添加到您的my_binary_prebuilt
:
my_prebuilt_preset {
name: "my-prebuilt-preset"
}
cc_prebuilt_binary {
name: "my_binary_prebuilt",
srcs: ["some_blob"],
defaults: ["my-prebuilt-preset"]
}
当 BUILD_SOURCE=1
及其 srcs
字段不应被评估时,您的 my_binary_prebuilt
应该被禁用。
关于android - 有没有办法在 Android.bp 中添加/删除模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58423380/
我有 CSS 定义,例如 .one-table width: 500px .one-table td padding: 0 但是因为 Compass/Blueprint 0.8.17 有 bo
这是我编写的代码,用于以相反的顺序将数据从一个数组移动到另一个数组。 data segment arr1 db 10h,20h,30h,40h arr2 db 4 dup(0) cnt dw 04h
本文实例为大家分享了python实现神经网络算法及应用的具体代码,供大家参考,具体内容如下 首先用python实现简单地神经网络算法: ?
进程文件: bp or bp.exe 进程名称: BrowserPal 进程类别:存在安全风险的进程 英文描述: bp.exe is free
本文整理了Java中org.threeten.bp.ZoneId类的一些代码示例,展示了ZoneId类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从
本文整理了Java中org.threeten.bp.ZonedDateTime类的一些代码示例,展示了ZonedDateTime类的具体用法。这些代码示例主要来源于Github/Stackoverfl
本文整理了Java中org.threeten.bp.ZoneOffset类的一些代码示例,展示了ZoneOffset类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Mav
本文整理了Java中org.threeten.bp.YearMonth类的一些代码示例,展示了YearMonth类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven
本文整理了Java中org.threeten.bp.Year类的一些代码示例,展示了Year类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选
本文整理了Java中org.threeten.bp.ZoneId.of()方法的一些代码示例,展示了ZoneId.of()的具体用法。这些代码示例主要来源于Github/Stackoverflow/M
本文整理了Java中org.threeten.bp.ZonedDateTime.from()方法的一些代码示例,展示了ZonedDateTime.from()的具体用法。这些代码示例主要来源于Gith
本文整理了Java中org.threeten.bp.zone.ZoneRulesProvider类的一些代码示例,展示了ZoneRulesProvider类的具体用法。这些代码示例主要来源于Githu
本文整理了Java中org.threeten.bp.zone.ZoneRules类的一些代码示例,展示了ZoneRules类的具体用法。这些代码示例主要来源于Github/Stackoverflow/
本文整理了Java中org.threeten.bp.ZoneOffset.of()方法的一些代码示例,展示了ZoneOffset.of()的具体用法。这些代码示例主要来源于Github/Stackov
本文整理了Java中org.threeten.bp.YearMonth.of()方法的一些代码示例,展示了YearMonth.of()的具体用法。这些代码示例主要来源于Github/Stackover
本文整理了Java中org.threeten.bp.Year.of()方法的一些代码示例,展示了Year.of()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven
本文整理了Java中org.threeten.bp.zone.ZoneRulesInitializer类的一些代码示例,展示了ZoneRulesInitializer类的具体用法。这些代码示例主要来源
本文整理了Java中org.threeten.bp.zone.ZoneOffsetTransition类的一些代码示例,展示了ZoneOffsetTransition类的具体用法。这些代码示例主要来源
本文整理了Java中org.threeten.bp.zone.ZoneOffsetTransitionRule类的一些代码示例,展示了ZoneOffsetTransitionRule类的具体用法。这些
我想区分 Android Q 和 Android R 之间的代码,如何在 Android.bp 中实现这一点?在 Android.mk 中我做了这样的事情 ifeq ($(PLATFORM_VERSI
我是一名优秀的程序员,十分优秀!