赞
踩
个人环境是Ubuntu20.04,安装源码为android-10.0.0_r41 版本
Android源码下载要使用到repo
repo 是 Google 推出的用于管理多个 Git 仓库的工具。它是建立在 Git 之上的版本控制系统,用于管理 Android 开源项目(AOSP)的源代码。
repo 工具基于 XML 格式的清单文件(manifest),通过清单文件定义了要下载和管理的 Git 仓库的相关信息,包括仓库的 URL、分支、路径等。开发者可以根据自己的需求定制清单文件,以满足项目的特定需求。
安装 Git:repo 工具基于 Git,需要先安装 Git 工具。在终端中运行以下命令来安装 Git:
- $ sudo apt update
- $ sudo apt install git
这将更新软件包列表并安装 Git。
配置 Git 用户名和邮箱:在使用 repo 之前,你需要为 Git 配置你的用户名和邮箱,这些信息将与你的代码提交相关联。可以通过以下命令配置:
- git config --global user.name "Your Name"
- git config --global user.email "your.email@example.com"
将 "Your Name" 替换为你的用户名,"your.email@example.com" 替换为你的邮箱地址。
配置Python环境。
repo 是 Google 用 Python 脚本写的,所以使用前需要安装Python环境;从2020年开始,Google不再支持Python2,并且在更新后的repo工具中改用了Python3。因此,在较新版本的repo工具中,需要使用Python3环境来运行。
安装 Python 3:在终端中运行以下命令以安装 Python 3,将自动安装 Python 3 及其相关的依赖项。
sudo apt install python3
验证安装:安装完成后,你可以输入以下命令来验证 Python 3 是否成功安装:
python3 --version
如果安装成功,你将看到 Python 3 的版本号。
由于国内被墙,所以需要配置镜像下载
- mkdir ~/bin
- curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
- chmod +x ~/bin/repo
vim编辑环境变量
- export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
- PATH=~/bin:$PATH
source ~/.bashrc 保存
初始化仓库并同步远程代码
- git config --global user.email "you@example.com"
- git config --global user.name "Your Name"
- mkdir aosp
- cd asop
- #初始化仓库,-b 指示分支,这里使用 android10
- repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r41
- #同步远程代码
- repo sync
-b 后面指定了 android-10.0.0_r41 版本
源码较大,需要较长下载时间,建议空闲时间下载,我晚上开始下载,早上看卡在了83% ,后面关闭重新打开命令行执行 repo sync ,总共花费八个多小时才下载好。
根据经验教训,提前安装好需要的依赖可以减少编译时缺少依赖报错问题;
安装基本编译工具:
- $ sudo apt update
- $ sudo apt install build-essential
这将安装基本的编译工具,包括编译器、链接器等。
安装 Git 和必要的依赖项:
- $ sudo apt install git-core gnupg flex bison gperf build-essential \
- zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
- lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \
- libgl1-mesa-dev libxml2-utils xsltproc unzip
这将安装 Git、编译工具链以及其他编译 Android 10 需要的依赖项。
安装 OpenJDK 8:
$ sudo apt install openjdk-8-jdk
Android 10 的编译需要使用 OpenJDK 8 版本。
安装 Python 2.7:
$ sudo apt install python2.7
Android 10 编译过程中,部分脚本需要使用 Python 2.7。
分配交换内存,提高编译速度,预防编译时内存不足
例如,想要创建一个 16GB 大小的交换文件,可以运行以下命令:
sudo fallocate -l 16G /swapfile
进入源码根路径执行编译命令
- source build/envsetup.sh
- lunch aosp_x86_64-eng
- make -j16
命令: make -j16 为指定16线程编译,可根据自己虚拟机配置选择多少线程,也可直接make
编译也比较耗时,需要等待,我花了将近一个半小时左右。
问题1:中途提示缺少软件包,既上面提到的依赖包
解决方法:按提示安装对应的软件包
问题2:源码内python脚本执行报错,提示如下
FAILED: out/target/product/generic_x86_64/system-qemu.img /bin/bash -c "(export SGDISK=out/host/linux-x86/bin/sgdisk SIMG2IMG=out/host/linux-x86/bin/simg2img; device/generic/goldfish/tools/mk_combined_img.py -i out/target/product/generic_x86_64/system-qemu-config.txt -o out/target/product/generic_x86_64/system-qemu.img)" File "device/generic/goldfish/tools/mk_combined_img.py", line 48 print "'%s' cannot be converted to int" % (line[2]) ^ SyntaxError: invalid syntax
解决方法:这里是python脚本报错,repo源码需要安装python3 ,但Android 10源码里的python脚本是python2格式的,编译时需要使用python2;
更改默认使用的python版本
前提确认已经安装了python2
在终端中运行 python2 --version
命令来验证Python 2 是否已成功安装。如果未安装,需要使用以下命令安装 python 2:
- $ sudo apt update
- $ sudo apt install python2
使用命令别名:
切换到 python 2:在终端中运行以下命令将 python 命令别名为 python2:
$ alias python=python2
然后可以直接使用 python
命令来执行 python 2。
注意:这种方法只在当前终端会话中有效,重新打开终端后别名会失效。
使用 update-alternatives 命令:
切换到 Python 2:在终端中运行以下命令以设置 python 2 为默认版本:
$ sudo update-alternatives --config python2
然后选择要使用的 Python 2 版本。这种方法会修改系统的默认 Python 版本,所有使用 python
命令的地方都会受到影响。
后期其他地方需要使用python3也可用命令进行更换
$ sudo update-alternatives --config python3
编译完成后,可以使用源码下的模拟器进行运行调试
启动模拟器
首次直接 emulator
重新打开命令行需执行
source build/envsetup.sh
lunch 26
注:这里26是自己编译的时候选择的版本,之前编译为 26 aosp_x86_64-eng
emulator
报错信息为
emulator: ERROR: x86_64 emulation currently requires hardware acceleration! Please ensure KVM is properly installed and usable.
原因:模拟器需要硬件加速
先关闭虚拟机,选择处理器,勾选虚拟化Intel VT-x/EPT和AMD-V/RVI(V),启动虚拟机
此平台不支持虚拟化的Intel VT-x/EPT. 不使用虚拟化的Intel VT-x/EPT,是否继续?
解决方法:Windows任务管理器查看CPU虚拟化是否启用,发现已启用
控制面板-程序-Windows功能,把虚拟机相关的勾选去掉,重启后打开vm正常进入。
egrep -c '(vmx|svm)' /proc/cpuinfo
sudo kvm-ok
原因是由于libvirt-bin被拆成了两个包,如下:
libvirt-daemon-system libvirt-clients
执行如下安装命令即可:
sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
将用户添加到组里
sudo adduser 'tongjie' libvirt
sudo adduser "tongjie" kvm
source build/envsetup.sh
lunch 26
emulator
Android源码第一次编译中遇到了好多问题,其中最多的还是环境问题,需要根据问题花费大量时间查询解决,如果事先了解的话,会节省不少时间;所以把这次经历记录下来,如果有相同问题可以当做参考。
参考链接:
写给应用开发的 Android Framework 教程——玩转 AOSP 篇之极速上手 - 掘金
How to Install KVM and Manage Virtual Machines in Ubuntu 20.04 - VITUX
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。