android 刷机

本文详细描述了如何在Ubuntu16.04环境下安装Python3.7,配置并管理版本,以及使用repo工具下载、同步和编译AndroidOpenSourceProject(AOSP)源码,包括处理各种错误和问题的解决方案。
摘要由CSDN通过智能技术生成

基础环境
虚拟机:VMware® Workstation 16 Pro 16.0.0 build-16894299

Linux版本:ubuntu-16.04.7-desktop-amd64

设备:pixel 6a;代号:bluejay;

基础软件安装
安装 Git

命令:sudo apt install git

安装 Python 3.7

1、下载 python 3.7

命令:wget Python Release Python 3.8.17 | Python.org

2、解压 python 3.7

命令:tar xvf python.tar.gz

3、配置 python 3.7

a)进入解压好的 python 3.7 目录

命令:cd Python-3.7.17

b)执行 configure 脚本:

命令:./configure

如果执行结果中包含以下报错信息,则需要安装 openSSL:

报错:checking whether compiling and linking against OpenSSL works... no

c)安装 openSSL 相关依赖包:

命令:sudo apt install git-core libssl-dev libffi-dev gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev libz-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

安装完 openSSL 后再次执行 configure 文件可以看到此信息:

checking whether compiling and linking against OpenSSL works... yes

4、编译与安装Python3:

命令:sudo make install

配置update-alternatives

--将 python 交给 update-alternatives 管理,可随时切换软件版本

a)将 python3.7 和 phthon2.7 加入快捷管理

命令:

update-alternatives --install /usr/bin/python python python3的安装地址(/usr/local/bin/python3.7 3(权重号))

update-alternatives --install /usr/bin/python python python2的安装地址(/usr/bin/python2.7 2(权重号))

b)切换Python版本:

命令:update-alternatives --config python

repo 管理工具的下载与使用
下载安装repo

直接参考清华或中科大镜像网站的教程:

清华:AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

中科大:AOSP 镜像使用帮助 — USTC Mirror Help 文档

错误集锦

1)Downloading Repo source from https://gerrit-googlesource.proxy.ustclug.org/git-repo

fatal: unable to access 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

repo: error: "git" failed with exit status 128

cwd: /home/jacinth/WORKING_DIRECTORY/.repo/repo.tmp

cmd: ['git', 'fetch', '--quiet', '--progress', 'origin', '+refs/heads/*:refs/remotes/origin/*', '+refs/tags/*:refs/tags/*']

fatal: double check your --repo-rev setting.

fatal: cloning the git-repo repository failed, will remove '.repo/repo'

这个错误需要关闭 git 配置里的 ssl 校验,共执行两行命令:

git config --global http.sslverify false

git config --global https.sslverify false

下载及同步 AOSP 源码
初始化源码仓库

具体教程查看清华或中科大镜像网站

1、下载源码(安卓版本代号可查看网址:https://source.android.google.cn/docs/setup/about/build-numbers?hl=zh-cn)

命令:repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b 安卓版本代号

错误集锦

1)无法连接到 gerrit.googlesource.com,

解决:

编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:

REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'

2、同步源码

命令:repo sync

错误集锦

1)同步过程提示某些文件 not found,如下图:

解决:

两个镜像源互相切换使用,配置文件路径:WORKING_DIRECTORY/.repo/manifests.git/config,修改其中 url 指定的镜像地址

华科大镜像:url = git://mirrors.ustc.edu.cn/aosp/platform/manifest

清华镜像:url = https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

b)GitCommandError: read-tree: [Errno 12] Cannot allocate memory

解决:内存不足导致,调高虚拟机分配的内存

编译驱动下载及源码的编译
驱动文件下载及执行

1、找到源码对应的 ID

2、找到你的真机机型以及该 ID 对应的驱动文件(二进制)

3、下载并解压驱动文件(有些比较旧的机型,比如 Nexus,驱动可能是多个)

a)下载

命令:wget Link(驱动文件对应的链接)

b)解压

命令:tar zxvf 驱动文件.tar.gz

4、执行解压出来的 shell 脚本(如有多个脚本,需注意执行顺序,执行完成会在 vender 目录下生成对应该设备,如:bluejay 的相关文件)

命令:./extract-google_devices-bluejay.sh

源码编译

1、执行环境准备脚本

命令:source build/envsetup.sh

2、选择对应设备镜像(只输入 lunch 的话,会提供一个设备名称列表供选择,我的设备是 pixel 6a,代号“bluejay”,所以应该输入代号 4)

命令:lunch

3、开始编译

命令:make -j6(6 为进程数,根据自己的内存和处理器自行选择)

错误集锦

1)fatal error: runtime: out of memory

解决:内存不足,最开始设置虚拟机为 8g 内存,编译开始时中断已有提示最少要 16g,否则会导致某些文件配置失败,调到 21g 后还有一次出现了编译失败,后来将内存调至 24g。

备注:我这里比较粗暴,是直接调高了虚拟机配置的内存,朋友们可以自行百度“ubuntu 重新配置交换空间”来调整交换空间大小,以此提升 ubuntu 的内存。

刷机
1、检查设备是否连接

命令:adb devices

错误集锦

1)error: insufficient permissions for device(其实在 adb devices 启动服务时就可以明显看到 no permissions 的提示了,如图)

解决:

a)在终端查看插入设备 usb 的 ID,命令:lsusb,找到我们的设备 usb ID ,如图

b)进入到 /etc/udev/rules.d/ 目录下,命令:cd /etc/udev/rules.d/

c)新建一个 51-android.rules 文件,命令:sudo vim 51-android.rules

d)编辑内容,命令:sudo gedit 51-android.rules

e)加上以下内容并保存:SUBSYSTEM=="usb", ATTRS{idVendor}==" 18d1", ATTRS{idProduct}=="4ee7",MODE="0666"

f)赋予文件权限:命令:sudo chmod a+x 51-android.rules

g)拔掉usb重新插上就可以了

2、设备进入 fastboot 状态

命令:adb reboot bootloader

3、检查处于 fastboot 状态的已连接设备

命令:fastboot devices

4、解锁(包括 oem 解锁、fastboot 解锁)

相关教程参考官网:运行版本  |  Android 开源项目  |  Android Open Source Project

Tip:解锁后是会清除原先的用户数据的,unlock 之后我的汉化包、一些设置都被还原了。

a)oem 解锁在开发者选项里

b)fastboot 解锁(通过手机屏幕的提示按音量键进行选择、电源键确认)

命令:fastboot flashing unlock

备注:如果要退出 fastboot mode,命令:fastboot reboot

5、切换到 su 用户

命令:sudo -i

6、进入 fastboot 所在目录

a)查看 fastboot 目录路径

命令:which fastboot

b)进入目录,如图

命令:cd /home/jacinth/WORKING_DIRECTORY/out/host/linux-x86/bin

7、刷入

首次全部模块刷入

命令:fastboot flashall -w(-w 表示清空设备)

8、执行成功会自动重启,如图,查看手机版本为我们下载的源码版本

错误集锦

1)waiting for devices

解决:首次执行 fastboot flashall 的时候,设备还未解锁,所以尽管在 fastboot devices 下可以看到,但未解锁执行 fastboot flashall 刷机时就检测不到设备,按照步骤正常 unlock 即可。

2)error: neither -p product specified nor ANDROID_PRODUCT_OUT set

解决:

配置好环境变量

a)打开 profile 文件,命令:sudo gedit /etc/profile

b)在末尾加上环境变量的配置并保存(路径则是你下载源码的 out 目录下):

export ANDROID_PRODUCT_OUT=/home/jacinth/WORKING_DIRECTORY/out/target/product/bluejay

c)使改动生效,命令:source /etc/profile

d)使刷机环境生效,命令:source build/envsetup.sh

备注:即便设置了该环境变量,如果没有在 su 用户下执行 flashall 命令,还会报同样的错误。

3)Device product is 'bluejay'.Update requires 'oriole' or 'raven' or 'slider' or 'whitefin'.

解决:下载的驱动出错了,我在淘宝下单的是 pixel6,所以本来下载的 oriole 驱动,到货了我也没仔细看,结果到编译报错了才知道手上的是 bluejay,即 pixel6a,所以重新下载驱动文件。

4)FAILED (remote: partition (boot) not found)

解决:进入 su 用户之后,还要进入到 fastboot 目录执行 flash,否则就会出现类似的错误。这个错误查了很久百思不得其解,后来参考一篇博客才知道自己没有进入到 fastboot 目录。

博客地址:编译AOSP刷入nexus5-蒲公英云
————————————————
版权声明:本文为CSDN博主「高钙小新」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Jacinth40/article/details/133394570

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值