所以我写了一个go文件,它将一个库动态附加到apex_defaults-> multilib-> first-> native_shared_libs; 的完整代码Android.bp可在此处查看。但是,我无法像其他生成的lib .so文件那样在out目录中看到已编译的.so文件。
Android.bp
详细说明:
我想将名为“ libabcxtractor”的库添加到数组native_shared_libs;为此,我写了一个.go文件(由Google推荐),其条件如下所示:
.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", } apex_defaults { name: "com.android.media-defaults", java_libs: ["updatable-media"], defaults: ["my_apex",] //THIS IS TO INCLUDE GO IMPLEMENTATION multilib: {
执行make命令时,我可以看到它进入了条件语句;日志正在打印。我.go通过检查路径来验证我的文件是否已编译来进一步调查out/soong/.bootstrap/soong- my_apex/pkg/frameworks/av/apex/build.a。在那里。但是没有生成的".so"文件libabcextractor。任何帮助都会很棒。
out/soong/.bootstrap/soong- my_apex/pkg/frameworks/av/apex/build.a
".so"
libabcextractor
编辑: libabcextractor是位于预构建路径中的供应商库。如果我尝试使用属于AOSP代码一部分并且native_static_libs已经存在于现有数组中的任何其他库,那么它们也不适用于它们。从这里开始,由于没有适当的文档,我无法进一步调试。
native_static_libs
Go中的Reflection只能访问导出的struct字段,这些字段以大写字母开头。在您的First结构中,native_shared_libs未导出,因此无法使用反射进行访问。
First
native_shared_libs
由于构建过程使用反射来访问props结构,因此无法从中找到信息。您可以这样更改:
props
type props struct { Multilib struct { First struct { Native_shared_libs []string } } }