安卓bp文件动态编译

在主文件夹中

soong_config_module_type {
    name: "adv_vs_vda_cc_defaults",
    module_type: "cc_defaults",
    config_namespace: "adv_vs_vda",
    variables: ["adv_or_vda"],
    properties: ["cflags", "include_dirs", "static_libs", "whole_static_libs", "srcs", "required"],
}

然后再其他文件中

bootstrap_go_package {
    name: "soong-ADV",
    pkgPath: "android/soong/ADV",
    deps: [
        "blueprint",
        "blueprint-pathtools",
        "soong",
        "soong-android",
        "soong-cc",
        "soong-genrule",
    ],
    srcs:[
        "adv.go"
    ],
    pluginFor:["soong_build"],
}

soong_config_module_type_import {
    from: "device/AAA/missi/Android.bp",
    module_types: [
         "adv_vs_vda_cc_defaults",
    ],
}

adv_vs_vda_cc_defaults{
    name: "adv_stack_cc-default",

    soong_config_variables: {
        adv_or_vda: {
           advvda: {
              cflags: [
                 
              ],
           }
       }
   }
}

然后go语言编写

package ADV

import (
    "android/soong/android"
    "android/soong/cc"
    "fmt"
)

func init() {
    android.RegisterModuleType("adv_vs_vda_cc_defaults", AdvAduioFeature_Cflag)
}

func AdvAduioFeature_Cflag() (android.Module) {
    module := cc.DefaultsFactory()
    android.AddLoadHook(module, AdvAduioFeature_Defaults)
    return module
}

func AdvAduioFeature_Defaults(ctx android.LoadHookContext) {
    type props struct {
        Soong_config_variables struct {
            Adv_or_vda struct {
                Advvda struct {
                    Cflags []string
                }
            }
        }
    }
    p := &props{}

    p.Soong_config_variables.Adv_or_vda.Advvda.Cflags = []string{"-DAAAAA=1"}
    ctx.AppendProperties(p)
}

但是编译失败了,out/host/linux-x86/bin/go/soong-BTIF/pkg/android/soong/BTIF.a
应该是实际的结构并不是这么弄的,哪位大 佬知道该怎么写,万分感谢
可以参考一下:https://android.googlesource.com/platform/build/soong/+/refs/heads/master/android/soong_config_modules.go

“Devil组”引证GPT后的撰写:

  • 首先,在 adv_vs_vda_cc_defaults 中,定义了变量 adv_or_vda,但在其他文件中的 adv_vs_vda_cc_defaults 模块实例化中并没有使用该变量。
  • 其次,在 adv_vs_vda_cc_defaults 模块实例化中,没有指定 defaults 属性,这会导致在 AdvAduioFeature_Cflag 函数中使用 cc.DefaultsFactory() 时会抛出一个 panic。因此,要将 adv_vs_vda_cc_defaults 实例化的 defaults 属性设置为 "adv_stack_cc-default"。
  • 此外,在 AdvAduioFeature_Defaults 函数中,在尝试更新属性时使用了一个未定义的结构体 Adv_or_vdastruct 和 Advvdastruct。要将它们改为与 adv_vs_vda_cc_defaults 中定义的变量和属性匹配的名称。
  • 最后,在 adv.go 中,要将 AdvAduioFeature_Cflag 函数中的 android.Module 类型改为 android.ModuleFactory 类型。

参考GPT和自己的思路:根据你提供的代码和错误信息,很难判断是具体哪个环节出了问题。但是根据你的描述,你可能需要进一步排查以下问题:

是否缺少必要的依赖?
根据你提供的代码,有一些依赖的模块和库被列出来了,但是不确定是否缺少必要的依赖。在编译过程中,如果缺少必要的依赖,会导致编译失败。

是否存在语法错误或者逻辑错误?
你提供的代码可能存在语法错误或者逻辑错误,导致编译失败。你可以仔细检查代码,尤其是拼写错误、语法错误、缺少引号等常见错误。

是否使用了不兼容的版本?
你可能使用了不兼容的版本。你需要检查代码中使用的所有库和模块的版本,确保它们是兼容的。同时,你需要检查使用的编译器和构建工具的版本是否兼容。

是否存在文件路径问题?
你提供的代码中使用了一些文件路径,可能存在文件路径问题。你需要确保文件路径正确,尤其是在使用相对路径时需要注意相对路径的起点是哪个目录。

你可以根据这些方向进一步排查问题,或者提供更多的信息和错误信息,以便更好地解决问题。

看下是不是clang编译器导致的问题,修改方法是:
在art/build/Android.common_build.mk ,中将host 默认编辑器使用clang关掉,找到WITHOUT_HOST_CLANG,关闭clang即可

# Host.
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),true)
  # By default, host builds use clang for better warnings.

ART_HOST_CLANG := false
endif

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据您提供的代码,看起来有一些细节问题,下面是一些修改建议:

soong_config_module_type 中,module_type 值为 "cc_defaults", 但是在注册模块类型的时候使用了 android.RegisterModuleType("adv_vs_vda_cc_flag", AdvAduioFeature_Defaults),应该为 android.RegisterModuleType("cc_defaults", AdvAduioFeature_Cflag)

AdvAduioFeature_Defaults 函数中,ctx.AppendProperties(p) 应该改为 ctx.AppendProperties(p.Soong_config_variables)

另外,为了更好的调试,建议添加一些调试输出语句,例如在 AdvAduioFeature_Defaults 函数中添加:

fmt.Println("ADV: AdvAduioFeature_Defaults called")

最后,以下是修改后的代码,仅供参考:

package ADV

import (
    "android/soong/android"
    "android/soong/cc"
    "fmt"
)

func init() {
    android.RegisterModuleType("cc_defaults", AdvAduioFeature_Cflag)
}

func AdvAduioFeature_Cflag() android.Module {
    module := cc.DefaultsFactory()
    android.AddLoadHook(module, AdvAduioFeature_Defaults)
    return module
}

func AdvAduioFeature_Defaults(ctx android.LoadHookContext) {
    fmt.Println("ADV: AdvAduioFeature_Defaults called")
    type props struct {
        Soong_config_variables struct {
            Adv_or_vda struct {
                Advvda struct {
                    Cflags []string
                }
            }
        }
    }
    p := &props{}

    p.Soong_config_variables.Adv_or_vda.Advvda.Cflags = []string{"-DAAAAA=1"}
    ctx.AppendProperties(p.Soong_config_variables)
}

希望对您有所帮助。
如果我的回答解决了您的问题,请采纳!