由于标题是不言自明的,我想在生成时替换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.sh
lunch <<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