gpt4 book ai didi

android - native 库没有从 golang 条件实现加载到 apex_defaults?

转载 作者:行者123 更新时间:2023-12-01 19:19:35 30 4
gpt4 key购买 nike

所以我写了一个 go 文件,它会动态地将一个库附加到 apex_defaults-> multilib -> first -> native_shared_libs; Android.bp的完整代码可以查看here .但是,我在 out 目录中看不到已编译的 .so 文件,就像生成的其他 lib .so 文件一样。

详细解释:

我想向数组 native_shared_libs 添加一个名为“libabcxtractor”的库;为此我写了一个.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 的文件没有生成。对此的任何帮助都会很棒。

编辑: libabcextractor是位于 Prebuilts 路径中的 vendor 库。如果我尝试使用任何其他属于 AOSP 代码并且位于现有 native_static_libs 中的库阵列已经,它也不适用于他们。从这里开始,由于没有适当的文档,我无法进一步调试。

最佳答案

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

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

type props struct {
Multilib struct {
First struct {
Native_shared_libs []string
}
}
}

关于android - native 库没有从 golang 条件实现加载到 apex_defaults?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59467685/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com