11 设置高速缓存
高速缓存编译生成的信息,并在编译的特定部分使用高速缓存的信息(如头文件),这样就节省了通常使用cpp解析这些信息所需要的时间。
可选的,建议配置,以节省编译时间
方法:在.bashrc中添加
export USE_CCACHE=1
默认情况下,高速缓存保存在~/.ccache,建议设置缓存大小为50-100G
如果主目录位于NFS或其他非本地文件系统上,要将下面语句添加到.bashrc中,之后保存并退出:
export CCACHE_DIR=<path-to-your-cache-directory>
<path-to-your-cache-directory>修改为cache目录的位置
下载完代码后运行
prebuilt/linux-x86/ccache/ccache -M 50G
介于android中c与c++文件数量能占到刚不到一半,所以这个速度还是能省下很多的。
看到原理大概也就是知道这个东西第一次编译是没有效果的,只有开启ccache后编译一次后就会有效果。
使用方式:
添加环境变量:
1.$ export USE_CCACHE=1
#建立缓存目录
2.$ export CCACHE_DIR=~/.ccache
设置缓存大小:
3.$cd android/
4.$prebuilt/linux-x86/ccache/ccache -M 20G
12、验证git标签
将以下公共密钥加载到本地GnuPG密钥数据库
$ gpg –import
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.2.2 (GNU/Linux) mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7 8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq
……
或者
gpg -import xiaolang.asc xiaolang.asc 是备份密钥的文件
GnuPG密钥是利用“公共密钥途径”来加密的。信息只有在加密之后才被发送。加密的信息只能使用接受者持有的私人密钥才能解密。使用GnuPG密钥可以使网站和互联网之间的信息交互更加安全。
13 编译
1、初始化
使用envsetup.sh初始化安装环境:$ source build/envsetup.sh
加载device目录下的环境信息
source命令介绍
source FileName 作用:在当前bash环境下读取并执行FileName中的命令。 注:该命令通常用命令“.”来替代。 如:source .bash_rc 与 . .bash_rc 是等效的。 注意:source命令与shell scripts的区别是, source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。
2 编译
选择编译目标:$ lunchfull-eng 选择编译厂商版本。
当然这里的lunch full-eng是编译所有,如果嫌慢,就单独编译某一个也可。
$ lunch
3.编译
-》mm 编译版本
或者
$ make –jN
编译输出
在编译完整个项目后,终端会出现如下提示:
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
Install system fs image:out/target/product/generic/system.img
Target ram disk: out/target/product/generic/ramdisk.img
Target userdatafs image:out/target/product/generic/userdata.img
Installed file list: out/target/product/generic/installed-files.txt
out 文件夹下是编译结果
编完之后,即修改了Android系统以后,可以使用$ makesnod重新生成 system.img
-》编译内核
1、可以直接使用已经编译好的内核,从其他刷机包提取
2、自己编译
选择并下载编译版本
$ git clonehttps://android.googlesource.com/device/ti/panda
$ cd panda
$ git log kernel
下载资源
$ git clone https://android.googlesource.com/kernel/common.git
$ git clone https://android.googlesource.com/kernel/exynos.git
$ git clone https://android.googlesource.com/kernel/goldfish.git
$ git clone https://android.googlesource.com/kernel/msm.git
$ git clone https://android.googlesource.com/kernel/omap.git
$ git clone https://android.googlesource.com/kernel/samsung.git
$ git clone https://android.googlesource.com/kernel/tegra.git
Goldfish包含内核平台的仿真。
Msm有ADP1、ADP2、Nexus One的资源,并可工作在高通MSM芯片组。
Samsung用于NexusS,并可工作在三星 Hummingbird芯片组。
Tegra用于Xoom和Nexus 7,并可工作在NVIDIATegra芯片组。
Exynos可工作在三星Exynos芯片组
3、下载预编译工具
$ git clonehttps://android.googlesource.com/platform/prebuilt
$ export PATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
4、编译
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-
$ cd omap
$ git branch –a(查看可选版本)
$ git checkout <commit_from_first_step>
$ make panda_defconfig
$ make
如果要编译tuna kernel,只需要将panda替换为tuna
maguro kernel是device/samsung/tuna/kernel
crespoand crespo4g kernel是device/samsung/crespo/kernel
stingray and wingray kernel是device/moto/wingray/kernel
14 运行
进入fastboot模式,可以使用adb shell或者组合键
$ adb reboot bootloader
$ fastboot flash all –w -w选项是清除/data数据
$ fastboot flash boot boot.img
$ fastboot flash system system.img
在安卓手机中fastboot是一种比recovery更底层的刷机模式。
fastboot是一种线刷,就是使用USB数据线连接手机的一种刷机模式。相对于某些系统(如小米)卡刷来说,线刷更可靠,安全。
recovery是一种卡刷,就是将刷机包放在sd卡上,然后在recovery中刷机的模式。
fastboot flash <分区名> [ <文件名> ] 将文件写入分区.
文件必须正确的格式.分区名有但不限于system,recovery,boot,splash1,hboot,radio,userdata,cache
-w 清空用户数据分区和缓存分区.相当于recvery中的"wipe data/factoryreset"
$ emulator