博观而约取,厚积而薄发。这篇文章主要讲述提升Android编译速度相关的知识,希望能为你提供帮助。
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一定要设置正确!
【提升Android编译速度】
(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带来编译时间的缩短。
推荐阅读
- 天地本文详解winXP系统下搜索技巧失效的处理办法
- 安装android Studio和运行react native项目(基础篇)
- Arcgis runtime sdk for android开发前要
- Android Studio- 把项目提交到SVN中操作方法
- 基于Dapper的分页实现,支持筛选,排序,结果集总数,非存储过程
- Android下的定时任务
- Xamarin.Forms Layout Challenges – Social Network App(转载)
- Android 通过局域网udp广播自动建立socket连接
- 使用create-react-app搭建react应用