由于标题不言自明,我希望在生成system/bin/
之前替换system/lib/
和system.img
中的某些文件。
更确切地说,我有一些预先构建的.so
文件,这些文件可以复制到现有文件上。例如libart.so
。请注意,使用修改后的艺术源代码替换art/
(艺术源代码)不是选项。
要执行此操作,我应该调查哪个mk
文件并将替换代码放入?
答案 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
其工作原理如下:
cache
或system
,将使用这些文件夹中包含的文件生成图像。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)
快速肮脏的方式:
make snod
其他方式是使用Android.mk。在设备树中创建一个新目录,例如libart-prebuilt
。把你的lib放在这里,然后用内容
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 AOSP或BUILD_PREBUILT
https://stackoverflow.com/a/25682674/1028256