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

时间:2017-06-13 04:52:06

标签: android android-source android-make

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

更确切地说,我有一些预先构建的.so文件,这些文件可以复制到现有文件上。例如libart.so。请注意,使用修改后的艺术源代码替换art/(艺术源代码)不是选项。

要执行此操作,我应该调查哪个mk文件并将替换代码放入?

3 个答案:

答案 0 :(得分:2)

您可以使用与此other question中建议的结构相同的结构,但请使用此宏:

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 - &gt;这会通过mk文件进行grep,因此您可以看到默认副本的位置。
  • 在所需的$(info whatever)文件中插入mk个来跟踪哪里是添加PRODUCT_COPY_FILES的好地点。

要回答添加位置并不容易。我自己从来没有修改过libart.so,但是我用这种方式复制了很多文件,它就像一个魅力。

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

答案 1 :(得分:1)

快速肮脏的方式:

  1. 将所需文件复制到out(..)/ system / lib或构建system.img后的任何位置
  2. make snod
  3. 其他方式是使用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添加到您设备的PRODUCT_PACKAGES <。pk

答案 2 :(得分:0)

还可以使用.mk文件中的PREBUILT_SHARED_LIBRARY选项添加二进制.so库作为产品包:Include prebuilt shared library in Android AOSPBUILD_PREBUILT https://stackoverflow.com/a/25682674/1028256