標籤:android os 使用 ar for 檔案 資料 sp on
Android codebase都很大,編譯一次都需要花很多時間,如果是preloader/lk/bootimage還好,但是Android的話都是非常久。
實際上這個編譯時間還是可以進一步縮短!
1. 移除modules_to_check
(1). Android預設是所有模組都會編譯的(不管需不需要),這個有些冗餘,可以通過修改編譯系統不編譯哪些沒有用到的模組
(2). 修改方法:alps/build/core/main.mk
files: prebuilt \
$(modules_to_install) \
$(modules_to_check) \
$(INSTALLED_ANDROID_INFO_TXT_TARGET)
修改為:
files: prebuilt \
$(modules_to_install) \
$(INSTALLED_ANDROID_INFO_TXT_TARGET)
(3). 如果是ubi nand檔案系統的項目(比如72 nand項目),還需要在alps/build/core/Makefile中:
$(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \
$(INSTALLED_RAMDISK_TARGET) \
$(INSTALLED_BOOTIMAGE_TARGET) \
$(recovery_binary) \
$(recovery_initrc) $(recovery_kernel) \
$(INSTALLED_2NDBOOTLOADER_TARGET) \
$(recovery_build_prop) $(recovery_resource_deps) \
$(recovery_fstab) \
$(recovery_gzip) $(recovery_sec_ko) \
$(RECOVERY_INSTALL_OTA_KEYS)
的前面添加:
ifeq ($(TARGET_USERIMAGES_USE_UBIFS),true)
$(INSTALLED_RECOVERYIMAGE_TARGET): $(recovery_ubiformat)
endif
否則會編譯失敗!
(4). 修改後Android編譯時間降低16%~18% (資料僅供參考)
(5). 此種方法google已在4.3版本預設應用了。
(6). 僅對new有效果,但是由於沒有編譯沒有用到的模組,不僅節省時間還節省磁碟空間(節省out目錄下的中間檔案)。
2. 開啟android ccache
(1). ccache是google預設就存放在codebase的工具,對於ccache的功能可以到網路搜尋資料。
(2). 設定cache大小(這一步一定要做!!),一個codebase需要大約5G的空間,如果你的編譯環境有5個codebase在使用,那麼需要25G的空間。設定小了還會引起編譯時間延長!!
[1].GB版本:prebuilt/linux-x86/ccache/ccache -M 25G
[2].JB版本:prebuilts/misc/linux-x86/ccache/ccache -M 25G
(3). 開啟的方法:
[1].命令列增加USE_CCACHE=1即可:./mk -o=USE_CCACHE=1 n。如果是user版本開啟ccahce的話,可以這樣:./mk -o=USE_CCACHE=1,TARGET_BUILD_VARIANT=user n。
[2].建議:添加到環境變數(其他方式亦可):修改alps/makeMtk,在#!/usr/bin/perl之後建立一行,填寫$ENV{"USE_CCACHE"} = 1;
(4). 第1次編譯會花多一點時間建立cache,之後即可享受ccache帶來的好處,降低所有使用gcc的編譯時間,大約25%~30%。
[1].可以通過ccache -s查看cache資訊,如果滿了可以用ccache -C清除所有。在滿了狀態下編譯新codebase,將會舊的那個清除,這會降低效率,所以cache一定要設定正確!
(6). 對mm/new/remake android都有效果。
3. 開啟kernel ccache
(1). 以上ccache只對編譯android有效,kernel部分需要額外設定才行
(2). alps/kernel/Makefile檔案中的
S = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld.bfd
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
之後添加:
ifneq ($(USE_CCACHE),)
export CCACHE_COMPILERCHECK := content
export CCACHE_SLOPPINESS := time_macros,include_file_mtime,file_macro
export CCACHE_BASEDIR := /
ccache := $(strip $(wildcard $(PWD)/../prebuilts/misc/linux-x86/ccache/ccache))
ifdef ccache
ifneq ($(ccache),$(firstword $(CC)))
CC := $(ccache) $(CC)
endif
ccache =
endif
endif
(3). 這樣在編譯kernel時也可以享受到ccache帶來編譯時間的縮短。
提升Android編譯速度