[英]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.