记一次 Android 源码编译刷机过程

news2025/2/24 18:59:32

0 背景

  为了能在开发设备上运行 adb root 命令得到 root 权限,获得更加强大的调试能力、开发体验,方便以后阅读源码时 Debug 跟踪、进行定制化开发,需要编译 Android 源码 userdebug 版本并刷入手机当中。

1 准备

1.1 硬盘

  首先 Android 源码占用内存很大,一般占用 200、300 G,恰逢固态硬盘降价,花费 400 置入了 1T 的 PCIE 4.0 固态硬盘。主板只有一个 M.2 插槽,于是买了一个 M.2 固态硬盘转接卡。

1.2 手机

  自己是想刷 Android 13 版本的,并且考虑到手机的流畅程度以及成本,花费 650 置入了 O 版(能够开启 BootLoader)的 Pixel 4。 Pixel 4 有 90 hz的刷新率,且能刷 Android 13 的代码。
  将 Android 源码某条分支的源码编译出 img 文件并刷入手机中,是需要 Google 提供的驱动文件的
比如 Pixel 4 可以刷的 Android 13 分支就有四条分支,我选择了其中的 TP1A.220624.014 ,对应是 android-13.0.0_r1 分支。
在这里插入图片描述
某台设备有什么分支可以刷可以参考一下链接:
Nexus 和 Pixel 的驱动程序二进制文件
BuildId 与 Android 源码分支的对应信息

1.3 Ubuntu 系统

  尝试在 Windows 系统的 Ubuntu 子系统上操作,但没成功,于是使用 UltraISO 刻录 Ubuntu 系统盘,给新买的硬盘刷了个 Ubuntu 系统,在新系统上进行操作。就是每次开机需要按 F12 进入 BIOS 选择系统。
  在 /etc/udev/rules.d 目录下添加 udev 规则包。否则当使用 adb 指令时会提示权限不足。

1.4 环境搭建

  下载代码需要用到 git 工具、repo 工具、编译环境
git 工具

sudo apt-get install git
git config --global user.email "test@test.com"
git config --global user.name "test"

repo

mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo > ~/bin/repo
chmod a+x ~/bin/repo
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo

编译环境

#jdk 在 Android 源码 prebuilts/jdk 中有,建议直接设置环境变量,而不是直接用 apt-get 安装
#sudo apt-get install openjdk-8-jdk
#sudo apt-get install openjdk-8-jre


# 下列安装,可能会出问题,直接百度即可解决。问题比较容易处理
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
sudo apt-get install libssl-dev

1.5 源码及驱动代码代码下载

git 安装

sudo apt-get install git
git config --global user.email "xxx@xx.com"
git config --global user.name "xxx"

repo 安装

mkdir ~/bin
# 下载 repo 文件
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo > ~/bin/repo
# 添加权限
chmod a+x ~/bin/repo

代码下载

# 配置 repo 的临时环境变量
PATH=~/bin:$PATH
# 下载想要下载的分支 
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-13.0.0_r1
# 同步代码
repo sync -j4

下载驱动文件
  在网址 Nexus 和 Pixel 的驱动程序二进制文件 中我们根据所选分支下载对应的驱动程序。比如这次 pixel4 选的 TP1A.220624.014。对应的是
在这里插入图片描述
  将驱动程序(sh脚本文件)下载解压并执行,执行之后多出 vendor 目录
在这里插入图片描述
注意: 如果不添加这个驱动程序,全编 AOSP 生成的镜像会缺少一些 img 文件。

1.6 全编代码

在 AOSP 目录下

source build/envsetup.sh
lunch
# 要编译的是 flame-userdebug,根据情况这里我选了 22
22
make -j4

  但是真正编译时会遇到一些问题,在百度了之后无非要修改 swap 的大小。还有 jdk 版本的问题,这时根据情况使用 aosp 中的即可。
在这里插入图片描述
编译成功之后的镜像文件在"/out/target/product/手机型号/" 目录下。
在这里插入图片描述

1.7 安装 android studio, 并将镜像刷入 Pixel 设备中

  因为要用到 adb,fastboot 等工具。下载 android studio 工具后就有。不用专门去找这些东西。下载之后在 .bashrc 文件中添加环境变量

export PATH=$PATH:/home/xxx/Android/Sdk/platform-tools

  让手机进入 bootloader

# 进入bootloader模式
adb reboot bootloader

  手机界面显示 bootloader模式之后,在 “/out/target/product/手机型号/” 目录下

export ANDROID_PRODUCT_OUT=./
# 自动刷入 -w双清 
fastboot flashall -w
 
# 等刷入之后,重启手机
fastboot reboot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/568272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新星计划 Electron+vue2 桌面应用 2 项目编写

练手的项目,需求简单,打算做平面设计社交类的软件。 一、需求 练手用,简单处理,写个简单的记事本,本地保存txt,能导出为其他格式的文件。 获取用户的网卡地址用于数据加密,本地保存加密后的文…

想变身“科技型”企业?掌汇云数字化服务平台为工业升级加分

40万亿元!占GDP比重达到33.2%,这就是国新办公布的2022年数据,中国工业可以说是当之无愧的支柱产业。 中国工业规模大、覆盖面广,企业员工众多,项目遍及海内外。但由于科技欠发达、信息不流通等因素,近些年…

IDEA中 lombok不生效解决方法

目录 前言: springboot启动的时候报错, 说没有lombok编译器 第一步: 检查插件lombok是否存在 第二步: 查看springboot 官方推荐的lombok版本 -> 2.1 第一步 找到这个parent ctrl点进去 -> 2.2 在点红框位置 进去 -> 2.3 ctrlf 搜索一下 lombok.version 复制这个…

[论文评析]mixup: B EYOND E MPIRICAL R ISK M INIMIZATION, ICLR 2018,

mixup: B EYOND E MPIRICAL R ISK M INIMIZATION 介绍MixupMixup的提出动机Mixup与常规数据增广方法的区别References 介绍 采用ERM训练的模型往往存在泛化能力差的情形-可能是在简单的记忆样本, 对于噪声干扰的鲁棒性很差. 这篇论文提出了一种新的数据增广方法-Mixup, 这里主…

【ChatGPT】不会用ChatGPT?这几个镜像网站解决你的烦恼。

个人主页:【😊个人主页】 文章目录 前言ChatGPT介绍WoChatA TalkChatGPT Next WebAI EDUCHATGPTSITES 前言 还在为需要魔法才能与ChatGPT见上一面而叹息吗,今我就为大家汇总了国内能使用ChatGPT的方法。 也就是用国内的镜像网站玩ChatGPT&…

javaWeb 酒店民宿预定信息管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh酒店民宿预定信息管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为T…

2023阿里云学生服务器权益,含Clouder认证:云服务器ECS答案

文章目录 阿里云学生权益(服务器使用7个月)1、高校计划续费任务 - 飞天加速计划3.0(2个任务)2、任务1:完成实验《ECS云服务器新手上路》2.2: 续费6个月 3、任务2:Apsara Clouder云计算专项技能认…

【多线程】线程的可见性

目录 一、什么是线程的可见性二、可见性问题示例2.1 代码2.2 截图 三、解决可见性问题3.1 volatile关键字3.2 synchronized关键字 四、用volatile关键字解决可见性问题示例4.1 代码4.2 截图 五、用synchronized关键字解决可见性问题示例5.1 代码5.2 截图 六、可见性与原子性 一…

( 数组) 59. 螺旋矩阵 II ——【Leetcode每日一题】

❓59. 螺旋矩阵 II 难度:中等 给你一个正整数 n ,生成一个包含 1 到 n 2 n^2 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5…

如何动态显示物品提示?

UE5 插件开发指南 前言0 提示信息窗口类前言 为了使物品的排列简洁,各种游戏里的物品信息都是以提示的形式展示出来,而不是整个铺排陈列,只需要玩家鼠标悬停在物品上就自动显示出提示窗口,如下图所示: 这些提示信息在物品定义数据资产中已经定义了,所以这里要做的只是将…

大数据赋能商业地产研策

商业地产是城市经济的重要支柱,也是城市形象的重要名片。在消费者需求日益多元和个性化的背景下,商业地产面临着激烈的市场竞争和运营效率的挑战。如何在复杂多变的市场环境中,做出科学合理的投资决策和运营策略,是商业地产企业的…

Emacs之高效切换窗口(九十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

软件测试:功能测试----测试范围和测试策略

一、前言 什么是软件测试?测试能够给我们带来什么?对于企业有什么好处? 软件测试,说的直白就是找bug,而针对的就是我们使用的一些app,网页,系统等等。与之而来的还有硬件测试,这里…

【自动化测试】Java+Selenium自动化测试环境搭建

本主要介绍以Java为基础,搭建Selenium自动化测试环境,并且实现代码编写的过程。 1.Selenium介绍 Selenium 1.0 包含 core、IDE、RC、grid 四部分,selenium 2.0 则是在两位大牛偶遇相互沟通决定把面向对象结构化(OOPP&#xff09…

微软 Build 2023:人工智能重新定义软件开发与工作的未来

2023年5月23日,美国华盛顿州西雅图 —— 微软年度开发者大会Build 2023在西雅图开幕,面对当今由AI引领的技术趋势,微软向超过20万名注册参会的开发者集中展示人工智能如何给软件开发的对象、过程和工具带来巨大变革,并重新定义工作…

MVC框架实现用户登录注册功能(连接数据库)

目录 一、简单理解MVC框架 二、项目结构 三、项目源码 3.1 User 3.2 UserDao 3.3 RegisterDao 3.4 servletControll 3.5 servletControllRegister 3.6 web.xml 3.7 login.jsp 3.8 register.jsp 3.9 success.jsp 3.10 failure.jsp 四、实现效果 总结 前言 本篇文…

vue 3 第二十六章:样式(scoped及样式穿透)

文章目录 1. 介绍2. 基本使用3. scoped原理4. 穿透选择器修改全局样式 1. 介绍 在 Vue 中&#xff0c;我们可以使用 scoped 特性来给组件的样式添加作用域。通过为组件的 <style> 标签添加 scoped 特性&#xff0c;我们可以确保组件的样式仅应用于该组件的模板中&#x…

第56章:socket介绍

socket允许位于同一主机&#xff08;计算机&#xff09;或使用网络连接起来的不同主机上的应用程序之间交换数据 概述 在一个典型的客户端/服务器场景中&#xff0c;应用程序使用socket 进行通信的方式如下&#xff1a; 各个应用程序创建一个socket。socket 是一个允许通信的…

项目压测相关

几个重要指标的关系 QPS 并发数/平均响应时间 并发数 QPS*平均响应时间 也就是说&#xff0c;并发连接数代表服务器抗压能力&#xff0c;接收连接的能力。qps代表在相同的并发数下&#xff0c;服务器处理的速度&#xff0c;响应时间越短&#xff0c;那么qps就越大。 不是说并发…

Unity Lightmapping Setting

如下图&#xff1a; Lightmapper: 使用什么硬件或算法渲染 Progressive CPU、Progressive GPU、Enlighten(新的算放目前用的比较少) 此数值会被用于分别乘以Direct Samples&#xff0c;Indirect Samples和Environment Samples这三个数值。这三个数值会被应用于…