【android Framework 探究】android 13 aosp编译全记录

news2025/1/10 23:32:30

写在开始

自从关注Framework这一块儿,就有了自己编译aosp刷机的想法,模拟器当然是可以的,但是体验感还不能和真机想比,于是买一个二手piexl的想法就有了,根据预算选定piexl 5,支持最新的android 13,二手平台挑挑拣拣时间拉的有点长,不如中间就开始先编译好。

过程记录

断断续续利用下班和周末时间,终于编译成功了,下一步就等Piexl 5 到手刷机,今天把整个过程复盘一下,也记录下中间出现的错误和解决方式,方便以后查阅。

一,硬件环境

官网-要求 350G以上硬盘空间 + 16GB以上内存

我的

主机 -> Ubuntu 18.04.6 LTS (自己一直在用着)
内存 -> 16GB (thinkpad t440p ,又在网上买了两根8GB替换了之前的两根4GB)
硬盘 -> 350GB (凑这个删了不少东西)

强烈建议你提前把硬件升级,能省去不必要的麻烦,我原来8GB的内存,只要编译就能死机

二,软件环境

请根据你的Host主机,查询官网来安装所需的工具。
建立一个Linux构建环境

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

三,安装repo

1,mkdir ~/.bin
2,curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
3,chmod a+x ~/.bin/repo
4,sudo vim /etc/profile
添加下面两行

export PATH=~/.bin:$PATH
export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/

5,source /etc/profile

四,配置Git用户

wu@wu-pc:~/.bin$ git config --global user.email "your email@qq.com"
wu@wu-pc:~/.bin$ git config --global user.name "your name"

五,查看下要下载的分支

git clone https://aosp.tuna.tsinghua.edu.cn/platform/manifest
cd manifest/
git branch -a

在这里插入图片描述
查阅下官网,看看piexl 5支持的最新版本

源代码标签和构建

在这里插入图片描述

我们就下载最新的android-13.0.0_r12分支好了。

六,下载源代码

1,repo 初始化

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-13.0.0_r12

2,下载源码

repo sync -j32

3,下载驱动

找到piexl 5对应的驱动文件
官网

在这里插入图片描述下载成功后,解压到aosp源码根目录。

tar -xvzf qcom-redfin-tp1a.221005.002-e7e20f49.tgz -C ~/GitProjects/aosp/
tar -xvzf google_devices-redfin-tp1a.221005.002-3daf7ea0.tgz  -C ~/GitProjects/aosp/

解压完成后,分别运行一下解压出的脚本。

./extract-qcom-redfin.sh 
./extract-google_devices-redfin.sh 

执行完,一直enter,大概在8-e处(一不小心就按过了),手动输入” I ACCEPT “ 同意条款。

七,编译

进入源码根目录:分别执行

1,source build/envsetup.sh

2,lunch

piex 5(redfin) 对应的版本:28. aosp_redfin-userdebug

Which would you like? [aosp_arm-eng]
Pick from common choices above (e.g. 13) or specify your own (e.g. aosp_barbet-eng):

填28 ,按enter。

3,make

加不加-j参数,根据CPU性能决定,我的机器太老了,就没加,耗时11个半小时,最后艰难的成功了。
在这里插入图片描述

遇到的问题

1,下载源码报 “HTTP 503”

platform/external/glide:
fatal: unable to access ‘https://aosp.tuna.tsinghua.edu.cn/platform/external/glide/’: The requested URL returned error: 503
platform/external/glide: sleeping 4.0 seconds before retrying
error: RPC failed; HTTP 503 curl 22 The requested URL returned error: 503 Service Temporarily Unavailable
fatal: The remote end hung up unexpectedly

解决方法:repo脚本里面替换REPO_URL

 # REPO_URL = 'https://gerrit.googlesource.com/git-repo'
 REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'

2,下载源码报 “Downloading network changes failed”

error: Unable to fully sync the tree.
error: Downloading network changes failed.
Try re-running with “-j1 --fail-fast” to exit at the first error.

解决方法:晚上下,晚上下,晚上下… ,白天就是容易各种网络问题。

3,编译报错 “analyzing Android.bp files and generating ninja file at out/soong”

[ 98% 392/397] analyzing Android.bp files and generating ninja file at out/soong
FAILED: out/soong/build.ninja
cd “KaTeX parse error: Expected 'EOF', got '&' at position 49: …soong_build")" &̲& BUILDER="PWD/KaTeX parse error: Expected 'EOF', got '&' at position 50: …soong_build")" &̲& cd / && env -…BUILDER” --top “$TOP” --soong_out “out/soong” --out “out” -o out/soong/build.ninja --globListDir build --globFile out/soong/globs-build.ninja -t -l out/.module_paths/Android.bp.list --available_env out/soong/soong.environment.available --used_env out/soong/soong.environment.used.build Android.bp
Killed
00:31:16 soong bootstrap failed with: exit status 1

解决方法:1,保证16GB以上内存,加大Swap空间(我增加到了16G)(参考1,参考2)

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

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

相关文章

编码命名方式知多少

文章目录1.camel case (驼峰式)2.snake case (蛇形式)3.kebab case (烤串式)4.匈牙利命名法5.小结参考文献编码时,命名无处不在。比如我们需要对文件命令,对目录命名,对变…

m低信噪比下GPS信号的捕获算法研究,使用matlab算法进行仿真

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 GPS系统的星座部分是由21颗工作卫星和3颗在轨备用卫星组成,其高度为20183km,这24颗卫星均匀分布在6个等间隔的、相对轨道面倾角为55的近圆轨道上。 ​ GPS卫星的…

处理csv、bmp等常用数据分析操作--python

请先看思维导图,看是否包含你所需要的东西,如果没有,就可以划走了,免得浪费时间,谢谢 条条大路通罗马,我只是介绍了我掌握的这一条,不喜勿喷,谢谢。 目录 一、创建文件夹&#xff0…

一行日志,让整个文件导出服务导出内容都为空..

输出一行日志&#xff0c;却让整个文件上传服务挂了...问题分析小结问题 直接上代码&#xff0c;看看有无眼尖的小伙伴发现问题&#xff1a; // 设置参数 MultiValueMap<String, Object> param new LinkedMultiValueMap<>(); FileSystemResource resource new …

log4cpp初入门

目录下载与安装log4cpp框架CategoryAppenderLayoutPriortyOutput功能日志级别⽇志格式化⽇志输出日志回滚日志配置文件下载与安装 https://sourceforge.net/projects/log4cpp/ tar xvf log4cpp-1.1.3.tar.gz cd log4cpp ./configure make make check make install ldconfig…

轻松玩转树莓派Pico之三、Windows+Ubuntu虚拟机模式下VSCode C语言开发环境搭建

目录 1、VSCode下载与安装 2、VSCode基础插件安装 3、SSH连接与配置 4、SSH免密登录 5、Pico编译 工欲善其事&#xff0c;必先利其器。之前的介绍的Pico流程都是通过命令行编译&#xff0c;没有进行更深入的介绍&#xff0c;本文将介绍Pico的VSCode-C语言开发环境搭建与配…

Rust WASM 与 JS 计算素数性能对比

前言 刚接触Rust wasm&#xff0c;请各看官高抬贵手。 简介 根据网上资料&#xff0c;使用 wasm-pack 搭配wasm-bindgen将Rust代码编译成 wasm。 搭好环境后&#xff0c;想对比一下rust-wasm与js的性能差距。 环境 OS: Deepin 20.7.1 apricotKernel: Linux 5.15.34CPU: Int…

LeetCode单周赛第320场 AcWing周赛第78场总结

1. LeetCode单周赛第320场 1.1 数组中不等三元组的数目 1.1.1 原题链接&#xff1a;力扣https://leetcode.cn/problems/number-of-unequal-triplets-in-array/ 1.1.2 解题思路&#xff1a; 暴力遍历咯。 1.1.3 代码&#xff1a; class Solution { public:int unequalTripl…

JAVA的学习心路历程之JDK基础入门(上)

任务需要&#xff0c;需要我学java调用linux下的动态库&#xff0c;于是搜寻java知识更新这篇。 从我上大学起我就听别人说JAVA&#xff0c;不不&#xff0c;应该是初中&#xff0c;那时候流行带键盘的智能手机&#xff0c;里面有好些个游戏都是JAVA写的&#xff0c;可见JAVA有…

【JavaWeb】HTML

HTML1 HTML概念1.1 超文本1.2 标记语言2 HTML的入门程序3 HTML语法规则4 使用idea创建StaticWeb工程5 HTML的各个标签的使用5.1标题标签5.2段落标签5.3换行标签5.4无序列表标签5.5超链接标签5.6图像标签5.7块标签6.使用表格标签展示数据6.1未合并单元格6.2合并单元格-合并列6.3…

套接字+网络套接字函数+客户端大小写程序

NAT映射 一般来说&#xff1a;源主机和目的主机都属于局域网&#xff0c;也就是ip地址可能相同 但是&#xff1a;路由器一般是公网ip,即整个网络环境可见 每一个路由器会维护一个NAT映射表 路由器的ip一般是固定的公网ip路由器与把与它相连的主机&#xff1a;私有ip端口号映射…

Java-多线程-ThreadPoolExecutor

前言 前面我们讲解线程的时候&#xff0c;讲到了使用Executors创建线程池&#xff0c;但是它里面所有方法可变的参数太少&#xff0c;不能很好的进行自定义设置&#xff0c;以及以后的扩展&#xff0c;更合理的使用cpu线程的操作&#xff0c;所以使用ThreadPoolExecutor创建线程…

SpringBoot集成webservice

前言 之前在工作中&#xff0c;有时候需要去对接第三方的医院&#xff0c;而很多医院的his系统用的都是老技术&#xff08;WebService&#xff09;。一直在对接webservice接口&#xff0c;却不知道webservice接口是怎么实现的&#xff0c;这一次&#xff0c;我们来一探究竟。 …

Android Compose Bloom 项目实战 (一) : 项目说明与配置

1. 项目介绍 Bloom是谷歌 AndroidDevChallenge (Android 开发挑战赛) 中的一期活动&#xff0c;目的是为了推广Compose&#xff0c;非常适合用来练手&#xff0c;通过这个项目&#xff0c;我们可以很好的入门Compose。本文介绍了如何从零开始&#xff0c;开发这个Compose项目。…

计算机系统结构期末复习

名词解释 程序访问局部性 时间局部性是指最近被访问过的数据很可能再次被访问 空间局部性是指最近被访问过的存储空间的附近空间可能会被访问 计算机体系结构 计算机体系结构是程序员所看到的计算机属性&#xff0c;即概念性结构与功能特性 窗口重叠技术 为了能更简单、更直接…

UE5笔记【五】操作细节——光源、光线参数配置、光照图修复

设置光线重载质量模式为预览&#xff1a;可以加快重构速度。 为了更快速高效的学习&#xff0c;直接查看别人已经建好的素材实例。 在EpicGames启动器中打开示例&#xff0c;找到这个照片级渲染。查看别人建好的效果图。 创建工程以UE5版本打开。进入查看。 观察Baked和碰撞测…

MySQL常用函数大全(面试篇)

本篇文章讲解是是MySQL的函数方法&#xff0c;涵盖所有的MySQL常见的方法。主要介绍了面试常问函数。 一、数字函数二、字符串函数三、日期函数四、MySQL高级函数 &#xff08;一&#xff09;数字函数 1、ABS(x) 返回x的绝对值 2、AVG(expression) 返回一个表达式的平均值&am…

Redis分布式锁

1. 什么是分布式锁 分布式锁指的是&#xff0c;所有服务中的所有线程都去获得同一把锁&#xff0c;但只有一个线程可以成功的获得锁&#xff0c;其他没有获得锁的线程必须全部等待&#xff0c;等到获得锁的线程释放掉锁之后获得了锁才能进行操作。 Redis官网中&#xff0c;set…

中加石墨再冲刺港交所上市:2022年初至今收入为零,陈东尧为CEO

11月18日&#xff0c;中加石墨控股股份有限公司&#xff08;下称“中加石墨”&#xff09;在港交所递交招股书&#xff0c;准备在港交所主板&#xff0c;宏信为独家保荐人。据贝多财经了解&#xff0c;这是中加石墨第二次递表&#xff0c;此前曾于2022年2月28日递交上市申请材料…

通过inode结构体取到次设备号,实现LED灯的亮灭

对Linux来说&#xff0c;设备驱动也是文件。驱动控制硬件的过程&#xff0c;实际上是对驱动文件的读写操作。 对内核来说&#xff0c;如何获取唯一的文件标识呢&#xff1f;当然是通过file结构体中的&#xff0c;inode结构体识别应用层打开的到底是哪一个设备文件。 实验操作及…