提升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一定要设置正确!
(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编译速度的更多相关文章
- Android提升Gradle编译速度或减少Gradle编译时间.md
目录 Android如何提升Gradle编译速度或减少Gradle编译时间 最终优化方案 优化效果比对 将所有项目源码,各种缓存临时目录都移动到高性能SSD磁盘上 gradle.properties ...
- 转: 加快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/ 加快 ...
- webpack4提升180%编译速度
前言 对于现在的前端项目而言,编译发布几乎是必需操作,有的编译只需要几秒钟,快如闪电,有的却需要10分钟,甚至更多,慢如蜗牛.特别是线上热修复时,分秒必争,响应速度直接影响了用户体验,用户不会有耐心等 ...
- 使用 IncrediBuild 提升 VisualStudio 编译速度
我现在有一个 100M 的代码,需要快速去编译他,我寻找了很多方法,本文记录我找到的 IncrediBuild 用于提交编译速度. 如果一个项目存在很多不相互依赖的项目,那么使用 IncrediBui ...
- 使用ant优化android项目编译速度,提高工作效率
1.Android项目编译周期长,编译项目命令取消困难 2.在进行Android项目的编译的同时,Eclipse锁定工作区不能进行修改操作 3.在只进行资源文件的修改时,Eclipse对资源文件的修改 ...
- Android编译优化系列-kapt篇
作者:字节跳动终端技术---王龙海 封光 兰军健 一.背景 本文是编译优化系列文章之 kapt 优化篇,后续还会有 build cache, kotlin, dex 优化等文章,敬请期待.本文由Cli ...
- 2019-3-15-在-Windows-Defender-设置文件夹白名单提升-VisualStudio-编译速度
title author date CreateTime categories 在 Windows Defender 设置文件夹白名单提升 VisualStudio 编译速度 lindexi 2019 ...
- 【转】实践最有效的提高Android Studio运行、编译速度方案
原文:https://blog.csdn.net/xwh_1230/article/details/60961723 实践最有效的提高Android Studio运行.编译速度方案 最有效提升Andr ...
- JavaScript的工作原理:解析、抽象语法树(AST)+ 提升编译速度5个技巧
这是专门探索 JavaScript 及其所构建的组件的系列文章的第 14 篇. 如果你错过了前面的章节,可以在这里找到它们: JavaScript 是如何工作的:引擎,运行时和调用堆栈的概述! Jav ...
随机推荐
- 如何使用MySQL一个表中的字段更新另一个表中字段
[本文出自:https://www.jb51.net/article/150323.htm] 这篇文章主要介绍了如何使用MySQL一个表中的字段更新另一个表中字段,需要的朋友可以参考下 1,修改1列 ...
- 如何用纯 CSS 创作一种有削铁如泥感觉的菜单导航特效
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/XqYroe 可交互视频教 ...
- svn基本使用详情
1.增加(Add)先提到变更列表中,再commit到配置库中,选择新增文件,右键SVN菜单执行“Add“操作提交到”变更列表中”,然后右键SVN菜单执行”SVNCommit”提交到版本库中. 2.删除 ...
- 剑指Offer(书):重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2, ...
- JQuery中如何查找某种类型的所有元素&选择器
更多的是,有关于选择器的内容. 背景:查找某控件中所有的input元素,代码如下: $("#div1").find("input").each(function ...
- PS学习笔记(01)
[1]PS,文件-脚本-删除所有的空图层. [2]设计师与美工的区别? 设计在于有思路了再去找素材, 美工在于有素材后再去设计 (思路是在大量的设计上,才累计出来的.) [3]如何知道一张图片 ...
- luogu3960 列队
参考这篇 #include <iostream> #include <cstdio> #include <vector> using namespace std; ...
- IDEA+Tomcat热部署自动编译
https://www.cnblogs.com/1024zy/p/6344000.html 之前太傻瓜了,一直以为用了IDEA改了类或者js的时候全都要手动构建发布,其实不用,IDEA这么好的工具怎么 ...
- Leetcode 312.戳气球
戳气球 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.每当你戳破一个气球 i 时,你可以获得 nums[left] * n ...
- zoj 2947 Abbreviation
Abbreviation Time Limit: 2 Seconds Memory Limit: 65536 KB When a Little White meets another Lit ...