本地库无法从Golang条件实现加载到apex_defaults?

6
我写了一个 go 文件,动态地将一个库附加到 apex_defaults->multilib->first->native_shared_libs 中;完整的 Android.bp 代码可以在 这里 查看。然而,我无法像其他生成的 lib .so 文件那样在我的 out 目录中看到已编译的 .so 文件。
长说明:
我想将名为“libabcxtractor”的库添加到数组native_shared_libs中;为此,我编写了一个带有某些条件的 .go 文件(根据 Google 的建议),如下所示:
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)
}

为了使上述“go”条件在构建时被选中,我已更新我的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",
}

apex_defaults {
    name: "com.android.media-defaults",
    java_libs: ["updatable-media"],
    defaults: ["my_apex",] //THIS IS TO INCLUDE GO IMPLEMENTATION 
    multilib: {

执行make命令时,我可以看到它进入了条件语句;日志已经被打印出来。我进一步调查了一下,通过检查路径out/soong/.bootstrap/soong-my_apex/pkg/frameworks/av/apex/build.a来验证我的.go文件是否被编译。它在那里。然而,libabcextractor".so"文件没有被生成。对此的任何帮助都将是极好的。
编辑:libabcextractor是一个位于Prebuilts路径中的供应商库。如果我尝试使用AOSP代码中已存在的native_static_libs数组中的任何其他库,它们也无法正常工作。从现在开始,由于缺乏适当的文档,我无法进一步进行调试。
1个回答

3
在 Go 语言中,反射只能访问公开的结构体字段,即以大写字母开头的字段。在你的 'First' 结构体中,'native_shared_libs' 是未公开的字段,不能使用反射方法访问。
由于构建过程使用反射来访问 'props' 结构体,因此无法从中获取信息。你可以像这样进行更改:
type props struct {
    Multilib struct {
        First struct {
           Native_shared_libs  []string
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接