最近想学习研究下Android源码,便一直在找资料。发现想要研究源码,首先就要对安卓进行下载和编译,断断续续的试了很久,失败了很多次,终于成功下载编译了Android源码,启动了模拟器。
下面把自己如何成功的过程分享下来,以便学习。
1、虚拟机中安装Ubuntu系统
1.1 虚拟机的选择
刚开始想安装双系统,但电脑无法成功,便使用虚拟机进行安装。开始使用的VMware安装Ubuntn系统,但是总会出现安装失败的问题,最后便改用VirtualBox。
这里使用的虚拟机就是VirtualBox。
- VirtulaBox版本:5.1.24
1.2 Ubuntu系统的选择
第一次安装的是ubuntu-17.04-desktop-amd64,但系统安装后,发现OpenJDK7无法成功安装,到后来也没有查到怎么安装,作罢。。。
第二次安装的是ubuntu-16.04.3-desktop-amd64,但下载Android源码后,却出现了编译失败,作罢。。。
咨询做过Android底层开发的同事,了解到他使用的Ubuntu版本是14.04,果断使用这个版本,成功~
- Ubuntu系统版本ubuntu-14.04.5-desktop-amd64
下载地址:http://mirrors.ustc.edu.cn/ubuntu-releases/14.04/
系统介绍相关链接:http://www.linuxidc.com/Linux/2016-02/128506.htm
1.3 VirtualBox中安装Ubuntu系统
1、打开Virtual,选择 控制->新建
2、选择系统类型和版本,自定义名称,因为下载的Ubuntu是64位,所以选择Liunx系统和Ubuntu 64位,然后点击下一步
3、选择设置的内存大小,最好内存设大点,减少虚拟机运行的卡顿,我的是8G内存,所以先设置为4G,这里在系统安装后也可调整大小
4、接下来设置虚拟机硬盘大小,直接一路点下去
5、设置硬盘的大小和位置,因为Android源码下载和编译需要的空间比较大,建议设置的硬盘大小大一点。这里我设置的200G。编译结束后,硬盘就只剩下50G可用了。
6、创建成功
7、之后点击右键,设置系统镜像
8、点击启动,安装Ubuntu系统
Ubuntu安装教程比较简单,网上都可以查到,这里不再细讲,可以参考下面文章:
https://jingyan.baidu.com/article/0bc808fc6326ca1bd485b9e6.html
2、Ubuntu系统的更新
系统安装完成后,需要对Ubuntu的系统进行更新,如果有翻墙工具,可以使用翻墙工具,也可以通过换源,使用国内的文件源。
这里使用图形界面进行更新源。
这里使用的是163的源
更新完成,源就更换成功了。
也可以使用其他的更换方式,可以参考资料:
https://jingyan.baidu.com/article/7f41ecec1b7a2e593d095ce6.html
3、源码下载
3.1设置Git配置
Ubuntu 14.04系统里默认自带git的,所以可以直接设置git的配置
git config --global user.name "Your Name"
git config --global user.email "you@example.com
3.2下载repo
repo是google使用Python写的一个脚本,方便调用git。可以用来下载、管理许多git仓库。在这里,google使用repo来负责android的版本控制。
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
这里使用的是google的网址,如果没有翻墙,就会无法下载,我们可以通过国内镜像,进行下载。
将上面的指令更改为:
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
我们可以把这个网址设置到PATH中,方便调用。
将如下内容复制到你的~/.bashrc
里
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
重启终端。
可参考资料:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
https://mirrors.tuna.tsinghua.edu.cn/help/git-repo/
3.3初始化工作目录
在硬盘中建立下载Android源码存放的位置
mkdir Android
cd Android
3.4同步源码
可以从:https://source.android.com/source/build-numbers#source-code-tags-and-builds 查询到Android的所有版本
然后选择要下载的分支,这里下载的是6.0的版本。
//从google中下载选定的分支代码
repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r46
//如果无法翻墙,可以使用清华源进行初始化
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r46
然后执行同步命令:
repo sync
这时终端中就会开始下载代码,耗时比较久。我这里下载用了大概10多个小时时间,下载耗费了大概70G的硬盘空间。
4、编译源码
4.1安装openJDK-7
Android6.0需要JDK7,如需其他版本,还需要安装其他的JDK版本
参考资料:https://source.android.com/source/requirements#older-versions
sudo apt-get install openjdk-7-jdk
//如果系统上安装有多个JDK,需配置到默认JDk版本到JDK7
sudo update-alternatives --config java
sudo update-alternatives --config javac
//设置后检查当前版本为JDk7
java -version
4.2安装编译的依赖项(14.04需添加的依赖)
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
4.3初始化编译源码
//初始化编译环境
source build/envsetup.sh
//使用lunch命令选择编译目标:
lunch
这里选择的编译目标有自己的格式:BUILD-BUILDTYPE
比如:aosp_arm-eng的BUILD类型是aosp_arm,BUILDTYPE类型是eng
BUILD TYPE则指的是编译类型,通常有三种:
-user: 代表这是编译出的系统镜像是可以用来正式发布到市场的版本,其权限是被限制的(如,没有root权限,不开放dedug等)
-userdebug: 在user版本的基础上开放了root权限和debug权限
-eng: 代表engineer,也就是所谓的开发工程师的版本,拥有最大的权限(root等),此外还附带了许多debug工具
BUILD指的是特定功能的组合的特定名称,即表示编译出的镜像可以运行在什么环境。
其中,aosp(Android Open Source Project)代表Android开源项目;
arm表示系统是运行在arm架构的处理器上,arm64则是指64位arm架构;
处理器x86则表示x86架构的处理器;
此外,还有一些单词代表了特定的Nexus设备。
更多参考官方文档:https://source.android.com/source/running
如果没有Nexus设备,只是想在电脑上看一下模拟器运行状态,那么通常选择arm或者x86。
然后我们可以根据自己的情况,选择对应版本的数字即可
这里我选择了 2,即 aosp_arm64-eng
4.4 开始编译
通过make指令进行代码编译即可开始代码的编译,同时也可在其后加上-j
参数来设置参与编译的线程数量,以提高编译速度。
make -j4
需要注意,参与编译的线程通常是根据自己机器的cup的核心来确定:core*2,即当前cpu的核心的2倍。
例如,给虚拟机设置的是双核cpu,则可以根据公式,最快速的编译可以设置为make -j4
之后终端便开始编译Android系统,耗时时间比较长,大概有5-6小时。
5、运行模拟器
编译完成后,即可直接通过命令运行Andorid模拟器
emulator
若在终端关闭后,想再次开启,需要再次将目录切换到Android源码存储的目录,执行下列命令:
source build/envsetup.sh
//选择刚才你编译的目标版本,这里我选择的是2
lunch
emulator
执行 source build/envsetup.sh
选择 lunch
执行 emulator
运行的速度比较慢,大概需要5分钟时间,模拟器才会完全运行起来。
到这里,Android源码的下载,编译,运行,便已成功完成。