环境准备
操作系统
编译Android源码需要一个区分文件大小写的系统环境,一般使用Ubuntu,可以采用单独安装Ubuntu、虚拟机等形式。这里使用VMware虚拟机的形式,具体安装过程省略,虚拟机及Ubuntu下载地址如下:
Download VMware Workstation Pro | CN
https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html
下载Ubuntu,目前最新的长期支持版本是22.04.1 LTS
https://cn.ubuntu.com/download/desktop
环境配置
安装Ubuntu后,打开“终端”
安装和配置git
$ sudo apt install git
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
配置python
Ubuntu 22.04.1已内置python3,安装位置在/usr/bin/python3.10,这个路径后面有用到。可以使用python3 --version命令查看python3版本,我查到的版本是3.10.6。
网上资料说下载Android源码需要python3,编译编码需要python2,所以还需要安装python2
$ sudo apt install python2-minimal
$ python2 --version
Python 2.7.18
经查询,python2的安装路径为/usr/bin/python2.7。因为系统中安装了多个python版本,需要使用update-alternatives来切换版本,update-alternatives是Linux上的一个版本管理工具,--install
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 3
update-alternatives后面按顺序共5个参数,其中:
第一个参数--install表示向update-alternatives注册服务名。
第二个参数/usr/bin/python是注册的最终地址,以后管理就是管理这个软链
第三个参数python为服务名
第四个参数为被管理命令的绝对路径
第五个参数为优先级,数字越大优先级越高
配置完毕后,可以使用python --version查看当前使用的python版本
查看python配置
$ update-alternatives --display python
python - 手动模式
最佳链接版本为 /usr/bin/python3.10
链接目前指向 /usr/bin/python3.10
链接 python 指向 /usr/bin/python
/usr/bin/python2.7 - 优先级 2
/usr/bin/python3.10 - 优先级 3
选择python版本
后面如果需要切换python版本,执行如下命令
$ sudo update-alternatives --config python
有 2 个候选项可用于替换 python (提供 /usr/bin/python)。
选择 路径 优先级 状态
------------------------------------------------------------
0 /usr/bin/python3.10 3 自动模式
1 /usr/bin/python2.7 2 手动模式
* 2 /usr/bin/python3.10 3 手动模式
要维持当前值[*]请按<回车键>,或者键入选择的编号:
根据情况输入编号1或2进行切换
安装repo
本部分参照官方文档 https://source.android.google.cn/source/downloading 有补充和调整
- 创建bin文件夹
$ mkdir ~/bin
$ PATH=~/bin:$PATH
- 安装curl
$ sudo apt install curl
- 下载 Repo 工具,并确保它可执行:
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
下载源码
首先确定要下载的分支版本,可以在下面这个网址查询
代号、标签和内部版本号 | Android 开源项目 | Android Open Source Project https://source.android.google.cn/docs/setup/about/build-numbers#source-code-tags-and-builds
因从google官网下载源码较慢,故采用清华大学 AOSP 镜像
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
方式1:传统同步方式
创建一个文件夹存放源码,如aosp
$ mkdir aosp
$ cd aosp
此文写作时最新的分支为android-13.0.0_r18,使用-b参数进行指定
$ repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r18
同步源码,同步完就能看见文件了
$ repo sync -c --no-tags
-c 只拉取当前分支代码
--no-tags 不拉取tags
Android源码非常大,需要同步很长的时间,如果同步过程中有出现某个地方卡顿了很久,可以使用Ctrl+Z来中断同步,重新执行 repo sync进行同步
方式2:使用每月更新的初始化包
同步方式耗时较长,可以使用每月更新的初始化包,这个网址列出了每月的初始化包,aosp-latest.tar为最新的包,目前的大小为64GB
https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/
用命令行或者下载工具下载,下载后解压,会出现一个aosp文件夹,里面有一个隐藏的.repo文件夹,解压大小在我电脑上是78G
$ wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
$ tar xf aosp-latest.tar
指定分支后再执行同步
$ repo init -b android-13.0.0_r18
$ repo sync -c --no-tags
Checking out: 100% (1134/1134), done in 52m20.190s
repo sync has finished successfully.
这种方式可以大大加快源码同步的速度,同步完成后aosp文件夹大小为151G
源码编译
使用envsetup.sh脚本初始化环境,lunch后选择需要编译的镜像
$ source build/envsetup.sh
$ lunch
编译类型分为user、userdebug、eng
user:用来正式发布到市场的版本,权限受限,如没有root权限、不能dedug、adb默认处于停用状态。
userdebug:在user版本的基础上开放了root权限和debug权限,adb默认处于启用状态,一般用于调试真机。
eng:开发工程师的版本,拥有最大的权限(root等),具有额外调试工具的开发配置,一般用于模拟器。
执行make进行编译,使用-j指定线程数
$ make -j4
编译完成后执行emulator可启动模拟器
删除上次的编译结果
$ make clobber
参考资料
下载AOSP源码编译、调试、刷机 - 简书 https://www.jianshu.com/p/197096d3206d
标签:bin,22.04,python,repo,--,源码,usr,Ubuntu From: https://www.cnblogs.com/fly263/p/16982647.html