本机库未从 golang 条件实现加载到 apex_defaults?
native library is not getting loaded to apex_defaults from golang conditional implementation?
所以我写了一个 go 文件,它将动态地附加一个库到 apex_defaults-> multilib -> first -> native_shared_libs; Android.bp
的完整代码可以查看 here。但是,我无法在我的 out 目录中看到已编译的 .so 文件,就像生成的其他 lib .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
文件是否被编译,从而进一步调查。在那。但是 ".so"
文件没有生成 libabcextractor
。在这方面的任何帮助都会很棒。
编辑:
libabcextractor
是驻留在 Prebuilts 路径中的供应商库。如果我尝试使用作为 AOSP 代码的一部分并且已经在现有 native_static_libs
数组中的任何其他库,它也不适用于它们。从这里开始,由于没有适当的文档,我无法进一步调试。
Go 中的反射只能访问导出的结构字段,这些字段以大写字母开头。在您的 First
结构中,native_shared_libs
未导出,无法使用反射访问。
由于构建过程使用反射访问 props
结构,因此无法从中找到信息。您可以这样更改它:
type props struct {
Multilib struct {
First struct {
Native_shared_libs []string
}
}
}
所以我写了一个 go 文件,它将动态地附加一个库到 apex_defaults-> multilib -> first -> native_shared_libs; Android.bp
的完整代码可以查看 here。但是,我无法在我的 out 目录中看到已编译的 .so 文件,就像生成的其他 lib .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
文件是否被编译,从而进一步调查。在那。但是 ".so"
文件没有生成 libabcextractor
。在这方面的任何帮助都会很棒。
编辑:
libabcextractor
是驻留在 Prebuilts 路径中的供应商库。如果我尝试使用作为 AOSP 代码的一部分并且已经在现有 native_static_libs
数组中的任何其他库,它也不适用于它们。从这里开始,由于没有适当的文档,我无法进一步调试。
Go 中的反射只能访问导出的结构字段,这些字段以大写字母开头。在您的 First
结构中,native_shared_libs
未导出,无法使用反射访问。
由于构建过程使用反射访问 props
结构,因此无法从中找到信息。您可以这样更改它:
type props struct {
Multilib struct {
First struct {
Native_shared_libs []string
}
}
}