本机库未从 golang 条件实现加载到 apex_defaults?

长解释:

我想将一个名为“libabcxtractor”的库添加到数组native_shared_libs;为此,我编写了一个.go文件(按照谷歌的建议),其条件如下所示:

package my_apex


import (

    "android/soong/android"

    "android/soong/apex"

    "fmt"

    "strings"

)




func globalFlags(ctx android.BaseContext) []string {

        var native_shared_libs []string

        if(strings.Contains(ctx.AConfig().DeviceName(), "my_apex_device")){

                fmt.Println("Some log to verify condition is getting executed......")

                native_shared_libs = append(native_shared_libs, "libabcextractor")

        }


        return native_shared_libs

}


func myApexFlagsDefaults(ctx android.LoadHookContext) {

    type props struct {

                Multilib struct {

                        First struct {

                                native_shared_libs  []string

                        }

                }

        }

        p := &props{}

        p.Multilib.First.native_shared_libs = globalFlags(ctx)

        ctx.AppendProperties(p)

}


func myApexFlagsDefaultsFactory() android.Module {

        module := apex.DefaultsFactory()

        android.AddLoadHook(module, myApexFlagsDefaults)

        return module

}


func init() {

        fmt.Println("Registering module type....")

        android.RegisterModuleType("my_apex_defaults", myApexFlagsDefaultsFactory)

}

为了在构建时能够选择上述条件,我更新了我的Android.bp文件,如下所示:


bootstrap_go_package {

   name: "soong-my_apex",

   pkgPath: "frameworks/av/apex/build",

   deps: [ "soong-apex" ],

   srcs: [ "my_apex.go", ],

   pluginFor: ["soong_build"],

}


my_apex_defaults {

   name: "my_apex",

}


当执行make命令时,我可以看到它进入了条件语句;日志正在打印。我通过.go检查路径来验证我的文件是否已编译,从而进一步进行了调查out/soong/.bootstrap/soong-my_apex/pkg/frameworks/av/apex/build.a。在那。但是,未生成".so"文件。libabcextractor对此的任何帮助都会很棒。


编辑: libabcextractor是驻留在 Prebuilts 路径中的供应商库。如果我尝试使用属于 AOSP 代码一部分且已在现有数组中的任何其他库native_static_libs,它也不适用于它们。从这里开始,由于没有适当的文档,我无法进一步调试。


呼如林
浏览 101回答 1
1回答

慕桂英546537

Go 中的反射只能访问导出的结构体字段,即以大写字母开头的结构体字段。在您的First结构中,native_shared_libs未导出并且无法使用反射访问。由于构建过程使用反射来访问该props结构,因此无法从中找到信息。你可以这样改变它:type props struct {    Multilib struct {        First struct {           Native_shared_libs  []string        }    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go