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编译速度的更多相关文章

  1. Android提升Gradle编译速度或减少Gradle编译时间.md

    目录 Android如何提升Gradle编译速度或减少Gradle编译时间 最终优化方案 优化效果比对 将所有项目源码,各种缓存临时目录都移动到高性能SSD磁盘上 gradle.properties ...

  2. 转: 加快Android编译速度

    转: http://timeszoro.xyz/2015/11/25/%E5%8A%A0%E5%BF%ABandroid%E7%BC%96%E8%AF%91%E9%80%9F%E5%BA%A6/ 加快 ...

  3. webpack4提升180%编译速度

    前言 对于现在的前端项目而言,编译发布几乎是必需操作,有的编译只需要几秒钟,快如闪电,有的却需要10分钟,甚至更多,慢如蜗牛.特别是线上热修复时,分秒必争,响应速度直接影响了用户体验,用户不会有耐心等 ...

  4. 使用 IncrediBuild 提升 VisualStudio 编译速度

    我现在有一个 100M 的代码,需要快速去编译他,我寻找了很多方法,本文记录我找到的 IncrediBuild 用于提交编译速度. 如果一个项目存在很多不相互依赖的项目,那么使用 IncrediBui ...

  5. 使用ant优化android项目编译速度,提高工作效率

    1.Android项目编译周期长,编译项目命令取消困难 2.在进行Android项目的编译的同时,Eclipse锁定工作区不能进行修改操作 3.在只进行资源文件的修改时,Eclipse对资源文件的修改 ...

  6. Android编译优化系列-kapt篇

    作者:字节跳动终端技术---王龙海 封光 兰军健 一.背景 本文是编译优化系列文章之 kapt 优化篇,后续还会有 build cache, kotlin, dex 优化等文章,敬请期待.本文由Cli ...

  7. 2019-3-15-在-Windows-Defender-设置文件夹白名单提升-VisualStudio-编译速度

    title author date CreateTime categories 在 Windows Defender 设置文件夹白名单提升 VisualStudio 编译速度 lindexi 2019 ...

  8. 【转】实践最有效的提高Android Studio运行、编译速度方案

    原文:https://blog.csdn.net/xwh_1230/article/details/60961723 实践最有效的提高Android Studio运行.编译速度方案 最有效提升Andr ...

  9. JavaScript的工作原理:解析、抽象语法树(AST)+ 提升编译速度5个技巧

    这是专门探索 JavaScript 及其所构建的组件的系列文章的第 14 篇. 如果你错过了前面的章节,可以在这里找到它们: JavaScript 是如何工作的:引擎,运行时和调用堆栈的概述! Jav ...

随机推荐

  1. Moebius for SQLServer负载均衡

    搞数据库的都知道:在Oracle上有RAC集群,MySQL也有对应的方案,而SQL Server上直到SQL Server 2012版本的AlwaysOn到来,微软都没有提供一个负载均衡方案,在网上看 ...

  2. saltstack入门个人笔记

    offical website reference1 reference2 install apt-get install python-software-properties apt install ...

  3. ios字体简单设定

    UILabel *lable = [[UILabel alloc] init]; label.font = [];

  4. SMTP error 554 !!

    哇,我真的amazing, incredible!! 我只是想写一个简单的邮件,结果他一直报554错误!!! 期间,通过百度,我发现了可能导致 此,讨厌至极的错误,有N多原因: 但我的原因 谜之离谱! ...

  5. 剑指Offer(书):剪绳子

    题目:给你一根长度为n的绳子,请把绳子剪成m段,每段绳子的长度记为k[0],k[1]....,k[m].请问k[0]xk[1]x...,k[m]可能的最大乘积是多少.例如:长度为8剪成2 3 3 得到 ...

  6. ssm+activiti+maven

    1spring整合activiti中添加activiti依赖 <!-- 添加Activiti支持 --> <dependency> <groupId>org.act ...

  7. HDU 1242 Rescue 营救天使

    Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is describe ...

  8. HDU 1166 排兵布阵(线段树单点更新)

    题意: 给定n个兵营的士兵初始值, 然后有最多40000个操作: 操作一共有两种, 一个是查询给定[a,b]区间兵营的士兵总和. 另一个是增加/减少指定兵营的士兵数目. 输出每次查询的值. 分析: 线 ...

  9. 【7.1.1】ELK日志系统单体搭建

    ELK是什么? 一般来说,为了提高服务可用性,服务器需要部署多个实例,每个实例都是负载均衡转发的后的,如果还用老办法登录服务器去tail -f xxx.log,有很大可能错误日志未出现在当前服务器中, ...

  10. 最近切的两题SCC的tarjan POJ1236 POJ2186

    两题都是水题,1236第一问求缩点后入度为0的点数,第二问即至少添加多少条边使全图强连通,属于经典做法,具体可以看白书 POJ2186即求缩点后出度为0的那个唯一的点所包含的点数(即SCC里有多少点) ...