Go 条件代码未将库附加到 Apex
开发人员遇到了 Go 条件实现未将库附加到 apex_defaults 的问题。下面是提供的代码和建议的解决方案:
Go 代码:
<code class="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("Condition 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) }</code>
问题:
条件代码未将库 libabcextractor 附加到 apex_defaults。日志显示条件语句正在执行,但没有生成共享对象文件。
解决方案:
问题出在未导出的字段native_shared_libs中用于反射的 props 类型中的第一个结构体。在 Go 中,反射只能访问导出的结构体字段,即以大写字母开头的结构体字段。
要解决此问题,开发者可以将 native_shared_libs 字段更改为:
<code class="go">type props struct { Multilib struct { First struct { Native_shared_libs []string } } }</code>
以上是为什么我的 Go 条件代码没有将库附加到 Apex_Defaults?的详细内容。更多信息请关注PHP中文网其他相关文章!