[英]Replacing some files before packaging system folder to system.img
由于标题是不言自明的,所以我想在生成system.img
之前替换system/bin/
和system/lib/
某些文件。
更确切地说,我有一些预构建的.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,因此您可以看到默认副本在哪里完成。 mk
文件中插入$(info whatever)
调用,以跟踪在哪里添加PRODUCT_COPY_FILES
的好地方。 回答添加位置并不容易。 我本人从未修改过libart.so
,但我以这种方式复制了许多文件,它的工作原理很libart.so
。
我希望它也适用于您的情况。
一种快速的肮脏方式:
make snod
其他方法是使用Android.mk。 在设备树中创建一个新目录,例如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)
现在,只需将libart-prebuilt
添加到device.mk中的PRODUCT_PACKAGES
中
另外,还有一个选项可以使用.mk文件中的PREBUILT_SHARED_LIBRARY
选项将二进制.so库作为产品包添加: 在Android AOSP或BUILD_PREBUILT
https://stackoverflow.com/a/25682674/1028256中 包含预构建的共享库
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.