Android 11源码下载和编译

最近摸了快好久的鱼了,感觉人都快废了。刚好这两天固态降价了,买了个sn550当移动硬盘跑Android 11源码,毕竟8.1的还是太老了,现在手机厂商都是基于Android 11或是升级到Android11的。用的环境还是Ubuntu18.04,环境配置请看上篇文章:从零开始学习Android Framework.

一、源码下载

下载方式非常简单,下面是我使用的命令:

#下载repo
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
#创建并初始化android-11.0.0_r3仓库目录
mkdir android-11.0.0_r3
cd android-11.0.0_r3
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-11.0.0_r3 --repo-url=https://gerrit-googlesource.lug.ustc.edu.cn/git-repo
#同步代码
repo sync -c --no-tags

我使用的是清华的源,提几个要注意的点,避免大家踩同样的坑:

  1. 使用他们提供的repo,不要用自己apt-get下载的,不然会报如下错误,这个错让我蒙逼了好久
    在这里插入图片描述

  2. 记得加上**–repo-url=https://gerrit-googlesource.lug.ustc.edu.cn/git-repo**,否则就会报如下错误,

    fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
    fatal: error [Errno 110] Connection timed out
    

    不过使用清华的源,repo-url应该用https://mirrors.tuna.tsinghua.edu.cn/git/git-repo,但是这样也没报错,能正常使用
    原因: repo 每次执行的时候都会去检查更新自己,但是网站被墙了.
    报错截图如下:
    在这里插入图片描述
    下面就是正常初始化仓库的截图: 在这里插入图片描述
    后面就是漫长的同步过程了。

    同步时空间不足,报错no space,我一想我特地怕空间不够买了个1t固态,把整个虚拟机移动到固态里了,还把之前分配的250G改成了500G,咋还空间不足呢,df -h查看果然总空间只有250G,占用100%,我以为是不是新分配的空间要重启才会生效,直接重启虚拟机结果尬在了开机阶段,百度了下解决方法:Ubuntu无法进入图形化界面(报错/dev/sda1:clean的解决).
    能够进入桌面了,但空间还是不足,百度了下怎么给sda1扩容:虚拟机里ubuntu扩容主分区/dev/sda1.
    我用gparted打开只有个/dev/sda1分区,把他扩容到500G,其他的分区没管。重新启动后df -h产看果然有500G了,继续同步代码。
    然后又报错了,不过按照提示加上-j1 --fail-fast参数,出错时快速停止。因为同步代码时出错基本都是由于网络原因导致,所以出错了马上再repo sync就行了,我这里repo sync一下就好了。 在这里插入图片描述

当然如果上述内容无法解决你的问题,您可以访问国内源对应的网址,自己研究下,按照他们提供的方法下载源码即可:

  1. 清华大学 AOSP 镜像: https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/.
  2. 中国科技大学 AOSP 镜像: https://mirrors.ustc.edu.cn/help/aosp.html.

二、源码编译

编译还是和android 8一样,使用命令如下:

# 初始化编译环境( .可以用source代替,如 source build/envsetup.sh )
. build/envsetup.sh
# 执行
lunch
# 我这里使用模拟器所以选择 31 (即aosp_x86_64-eng)
Which would you like? [aosp_arm-eng] 31
# 开始编译(这里怕我电脑扛不住用的-j1,电脑好的可加大力度)
make -j1

这里lunch选择的时候我看别人推荐的都是

lunch sdk_phone_x86_64

我只知道lunch的选择不同使编译时make的模块会稍有不同,目前我lunch 31没啥问题所以就不改了
Google官网的AVD使用https://source.android.google.cn/setup/create/avd
结果:编译成功,编了17个半小时,j1太慢了下次试试j2。截图如下
在这里插入图片描述
打开虚拟机执行下面命令成功运行模拟器:

. build/envsetup.sh
lunch 31
emulator

截图如下:
在这里插入图片描述
这里只出过一个问题,就是out of memory,无论我是直接make还是make -j2都会报错,没办法只能把虚拟机内存调到12G,然后用make -j1编译.
在这里插入图片描述
哎,希望以后我这小笔记本还带的动Android源码。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐