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

标签 android go build android-source

所以我写了一个 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/

相关文章:

c# - 构建大量项目和解决方案时如何节省磁盘空间?

android - 在运行多个 AsyncTasks 时遇到挂起线程的问题

go - C++逻辑的 "new"运算符在go中如何表达?

java - 空对象引用上的 NullPointerException : Connection. createStatement()

go - 来自结构的唯一哈希

json - 如何在 Go 中解码 JSON,它将多个元素作为类型数组返回,将单个元素作为类型返回

unit-testing - 在 Mesos 上运行 make check 时,其中一项测试失败,现在怎么办?

linux - 在构建期间生成 ramdisk 并填充内容

android - react native : Emulator stuck on "loading from localhost:8081.."

java - 无法使用 Skin 更改 TextButton 的字体