为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕田峪4524236 2022-04-26 15:21:28
所以我写了一个 go 文件,它会动态地将一个库附加到 apex_defaults-> multilib -> first -> native_shared_libs; 的完整代码Android.bp可以在这里查看。但是,我在 out 目录中看不到已编译的 .so 文件,就像生成的其他 lib .so 文件一样。长解释:我想向数组native_shared_libs添加一个名为“libabcxtractor”的库;就此而言,我写了一个.go文件(由谷歌推荐),其条件如下:package my_apeximport (    "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数组中的库,那么它也不适用于它们。从这里开始,由于没有适当的文档,我无法进一步调试。
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超22个赞

Go 中的反射只能访问导出的结构字段,即以大写字母开头的字段。在您的First结构中,native_shared_libs未导出并且无法使用反射访问。


由于构建过程使用反射来访问props结构,因此无法从中找到信息。您可以像这样更改它:


type props struct {

    Multilib struct {

        First struct {

           Native_shared_libs  []string

        }

    }

}


查看完整回答
反对 回复 2022-04-26
  • 1 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号