首页 > 解决方案 > 创建 go 脚本以根据条件过滤 Srcs

问题描述

这是参考What is art.go? 为什么它被认为是在 bp 文件中编写条件的一种方式?. 我的用例需要根据条件分离一些源文件。是否有可能实现类似于我们在 .mk 文件中添加的 ifeq 案例

下面是我的示例代码

my_sample.go

package config_variant
import (
 "android/soong/android"
)

func globalFlags(ctx android.LoadHookContext) []string {
var Srcs []string

if ctx.AConfig().Getenv("SOME_ENV") == "my_env" {
  Srcs = append(Srcs, "<path of the file to be included>")
}
  return Srcs;
}

func configVariant(ctx android.LoadHookContext) {
 type props struct {
   Srcs []string
 }

 p := &props{}
 p.Srcs = globalFlags(ctx)
 ctx.AppendProperties(p)

}

func init() {
 android.RegisterModuleType("config_variant", variantFactory)
}

func variantFactory() android.Module {
 module := android.FileGroupFactory()
 android.AddLoadHook(module, configVariant)
 return module
}

安卓.bp

bootstrap_go_package {
 name :"soong-config_variant",
 pkgPath :"android/soong/my/sample",
 deps :[
   "soong",
   "soong-android",
   "soong-cc"
 ],
 srcs:[
   "my_sample.go"
 ],
 pluginFor:["soong_build"]
}
config_variant {
 name: "variant_configurator",
 srcs:["<added local class file to be included based on conditon>"],
}

android_app {
 ....
 **defaults:["variant_configurator"]**,
 ...
}

尝试在 android_app {} 中添加突出显示的语句时出现构建中断 .. 如何通知 android_app 说不要编译这组代码

标签: android-sourceandroid-soong

解决方案


推荐阅读