创建一个符号链接来构建 Android 图像

问题描述

我正在编写新设备和产品的定义以构建自定义 Android 映像,我需要在构建映像时创建符号链接,但不清楚在 Android 中执行此操作的正确方法是什么 mk 文件

例如,假设我需要创建一个名为 wget链接,该链接指向 /system/bin中的可执行文件 busyBox > 目录。

使用像下面这样的 shell 命令调用可能有效,但强烈建议不要这样做,因为它会在解析 mk 文件时执行多次(因此也适用于主机系统) :

$(shell ln -frs $(TARGET_OUT_EXECUTABLES)/busyBox $(TARGET_OUT_EXECUTABLES)/wget)

我尝试的另一种方法是填充这样的目录树:

$ tree device/my_vendor/my_device/links
links
└── system
    └── bin
        └── wget -> busyBox

然后使用此代码

PRODUCT_copY_FILES += \
        $(call find-copy-subdir-files,*,device/my_vendor/my_device/links,$(TARGET_copY_OUT_ROOT))

但镜像中根本没有创建任何文件,日志中也没有任何内容

那么,添加符号链接、创建 Android 图像的正确方法是什么?

奖励问题:如何创建将驻留在根中的链接?例如,/link 指向 /vendor/directory 之类的东西?

谢谢!

解决方法

使用 LOCAL_POST_INSTALL_CMD(适用于所有类型模块)或 LOCAL_POST_LINK_CMD(仅适用于可执行文件)

  1. LOCAL_POST_INSTALL_CMD example
  2. LOCAL_POST_LINK_CMD example
,

执行此操作的标准方法是在引导期间通过 init.rc 文件在“运行时”。

根据 init/README.md 的语法是:

symlink <target> <path>
在路径上创建一个符号链接,值为目标

“构建时间”中可能还有其他方法可以做到这一点,但我还没有遇到过,而且我已经看到 AOSP 的很多部分使用 init.rc方式。