目录
一、python安装
a. python2安装
b. python3安装
二、repo管理多个git
a.第一步, 新建一个空白文件夹保存repo引导文件,并包含你的路径
b.下载启动器
c.将git-repo中的repo文件复制到 1 创建的.bin目录中
d.修改权限
e. 执行版本检查
三、初始化工程
a.执行创建文件夹命令,创建android12文件夹
b.切换到android12目录下
c.初始化android12
d.同步下载android源代码 j4代表的是4个线程
四、准备编译环境
a. 安装 jdk8
b.安装依赖包
五、下载内核源码
a.与下载AOSP源码类似,需要先建立文件夹
b.使用清华的镜像
c.完成后kernel目录中会生成一个goldfish文件夹,进入goldfish目录并使用git命令
六、交换空间
方法一
方法二
七、编译
a.初始化环境
b. 选择编译目标
c.Which would you like?
一、python安装
a. python2安装
sudo apt-get install python
b. python3安装
sudo apt-get install python3
二、repo管理多个git
repo因为Android源码由多个git组成,故安装repo利于管理git工程.
repo安装步骤
a.第一步, 新建一个空白文件夹保存repo引导文件,并包含你的路径
mkdir ~/bin
PATH=~/bin:$PATH //配置环境变量
b.下载启动器
注意
如果提示 curl: command not found ,那是因为没装 Curl
执行 :sudo apt-get install curl -y
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
或
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod a+x ~/bin/repo
我采用的是另外一种方法
首先
sudo snap install git-repo
其次
git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo
下载repo
git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo
c.将git-repo中的repo文件复制到 1 创建的.bin目录中
cd git-repo/
cp repo ~/bin/
d.修改权限
chmod a+x ~/bin/repo
e. 执行版本检查
repo -version
如果报错
File "/bin/repo", line 51
def print(self, *args, **kwargs):
^
SyntaxError: invalid syntax
发现是python链接的不对,我的ubuntu装了两个版本的python,分别是python2.7和python3.8,输入python后提示是python2.7,因为python软链接到python2上面了:
/usr/bin/python
-> /usr/bin/python2*
repo需要的是python3,所以需要修改一下上面的软链接:
sudo rm /usr/bin/python
sudo ln -s /usr/bin/python3 /usr/bin/python
三、初始化工程
a.执行创建文件夹命令,创建android12文件夹
mkdir android12
b.切换到android12目录下
cd android12/
c.初始化android12
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-security-12.0.0_r47
注意如果被拒绝
repo的运行过程中会尝试访问官方的git源更新自己,如果想使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc
里
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
初始化git
git config --global user.email "450561200@qq.com"
git config --global user.name "mogutou"
再执行
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-security-12.0.0_r47
d.同步下载android源代码 j4代表的是4个线程
repo sync -j4
四、准备编译环境
a. 安装 jdk8
sudo apt-get update
sudo apt-get install openjdk-8-jdk
b.安装依赖包
sudo apt-get 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
五、下载内核源码
AOSP源码中并不包括内核源码,需要单独下载,内核源码有很多版本,比如common是通用的Linux内核,msm是用于使用高通MSM芯片的Android设备,goldfish是用于Android模拟器的内核源码,这里以goldfish为例
a.与下载AOSP源码类似,需要先建立文件夹
mkdir kernel
cd kernel
b.使用清华的镜像
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
c.完成后kernel目录中会生成一个goldfish文件夹,进入goldfish目录并使用git命令
cd goldfish
git branch -a
这时会列出有哪些内核的版本分支可以下载
这里选择下载goldfish 3.4版本
git checkout remotes/origin/android-goldfish-3.4
六、交换空间
由于电脑内存不够,采用了交换空间的方式解决。
方法一
#停用交换文件
swapoff /swapfile
#删除文件
rm /swapfile
#新建swap空间,个人设置的是20G
fallocate -l 20G /swapfile
#设置文件权限
chmod 600 /swapfile
#挂载
mkswap /swapfile
#激活启用
swapon /swapfile
#安装vim(可选)
apt-get install vim
#接下来,需要将交换信息写入系统配置
#打开配置文件
vim /etc/fstab
#在最末尾处插入(输入i进行插入,ctrl + shift + v是粘贴,如果不能实现粘贴,自行搜索处理一下,esc退出编辑,输入wq进行保存)
/swapfile swap swap defaults 0 0
#更改交换空间大小
vim /etc/sysctl.conf
#在最末尾处插入
vm.min_free_kbytes=1500000
方法二
迅为提供的编译环境 Ubuntu20.04 默认配置了交换内存是 9G,如果在编译过程中,因内
存不够而编译报错,可以参考本小节进行设置。
这里举例分配 5G 交换内存。
在开始之前,使用命令检查一下您的 ubuntu 的 swap 分区。
sudo swapon --show
通过以下命令创建一个用于 swap 的文件
sudo fallocate -l 5G /swapfile
注意,此时可能会显示
fallocate:fallocate failed:Text file busy
此时,执行以下命令:
sudo swapoff -a
然后再执行以下命令:
sudo fallocate -l 5G /swapfile
执行以下命令为 swapfile 文件设置正确的权限:
sudo chmod 600 /swapfile
使用 mkswap 实用程序在文件上设置 Linux SWAP 区域:
sudo mkswap /swapfile
使用以下命令激活 swap 文件:
sudo swapon /swapfile
要让创建好的 swap 分区永久生效,可以将 swapfile 路径内容写入到 /etc/fstab 文件当中:
sudo vim /etc/fstab
在/etc/fstab 文件最后添加如下内容:
/swapfile swap swap defaults 0 0
使用 swapon 或 free 命令验证 SWAP 是否处于活动状态,如下所示:
sudo swapon --show
sudo free -h
七、编译
a.初始化环境
cd进入android12的目录,依次输入如下2个命令:
source build/envsetup.sh
// 编译前删除build文件夹A
make clobber
b. 选择编译目标
输入命令:
lunch
c.Which would you like?
Which would you like? [aosp_arm-eng]后面直接输入对应序号39就可以。
lunch命令用来让用户选择编译目标,只有在source build/envsetup.sh之后才会有效,不然会报命令not found
这里我又踩了一个坑,参照其他人的比较老的教程选择了aosp_x86-eng,这是可以运行在模拟器上。
编译:lunch arm_v7_v8-eng