在将系统文件夹打包到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
这种工作方式如下:
- 从左(该文件被复制: ) 对。
- 当生成图像,在这种情况下
cache
或system
,将它与包含在这些文件夹中的文件产生。 - 由于我们已将文件复制到该目的地,因此生成
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 AOSP或BUILD_PREBUILT
https://stackoverflow.com/a/25682674/1028256
一个快速肮脏的方式,以这样的:
- 复制所需文件输出(..)/系统/ lib或系统之后。IMG已经使用Android.mk内置
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-prebuilt
到PRODUCT_PACKAGES