首页 > 系统相关 >Ubuntu 22.04上编译Android 13 AOSP系统

Ubuntu 22.04上编译Android 13 AOSP系统

时间:2023-08-24 15:57:51浏览次数:46  
标签:13 git x86 编译 dev AOSP 22.04 64 Android

背景

因为最近空闲期,刚好遇到了一个小项目,需要AOSP系统的,因此就花费了一些时间捣鼓了一下,源码编译aosp13

环境:

vm 22.04
空间350g
内存24g
image

环境配置

以下所有操作需要全球通上网,已经安装git环境。
把Ubuntu源切到国内,下载速度快很多。

sudo apt install unzip zip libssl-dev  libffi-dev gnupg flex bison gperf build-essential  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 

开始下载repo,如果已经有可以跳过。

mkdir ~/bin
vim ~/.bashrc

# 在文件的最后添加下面一行代码,保存退出
PATH=~/bin:$PATH
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
# 生效修改

source ~/.bashrc

下载Android源码

在下载Android源码前,需要安装编译依赖库和工具下载

  1. 安装git
sudo apt-get install git

安装成功后,查看git版本

git --version

image
安装完成后,需要用如下命令进行配置,分别替换为自己的名字和邮箱(不强制真实邮箱)

git config --global user.name YourName
git config --global user.email [email protected]

查看当前git配置:

git config -l

image

  1. 创建Android源码目录:
mkdir ~/android13r35
cd ~/android13r35

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r35

repo sync -j8

  1. 编译
cd ~/android13r35
source build/envsetup.sh
export WITH_DEXPREOPT=false
lunch aosp_x86_64-eng
make -j8

下面选择自己想要的版本,如果想要启动模拟器的话,要选择sdk开头的,比如aosp_car_x86_64-userdebug是无法启动模拟器的,sdk_car_x86_64-userdebug 可以启动模拟器

lunch sdk_car_x86_64-userdebug

source build/envsetup.sh
export WITH_DEXPREOPT=false
lunch sdk_x86_64
make -j8

通过lunch指令设置编译目标,就是生成的镜像要运行在什么样的设备上,我这里是准备在模拟器上跑所以选择31(即aosp_x86_64-eng),模拟器是x86的平台,运行速度会更快。这里也可以用编译目标名称如lunch aosp_x86_64-eng,因为不同版本的编译目标名称序号并不相同。

编译目标的格式:BUILD-BUILDTYPE,比如上面的aosp_x86_64-eng的BUILD是aosp_x86_64,BUILDTYPE是eng。BUILD指的是特定功能的组合的特定名称,即表示编译出的镜像可以运行在什么环境。其中,aosp(Android Open Source Project)代表Android开源项目;arm表示系统是运行在arm架构的处理器上,arm64则是指64位arm架构处理器,x86则表示x86架构的处理器。BUILD TYPE则指的是编译类型,通常有三种:

-user:代表这是编译出的系统镜像是可以用来正式发布到市场的版本,其权限是被限制的(如,没有root权限,不能dedug等)
-userdebug:在user版本的基础上开放了root权限和debug权限。
-eng:代表engineer,也就是所谓的开发工程师的版本,拥有最大的权限(root等),此外还附带了许多debug工具。
选择完编译目标之后会打印出对应平台的编译参数。

image

这是我虚拟机编译时候的资源占用情况,CPU应该是够用的,使用率一直在100%左右,而内存消耗达到了99% 实体机32G内存,可见AOSP编译对内存要求相当高,而当我们编译到90%进度的时候,会生成大量文件,对硬盘读写速率要求也很高,我这里用固态硬盘,在生成文件时硬盘使用率一直在80%。

image

image

- croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of the modules in the current directory.
- mmm: Builds all of the modules in the supplied directories.
- cgrep: Greps on all local C/C++ files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file.
- clean - m clean 会删除此配置的所有输出和中间文件。此内容与 rm -rf out/ 相同
其中mmm指令就是用来编译指定目录.通常来说,每个目录只包含一个模块.比如这里我们要编译Setting 模块,执行指令:
mmm packages/apps/Settings/

其中mmm指令就是用来编译指定目录.通常来说,每个目录只包含一个模块.比如这里我们要编译Setting 模块,执行指令:
mmm packages/apps/Settings/

  1. 运行
    在编译完成之后,就可以通过以下命令运行Android模拟器了,命令如下:
source build/envsetup.sh 
lunch(选择刚才你设置的目标版本,比如这里我选择的是31) 
emulator

如果你是在编译完后立刻运行模拟器,由于我们之前已经执行过source及lunch命令了,因此现在你只需要执行命令就可以运行模拟器:

emulator

遇到的问题

  1. Ubuntu22.04,AOSP编译报错: libncurses.so.5: cannot open shared object file: No such file
    解决:
sudo dpkg --add-architecture i386  
sudo apt-get update
sudo apt-get install libncurses5:i386 
sudo apt-get install libncurses5-dev  libncurses5
  1. 默认情况在linux编译系统 会开启odex的
    解决:编译前关闭dex2oat
export WITH_DEXPREOPT=false

参考

https://it.cha138.com/shida/show-457152.html

https://blog.csdn.net/didayuye/article/details/130462203

https://blog.csdn.net/Doudou_Mylove/article/details/115392736

标签:13,git,x86,编译,dev,AOSP,22.04,64,Android
From: https://www.cnblogs.com/stlong/p/17645300.html

相关文章

  • 5.13 汇编语言:仿写For循环语句
    循环语句(for)是计算机编程中的一种基本控制结构,它允许程序按照指定的次数或范围重复执行一段代码块。for循环在处理需要进行迭代操作的情况下非常有用,它使得程序可以更加方便地控制循环的次数。一般来说,for循环由三个部分组成:初始化部分、条件表达式和更新部分,以及一个需要重复执行......
  • ERROR 1396 (HY000): Operation ALTER USER failed for ‘root‘@‘localhost‘
    1251clientdoesnotsupportauthenticationprotocolrequestedbyserver;considerupgradingMysqlclientERROR1396(HY000):OperationALTERUSERfailedfor'root'@'localhost'先登录mysqlmysql-uroot-p输入密码mysql>usemysql;mysql>......
  • 13. 有形资产 Fix Assets
    大部有形分资产都是有使用期限的,那么如何对资产的购入、使用及报废做准确的财务记录呢?购值成本AcquisitionCost1.资本性支出CapitalExpenditure该项计为资产。包括设备购入价、运输费、安装费、调试费等确保设备正常运转起来的费用。2.收益性支出RevenueExpenditure......
  • CF1335E1 Three Blocks Palindrome (easy version)
    思路发现一个进阶回文序列仅包含三个部分:\(x\)个连续的\(a\),\(y\)个连续的\(b\),\(x\)个连续的\(a\)。对于一个\(a\),我们一定会取最外面的两个\(a\),如果不取,则答案一定不小或不变,所以我们枚举到\(a\)的时候,一定是确定了最外围的两个\(a\)的位置。接下来再枚举\(x\)......
  • 13 秒插入 30 万条数据,我惊呆了!
    本文主要讲述通过MyBatis、JDBC等做大数据量数据插入的案例和结果。30万条数据插入插入数据库验证实体类、mapper和配置文件定义User实体mapper接口mapper.xml文件jdbc.propertiessqlMapConfig.xml不分批次直接梭哈循环逐条插入MyBatis实现插入30万条数据......
  • Node.Js 13.4.18 Docker 部署后无法访问
    将项目Next.js升级后,通过Docker部署无法访问到服务,通过dockerlogsid检查日志,发现没有任何反应,甚至一个访问请求都没看到。一开始怀疑是打包的问题,将Docker容器中的服务文件全部拉下来,在本地跑..诶嘿~正常运行...排除打包问题检查启动日志:readystartedserveron......
  • C#计算24点(1-13数字)
    Node.csnamespacecount24{classNode{publicNode(doubleval,Stringe){value=val;exp=e;}publicNode(){}publicdoublevalue;publicStringexp......
  • 13 CSS 的position属性
    13CSS的position属性就像photoshop中的图层功能会把一整张图片分层一个个图层一样,网页布局中的每一个元素也可以看成是一个个类似图层的层模型。层布局模型就是把网页中的每一个元素看成是一层一层的,然后通过定位属性position对元素进行定位摆放,最终实现网页的布局。定位属性p......
  • 自我介绍:20231301 周子昂
    自我介绍大家好!我叫周子昂,来自北京。(0)照片(1)形容词周:思绪“周”密,严谨踏实做事之前喜欢整体思考,有一定的布局。尽可能在做事时脚踏实地,认真仔细。事后反思总结经验教训,以便下次更好。子:谦谦君“子”,温和有礼待人接物有基本的礼仪与尊重。在有能力的范围内尽可能地帮助......
  • Ubuntu22.04系统下安装配置rime五笔输入法
    1、安装 1.1 sudoaptinstallibus-rime 1.2 sudoaptinstalllibrime-data-wubi2、安装后重启系统,在设置-键盘-输入源 中添加汉语,再选择 中文Rime 3、配置第一步安装好后,默认的输入法是拼音输入法,还需要我们自己设置。打开设置的方法是先把输入法调到“中文(......