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. Java之浅拷贝与深拷贝

    ----?浅拷贝 --- 概念 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.简单说,浅拷贝就是只复制所考虑的对象,而不复制它所引用的对象 --- 实现方 ...

  2. @ApiParam @RequestParam @PathVariable 用法

    文章来源:https://www.cnblogs.com/hello-tl/p/9204279.html 1.@ApiParam ,是注解api的参数 ,也就是用于swagger提供开发者文档 ,文档 ...

  3. 使用pymysql 操作MySQL数据库

    安装 pip install pymysql 注:连接前要有可使用的账户及有权限.可操作的数据库 先来一个栗子: import pymysql # 连接database conn = pymysql. ...

  4. 《算法导论》 — Chapter 8 线性时间排序

    序 到目前为止,关于排序的问题,前面已经介绍了很多,从插入排序.合并排序.堆排序以及快速排序,每一种都有其适用的情况,在时间和空间复杂度上各有优势.它们都有一个相同的特点,以上所有排序的结果序列,各个 ...

  5. ASP.NET Core on K8S学习初探(1)K8S单节点环境搭建

    当近期的一个App上线后,发现目前的docker实例(应用服务BFF+中台服务+工具服务)已经很多了,而我司目前没有专业的运维人员,发现运维的成本逐渐开始上来,所以容器编排也就需要提上议程.因此我决定 ...

  6. 【06】Firebug记录Javascript日志

    Firebug记录Javascript日志 你可以使用Firebug来生成日志. 这有助于我们调试web页面并发现页面的错误. 在Firefox浏览器中执行以下代码: <!DOCTYPE HTM ...

  7. pip安装requests库失败

    pip install 安装第三方插件是出现Could not fetch URL https://pypi.python.org/simple/pool/: There was a problem ...

  8. 使用 wsgiref 创建WSGI APP

    wsgify装饰器将一个普通函数转变成WSGI应用程序. class webob.dec.wsgify(func=None, RequestClass=None, args=(), kwargs=No ...

  9. 72.spring boot讨论群【从零开始学Spring Boot】

    [从零开始学习Spirng Boot-常见异常汇总] 如果您碰到什么问题,您可以加群进行探讨,在群里有加入的都是Spring Boot志同道合的朋友: Spring Boot QQ交流群:193341 ...

  10. Codeforces Round #388 (Div. 2) A+B+C!

    A. Bachgold Problem 任何一个数都可以由1和2组成,由于n是大于等于2的,也就是可以由2和3组成.要求最多的素数即素数越小越好,很明显2越多越好,如果n为奇数则再输出一个3即可. i ...