提升Android編譯速度

來源:互聯網
上載者:User

標籤:環境變數   dir   ini   inux   var   img   build   資訊   清除   

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編譯速度

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.