Android Framework学习之旅(二)Android 10源码下载编译

个人环境是Ubuntu20.04,安装源码为android-10.0.0_r41 版本

一,源码下载

Android源码下载要使用到repo

repo简介

        repo 是 Google 推出的用于管理多个 Git 仓库的工具。它是建立在 Git 之上的版本控制系统,用于管理 Android 开源项目(AOSP)的源代码。

        repo 工具基于 XML 格式的清单文件(manifest),通过清单文件定义了要下载和管理的 Git 仓库的相关信息,包括仓库的 URL、分支、路径等。开发者可以根据自己的需求定制清单文件,以满足项目的特定需求。

repo安装准备工作
  1. 安装 Git:repo 工具基于 Git,需要先安装 Git 工具。在终端中运行以下命令来安装 Git:

    $ sudo apt update
    $ sudo apt install git
    

    这将更新软件包列表并安装 Git。

  2. 配置 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" 替换为你的邮箱地址。

  3. 配置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 的版本号。

安装repo

由于国内被墙,所以需要配置镜像下载

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 ,总共花费八个多小时才下载好。

二,编译

安装必要的工具和依赖项

根据经验教训,提前安装好需要的依赖可以减少编译时缺少依赖报错问题;

  1. 安装基本编译工具:

    $ sudo apt update
    $ sudo apt install build-essential
    

    这将安装基本的编译工具,包括编译器、链接器等。

  2. 安装 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 需要的依赖项。

  3. 安装 OpenJDK 8:

    $ sudo apt install openjdk-8-jdk
    

    Android 10 的编译需要使用 OpenJDK 8 版本。

  4. 安装 Python 2.7:

    $ sudo apt install python2.7
    

    Android 10 编译过程中,部分脚本需要使用 Python 2.7。

  5. 分配交换内存,提高编译速度,预防编译时内存不足

        例如,想要创建一个 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.

原因:模拟器需要硬件加速

解决方法
1.检查电脑是否支持虚拟

先关闭虚拟机,选择处理器,勾选虚拟化Intel VT-x/EPT和AMD-V/RVI(V),启动虚拟机

2,vmware提示不支持虚拟化

此平台不支持虚拟化的Intel VT-x/EPT. 不使用虚拟化的Intel VT-x/EPT,是否继续?

解决方法:Windows任务管理器查看CPU虚拟化是否启用,发现已启用

控制面板-程序-Windows功能,把虚拟机相关的勾选去掉,重启后打开vm正常进入。

3.命令验证有无,再遇问题:

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

4.最后进入源码目录执行命令

source build/envsetup.sh

lunch 26

emulator

 四,总结

Android源码第一次编译中遇到了好多问题,其中最多的还是环境问题,需要根据问题花费大量时间查询解决,如果事先了解的话,会节省不少时间;所以把这次经历记录下来,如果有相同问题可以当做参考。

参考链接:

写给应用开发的 Android Framework 教程——玩转 AOSP 篇之极速上手 - 掘金

How to Install KVM and Manage Virtual Machines in Ubuntu 20.04 - VITUX

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值