2013-02-05 33 views
2

我已經編譯了用於arm的glibc,它與Android glibc或仿生C不同,因爲我遵循的glibc環境將有助於提供更多API。 現在我可以在Android運行時將/ glibc環境複製到/ system /文件夾中,並且在做chroot時我可以在glibc環境中運行我的程序。在Android文件夾中添加結構化文件夾中的預構建文件集

目前我編譯的glibc和Android分別然後tarring glibc的,並複製它在Android模擬器的SD卡,然後解包它/系統文件夾,然後/系統上做的chroot/glibc的

我單獨編譯的glibc和然後將其放置在Android源代碼的某處。 現在在編譯Android源代碼時,我該怎麼做,以便glibc的整個預先構建的文件夾結構被複制到/ system文件夾併成爲system.img的一部分。

當我將system.img複製到Android模擬器並啓動它時,glibc已經存在於/ system文件夾中,只需要在glibc環境中運行應用程序。

UPDATE

後我一樣每尤里在他的回答中提到(我創建glibc的文件夾,複製到一切吧),當我編譯代碼我得到下面的輸出。

build/core/main.mk:490: * Some files have been added to ALL_PREBUILT. 
build/core/main.mk:491: * 
build/core/main.mk:492: * ALL_PREBUILT is a deprecated mechanism that 
build/core/main.mk:493: * should not be used for new files. 
build/core/main.mk:494: * As an alternative, use PRODUCT_COPY_FILES in 
build/core/main.mk:495: * the appropriate product definition. 
build/core/main.mk:496: * build/target/product/core.mk is the product 
build/core/main.mk:497: * definition used in all products. 
build/core/main.mk:498: * 
build/core/main.mk:499: * unexpected glibc in ALL_PREBUILT 
build/core/main.mk:500: * 
build/core/main.mk:501: * ALL_PREBUILT contains unexpected files. Stop. 

所以我在建/核心/ legacy_prebuilts.mk

添加的glibc但後來我得到

​​

回答

1

這裏是一本書 「嵌入式Android」 的,這將有助於你一個例子。創建你叫rootfs-glibc AOSP項目的根文件夾,放在那裏,你要複製的代碼,並與下面的內容創建有Android.mk文件:

LOCAL_PATH:= $(call my-dir) 
include $(CLEAR_VARS) 
# This part is a hack, we're doing "addprefix" because if we don't, 
# this dependency will be stripped out by the build system 
GLIBC_ROOTFS := $(addprefix $(TARGET_ROOT_OUT)/, rootfs-glibc) 
$(GLIBC_ROOTFS): mkdir -p $(TARGET_ROOT_OUT) cp -af $(TOPDIR)rootfs-glibc/* $(TARGET_ROOT_OUT) rm 
# The last command just gets rid of this very .mk since it's copied as-is 
ALL_PREBUILT += $(GLIBC_ROOTFS) 

有一張紙條,這是真實的薑餅。也許在更新的Android版本中,make系統已經改變。

+0

謝謝尤里,但在你的情況下,我可能需要檢查和修復編譯問題時glibc的使用的Android工具鏈編譯。它可以完美編譯而不需要任何改變。 – Rookie

+0

我不明白。你嘗試添加一個預編譯的二進制文件,或者你想用android工具鏈編譯glibc嗎? – Yury

+0

嗨尤里,我需要添加一堆預生成二進制文件的特定文件夾結構,即我有一大堆的二進制文件在glibc的文件夾中的文件夾結構,需要如 – Rookie

0

我在想如果我可以這樣做 1.我有android和glibc編譯分離。 2.一旦兩個被編譯,我手動複製glibc的整個文件夾/出/目標/產品/通用/系統/ glibc的/文件夾 3.然後我運行「make snod」

將這項工作?

4

最後我以非常不尋常的方式做到了。

我有3個選項:

  1. 使用BUILD_PREBUILT變量,但退稅它,你可以爲 單個文件做到這一點,但我有多個文件,並在特定的forlder 結構
  2. 使用PRODUCT_COPY_FILES。但不知何故,它不適合我 PRODUCT_COPY_FILES是一個設備,它不是 我的新設備。我正在模擬器上工作。
  3. 使用尤里給出的解決方案,使用ALL_PREBUILT + =,但是因爲尤里 提到它是GB和我使用JB和ICS,因此不是 爲我工作。

我採取的方法是將Android.mk文件中使用shell腳本。 我使用了一些這樣的: 假設你有一個包含整個預置的文件夾結構的文件夾命名my_folder需要被複制到原樣anddroid出來的文件夾,裏面my_folder,我創建Android.mk和下面的文字輸入:

LOCAL_PATH:= $(call my-dir) 
include $(CLEAR_VARS) 

$(shell mkdir -p $(TARGET_OUT)/my_folder/) 
$(shell cp -rf $(LOCAL_PATH)/* `pwd`/$(TARGET_OUT)/my_folder/) 

這樣在my_folder目錄中的所有預置的我的設置文件和文件夾被複制的是系統文件夾中的android出來。

我希望這可以幫助別人。

1

PRODUCT_COPY_FILES必須放置在產品MK文件(設備/ mydevice在/ ..),而不是模塊文件(Android.mk)。這提到了here

此格式用於複製迪爾斯:

PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,vendor/mydir,system/app) 

該命令不APK文件的工作雖然給錯誤:

編譯/核心/ Makefile文件:***預建APK在PRODUCT_COPY_FILES發現:vendor/mydir/ray-system-ui-release.apk:system/app/ui-release.apk,改爲使用BUILD_PREBUILT !.停止。