ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

对google手机编译android源码刷机

2021-03-28 13:58:26  阅读:263  来源: 互联网

标签:git repo 编译 blueline 源码 google android Android


一.简介

最近因为修改系统源码层某功能的代码,对多个版本的系统源码进行了编译,并刷到手机中。如果是单纯研究Android源码或Android手机系统层的某个功能,以google原生Android手机和源码为研究对象再适合不过了,因为google官方给出了很全面的源码编译/刷机等说明文档。
编译和刷机常使用到的google提供的链接记录如下,后面章节也会进一步说明以下链接:

  1. 下载源代码,下载前需要先安装repo:安装 Repo。国内推荐使用开源网站的镜像源,例如:清华大学开源软件镜像站-Android 镜像使用帮助
  2. 搭建构建环境
  3. 代号、标记和 Build 号
  4. Driver Binaries for Nexus and Pixel Devices
  5. 编译 Android
  6. Factory Images for Nexus and Pixel Devices(google提供的Nexus和pixel刷机包)
  7. 刷写设备

二.源码下载和编译

1. 下载repo:

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
#或者从清华源下载
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
#或科大源下载
curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo

参考:
清华大学开源软件镜像站
LUG @ USTC-AOSP(Android) 镜像使用帮助
repo的运行过程中会尝试访问官方的git源更新自己,但使用google原生的 REPO_URL 需要翻墙或者翻墙,下载速度也很慢,因此需要将repo中REPO_URL替换如下:

REPO_URL = ‘https://gerrit.googlesource.com/git-repo’ 替换成
REPO_URL = ‘https://mirrors.tuna.tsinghua.edu.cn/git/git-repo’ (清华源)或
REPO_URL = ‘https://gerrit-googlesource.proxy.ustclug.org/git-repo’ (科大源)
如果有其它镜像源提供Android源码下载,也可以使用其他的。

如果不想改repo文件,可直接将REPO_URL 作为环境变量使用。
在这里插入图片描述
可以将如下内容复制到你的~/.bashrc里:
export REPO_URL=‘https://mirrors.tuna.tsinghua.edu.cn/git/git-repo’ 或
export REPO_URL = ‘https://gerrit-googlesource.proxy.ustclug.org/git-repo’
之后重启命令行或者source ~/.bashrc后使用。以下章节都是以清华源为例,科大源也是类似。

2. 下载Android源码

# 默认下载最新的Android版本
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
#如果需要某个特定的 Android 版本:
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-4.0.1_r1
#同步源码树(以后只需执行这条命令来同步):
repo sync

代号、标记和 Build 号 :下载的Android版本一定要支持对应的刷机设备,如下图。
在这里插入图片描述
另外,Build号(如 RQ1D.210105.003)也很重要,因为需要通过这个字符串到Driver Binaries for Nexus and Pixel Devices中查看Nexus 或 Pixel的驱动文件,然后将这些文件加到系统源码根目录一起编译,才能将最终编译成的镜像刷到Nexus 或 Pixel设备中,详细加入方法参考本文编译章节。
在这里插入图片描述
另外,清华镜像源网站也提供了初始化包的方法下载Android源码,使用方法如下:

wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP   # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码

由于首次同步需要下载约 95GB 数据,过程中任何网络故障都可能造成同步失败,清华镜像源网站强烈建议您使用初始化包进行初始化。
注明: 目前python版本需要3.6及以上版本。

3. 编译系统源码

1)搭建编译环境

参照搭建构建环境搭建编译环境;

2)加入刷机必须的驱动文件

以下以pixel3 中刷入 android11源码为例。
(1)首先在代号、标记和 Build 号查找android 11中支持pixel 3手机的源码列表,支持pixel 3的Android列表有:android-11.0.0_r28,android-11.0.0_r27,android-11.0.0_r23,android-11.0.0_r18,android-11.0.0_r17,android-11.0.0_r4,android-11.0.0_r1,这里以android-11.0.0_r23为例,下载源码时指定该版本:repo init -u *** -b android-11.0.0_r23。
在这里插入图片描述
(2)查找驱动文件并安装运行
查找网址:Driver Binaries for Nexus and Pixel Devices
通过android-11.0.0_r23的build号“RQ1A.201205.003.A1”查找,如下:
在这里插入图片描述
下载下来后,是两个tgz压缩文件,解压后对应两个sh脚本文件extract-google_devices-blueline.sh和extract-qcom-blueline.sh,将sh脚本拷贝到系统源码根目录,依次运行:

./extract-google_devices-blueline.sh
./extract-qcom-blueline.sh

在这里插入图片描述
**注明:**如果不加驱动文件,系统源码也是可以在lunch 选择 aosp_blueline-userdebug 编译的,但是会没有vendor.img镜像。并且将编译后的镜像试过刷到pixel3手机,但没有成功。

3)编译

参考:编译 Android

source build/envsetup.sh
# 或
. build/envsetup.sh
lunch
#选项中选择 aosp_blueline-userdebug 对应的序号
make -j8 #后面数字可相应更改

4.刷机

如果手机bootloader还未解锁,参考:解锁引导加载程序解锁设备。
注意: 最好是使用最新版本的platform-tools,不然可能会导致刷机不成功。
1)在编译安卓源码的电脑上刷机

#系统根目录
. build/envsetup.sh
lunch
#选项中选择 aosp_blueline-userdebug 对应的序号
adb reboot bootloader  
cd $ANDROID_PRODUCT_OUT
fastboot flashall -w

2)制作刷机包
如果需要将编译好的镜像给到他人使用,还是需要制作成刷机包。官网刷机包地址:Factory Images for Nexus and Pixel Devices
在这里插入图片描述
下载一个官方的同型号(pixel3 Android11)的刷机包,可以发现里面的内容如下:
刷机包内容如下:
在这里插入图片描述
image-blueline-rp1a.201105.002.zip中内容:

在这里插入图片描述
脚本中内容如下(本人使用的刷机环境是windows刷机,因此以flash-all.bat为例):

@ECHO OFF
PATH=%PATH%;"%SYSTEMROOT%\System32"
fastboot flash bootloader bootloader-blueline-b1c1-0.3-6623201.img
fastboot reboot-bootloader
ping -n 5 127.0.0.1 >nul
fastboot flash radio radio-blueline-g845-00107-200702-b-6648703.img
fastboot reboot-bootloader
ping -n 5 127.0.0.1 >nul
fastboot -w update image-blueline-rp1a.201105.002.zip

echo Press any key to exit...
pause >nul
exit

编译好的镜像内容中也包含以上文件,如下替换:

  1. bootloader-blueline-b1c1-0.3-6623201.img替换成bootloader.img
  2. radio-blueline-g845-00107-200702-b-6648703.img替换成radio.img
  3. update image-blueline-rp1a.201105.002.zip压缩包中的10个文件在最后的镜像中都包含同名称文件,直接使用那些文件压缩成一个zip格式的压缩包(是对10个文件选中后压缩,不能所在的文件夹压缩,不然就会和原版的对不上)
  4. 脚本中的相应文件名称改成对应的名称
  5. 对pixel3手机运行adb reboot bootloader后,再执行flash-all.bat 亲测可刷机成功。

在这里插入图片描述

标签:git,repo,编译,blueline,源码,google,android,Android
来源: https://blog.csdn.net/Denny_Chen_/article/details/115272053

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有