ubutu android 编译 二

本文介绍了如何使用ccache加速Android项目的编译过程,包括配置ccache、编译内核及模拟运行等内容。同时,还提供了关于验证git标签及使用GnuPG密钥的安全措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
文件夹下是编译结果



-在修改了某一个模块以后,
-可以使用$mmm <目录来重新编译所有在<目录>中的所有模块,
-使用 $ mm 编译当前目录中的所有模块。
编完之后,即修改了
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包含内核平台的仿真。

MsmADP1ADP2Nexus One的资源,并可工作在高通MSM芯片组。

Samsung用于NexusS,并可工作在三星 Hummingbird芯片组。

Tegra用于XoomNexus 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 kerneldevice/samsung/tuna/kernel

 crespoand crespo4g kerneldevice/samsung/crespo/kernel

 stingray and wingray kerneldevice/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"

分区解释:
system:系统分区.我们刷机器一般就是刷的这个分区.
userdata:数据分区.
cache:缓存分区
recovery:Recovery分区.
boot:存放内核和ramdisk的分区.
hboot:这个是SPL所在的分区.很重要哦.也是fastboot所在的分区.刷错就真的变砖了.
splash1:这个就是开机第一屏幕了.
radio:这个是无线所在的分区.


请参考

-》模拟

$ emulator



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值