簡體   English   中英

在將系統文件夾打包到system.img之前,替換一些文件

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

其工作原理如下:

  • 文件從左復制到(:)右。
  • 生成映像(在本例中為cachesystem ,將使用這些文件夾中包含的文件生成映像。
  • 當我們將文件復制到該目標位置時,生成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

我希望它也適用於您的情況。

一種快速的骯臟方式:

  1. 將所需文件復制到out(..)/ system / lib或構建system.img之后的任何位置
  2. 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 AOSPBUILD_PREBUILT https://stackoverflow.com/a/25682674/1028256中 包含預構建的共享庫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM