由于标题是不言自明的,我想在生成时替换system/bin/一些system/lib/文件system.img。
更准确地说,我有一些预建.so的文件应该被复制到现有的文件上。例如libart.so. 请注意,用art/修改后的艺术源代码替换(艺术源代码)不是一种选择。
为此,mk我应该调查哪个文件并将替换代码放入?
由于标题是不言自明的,我想在生成时替换system/bin/一些system/lib/文件system.img。
更准确地说,我有一些预建.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
这工作如下:
cache或system,将使用这些文件夹中包含的文件生成图像。system.img生成时,我们的文件将被包含。此外,复制此文件的顺序也很重要。例如,如果您正在复制一个已经存在的文件,那么您希望它被替换。(作为您的libart.so),您需要在默认副本之前完成对该副本的调用。
为此,我建议这样做:
source build/envsetup.shlunch <<device>>mgrep libart.so-> 这会对mk文件进行 grep,因此您可以查看默认副本的完成位置。$(info whatever)调用mk以跟踪添加PRODUCT_COPY_FILES.很难回答在哪里添加它。我从未修改过libart.so自己,但我以这种方式复制了许多文件,它就像一个魅力。
我希望它也适用于您的情况。
一个快速肮脏的方法:
make snod其他方式是使用 Android.mk。在设备树中创建一个新目录,例如libart-prebuilt. 把你的库放在这里,然后创建一个包含内容的 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您的 device.mk
还有一个选项可以将二进制 .so 库添加为产品包,使用PREBUILT_SHARED_LIBRARY.mk 文件中的选项:Include prebuilt shared library in Android AOSP或BUILD_PREBUILT https://stackoverflow.com/a/25682674/1028256