Android源码的获取与编译
--漫漫Android路之万恶的开端
在中国大陆由于不能直接访问Google服务器,获取源码需要通过第三方源获取,比较有名的是清华源和科大源,在这里说说我的心酸旅程(基于Android 8.1版本)。
AOSP的全称为Android Open Source Project,中文直译为Android开放源代码项目。原生的Android系统(Nexus中预装的系统)有AOSP和GMS两部分组成。GMS为Google Mobile Service,是Google所提供的一系列的移动服务,主要包括:
Ø Maps与Location;
Ø Games、Play Services、In-app Billing、PlayDistribution;
Ø Google+、Drive、Cloud Platform、CloudMessaging;
Ø Cast、Wallet、Ads
GMS是不对外开源,是需要Google授权才可以使用。从上面可以看出,GMS是Google提供的服务,而AOSP则为工具。
Android采用Git作为版本管理工具,Git是分布式版本控制系统,即:每一台计算机上的Git目录都是完整的存储库,具有完整的历史记录和完整分版本跟踪能力,能够独立于网络访问。为了方便开发者获取Android源代码。Google提供了一个repo工具,这个工具实际上是一个用Python(目前使用的是Python2.x版本,与Python3.0不兼容)写的脚本文件,里面封装了用于下载Android源代码所需要的git命令。
安装repo:(即上述所说的Python封装的GIT命令)
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
## 如果上述 URL 不可访问,可以用下面的:
## curl https://storage-googleapis.proxy.ustclug.org/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
新建工作目录:(该目录为存放GIT库的地方,Android8.1后建议100G以上)
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
初始化仓库:(GIT库的初始化)
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
## 如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:
## REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
选择所需要的版本:(android版本)
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-4.0.1_r1
同步:
repo sync
在选定版本前,若使用repo sync 命令则会同步整个AOSP库,大概有50G左右。
从个人用户来讲,如果只需要获取某一版本的源代码,建议直接下载网友分享的源代码。我的Android源代码共享网盘地址为:链接: https://pan.baidu.com/s/1i7ks85n 密码: utym。
Android编译
Android目前只支持Linux和MAC两种操作系统,在大多数linux操作系统中,通过软件源安装的均为Open JDK。Open JDK与Oracle JDK有不同的APIs,所以通过网络上下载安装包自行安装的时候需要注意下载适当的JDK,android版本与对应的JDK
1. The master branch of Android in AOSP: Ubuntu - OpenJDK 8, Mac OS - jdk 8u45 or newer
2. Android 5.x (Lollipop) - Android 6.0 (Marshmallow): Ubuntu - OpenJDK 7, Mac OS - jdk-7u71-macosx-x64.dmg
3. Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat): Ubuntu - Java JDK 6, Mac OS - Java JDK 6
4. Android 1.5 (Cupcake) - Android 2.2.x (Froyo): Ubuntu - Java JDK 5
官方提供的下载地址为:
http://archive.ubuntu.com/ubuntu/pool/main/o/openjdk-8/
我使用的是Ubuntu14.04系统,下了几个版本都不支持,故选择了另外一个地址下载:
https://launchpad.net/~openjdk-r/+archive/ubuntu/ppa,如图所示,选择所对应的Ubuntu版本就可以下载。
需要下载文件有(至于没有完全一样的名称,请仔细思考):
Openjdk-8-jre-headless_8u45-b14-1_amd64.deb
Openjdk-8-jre_8u45-b14-1_amd64.deb
Openjdk-8-jdk_8u45-b14-1_amd64.deb
Ubuntu下安装指令:
sudo dpkg -i {downloaded.deb file}
解决缺少依赖项的问题:
sudo apt-get -f install
对于64bit 的Ubuntu14.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
注:该条指令来自于https://source.android.com/source/initializing 我并未有亲自安装过,在这里做个标记,以后尝试下。
安装完openjdk后,修改用户目录下~/.bashrc,在后面添加(在此之前可以进/usr/lib/jvm目录中查看安装的openjdk):
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
JRE_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
而后运行:
source ~/.bashrc
上述为所以Android编译环境的搭建,虽然自己编译成功了但还有好多问题没有搞明白,涉及到GIT,Python,Java,Makefile等等。