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

问题描述:

由于标题不言自明,在生成system.img之前,我想替换system/bin/system/lib/中的一些文件。在将系统文件夹打包到system.img之前替换一些文件

更确切地说,我有一些预建.so文件,这shuold在现有的复制。例如libart.so。请注意,用修改过的艺术源代码替换art/(源代码艺术)是而不是的一个选项。

要做到这一点,这mk文件,我应该调查,并把我的代码替换成?

您可以遵循相同的结构,在此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 - >这确实通过mk文件的grep,这样你就可以看到默认的复制完成。
  • 在所需mk文件插入$(info whatever)呼吁追查是个好去处添加PRODUCT_COPY_FILES

这并不容易回答在哪里添加。我自己从来没有修改过libart.so,但我已经用这种方法复制了很多文件,并且它像一个魅力一样工作。

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

也有增加的二进制.so库作为产品包装的选项,使用.mk文件PREBUILT_SHARED_LIBRARY选项:Include prebuilt shared library in Android AOSPBUILD_PREBUILThttps://stackoverflow.com/a/25682674/1028256

一个快速肮脏的方式,以这样的:

  1. 复制所需文件输出(..)/系统/ lib或系统之后。IMG已经使用Android.mk内置
  2. make snod

其他方式。在设备树中创建一个新的目录,例如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) 

现在只是在你的device.mk添加libart-prebuiltPRODUCT_PACKAGES