繁体   English   中英

在将系统文件夹打包到system.img之前,替换一些文件

[英]Replacing some files before packaging system folder to system.img

由于标题是不言自明的,所以我想在生成system.img之前替换system/bin/system/lib/某些文件。

更确切地说,我有一些预构建的.so文件,应该将它们复制到现有文件中。 例如libart.so 请注意,用修改后的原图源代码替换art/ (原图源代码) 不是一种选择。

为此,我应该调查哪个mk文件并将替换代码放入其中?

您可以遵循与其他问题中建议的结构相同的结构,但是请使用以下宏:

PRODUCT_COPY_FILES += \
     device/common/my_bin.bin:cache/my_bin.bin \
     device/common/my_so.so:system/art/my_so.so

其工作原理如下:

  • 文件从左复制到(:)右。
  • 生成映像(在本例中为cachesystem ,将使用这些文件夹中包含的文件生成映像。
  • 当我们将文件复制到该目标位置时,生成system.img时,将包含我们的文件。

同样,此文件的复制顺序也很重要。 例如,如果您要复制一个已经存在的文件,则希望将其替换。 (作为libart.so ),您需要在默认副本之前调用该副本。

为此,我建议您执行以下操作:

  • source build/envsetup.sh
  • lunch <<device>>
  • mgrep libart.so >这会通过mk文件执行grep,因此您可以看到默认副本在哪里完成。
  • 在所需的mk文件中插入$(info whatever)调用,以跟踪在哪里添加PRODUCT_COPY_FILES的好地方。

回答添加位置并不容易。 我本人从未修改过libart.so ,但我以这种方式复制了许多文件,它的工作原理很libart.so

我希望它也适用于您的情况。

一种快速的肮脏方式:

  1. 将所需文件复制到out(..)/ system / lib或构建system.img之后的任何位置
  2. make snod

其他方法是使用Android.mk。 在设备树中创建一个新目录,例如libart-prebuilt 将您的lib放在这里,然后创建一个包含内容的Android.mk文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := libart-prebuilt
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(TARGET_OUT)/lib
LOCAL_MODULE_STEM := libart
LOCAL_MODULE_SUFFIX := $(TARGET_SHLIB_SUFFIX)
LOCAL_SRC_FILES := libart.so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES

include $(BUILD_PREBUILT)

现在,只需将libart-prebuilt添加到device.mk中的PRODUCT_PACKAGES

另外,还有一个选项可以使用.mk文件中的PREBUILT_SHARED_LIBRARY选项将二进制.so库作为产品包添加: 在Android AOSPBUILD_PREBUILT https://stackoverflow.com/a/25682674/1028256中 包含预构建的共享库

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM