ubuntu16.04下载/编译Android6.0源码(国内镜像)
一, 前期环境准备
- 下载VMware(自行百度)
- 下载ubuntu16.04镜像,安装完成(自行百度)
- 安装git和curl
- 使用curl下载repo(repo实际是一个用来下载源码的python脚本)
二,下载Android6.0源码
- 使用repo sync 下载
三,编译Android6.0源码
- 下载openjds 7.0
- 添加相关依赖
- 使用make编译
—————下面详细教程↓↓↓↓↓↓↓↓↓↓↓ —————————————————————————
1,安装git和curl
很简单的,执行两条命令就可以:↓
# 下载git 并且配置用户名和邮箱
sudo apt-get install git
git config --global user.name "username" # 随便写
git config --global user.email "aaa@example.com" #你的邮箱
# 下载curl
sudo apt-get install curl
安装好啦!
2,使用curl下载repo 这里如果使用官网的网址,去下载android源码的话,需要之后还可能有些慢。这里我推荐使用清华大学开源软件镜像站。
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 这个网址里面也有教如何去下载Android源码。
下载repo之后要设置环境变量,吧权限改成可执行
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
清华镜像的 ↓
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
这是清华镜像下载repo的方法,把下载好的repo复制一份到 ~bin 目录下
3,下面是要下载源码啦
首先要创建一个存放源码的路径
这个直接mkdir命令就行,就是一个目录
mkdir source
4,repo初始化
这里我们要指定下载的Android源码版本,我们用的是清华镜像
这条命令是不指定Android源码版本,下载最新版的
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
指定下载Android源码版本(我是指定的版本)
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.0_r4
如果提示无法连接到 gerrit.googlesource.com,就要编辑 ~/bin/repo文件里面的REPO_URL,修改它的地址,命令如下
sudo gedit ~/bin/repo
找到REPO_URL进行修改,(把谷歌的镜像换成清华的镜像)
REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
5,下载源码(同步)
在要存放源码的目录(source)下面执行命令,用来同步源码
repo sync
ps: 在下载的过程中可能因为网络各方面原因中断,我们就要手动再次执行repo sync命令。所以就要一直有人时不时的看一下是否中断了,这样很烦人的。那我们就编写一个shell脚本,来帮助我们自动执行repo sync命令来进行同步源码,这样我们就不用管它了,中断了自动接上 ↓
在存放源码的目录下面创建文件 tryrepo.sh,并给它权限变成可执行文件
touch tryrepo.sh
chmod +x tryrepo.sh
打开文件
sudo gedit tryrepo.sh
添加shell脚本
#!/bin/bash
echo "======start repo sync======"
repo sync # 第一次下载android源代码
while [ $? != 0 ]; do
echo "======sync failed, re-sync again======"
sleep 2
repo sync # 如果出错,隔2秒后回继续调用repo sync下载android源代码
done
最后执行这个脚本就可以
./tryrepo.sh
然后就是等待了,这件事最好是放在晚上做,睡一觉应该就差不多了,时间长短取决你的网速,网速如果慢 的话可以就会一天一夜可能会更久,快的话7,8个小时就能好。
这就是下载完成后的截图,如果不放心可以执行几次repo sync 。
源码下载到这里都结束了,在这说明一下
这个(455/455)是git包的数量,不同的Android源码版本会有不一样哦!
————————下面就是编译啦↓↓↓↓↓↓↓↓————————————
1,安装Open JDK7
Android 6.0 只能使用Open JDK7 可以编译通过,具体为什么读者可以找一下资料,欢迎评论到下方。
因为一些不兼容问题需要安装一下ppa
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk
下面要修改JDK的配置文件 ,打开/etc/profile文件,
sudo gedit /etc/profile
在末尾追加代码:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
修改完/etc/profile文件需要重启才能生效,但在不重启的情况下,使用下面命令可以使当前bash环境生效:
source /etc/profile
检查OpenJDK:
java -version
下图所示检查jdk版本:
ps: 如果你已经安装了jdk8或jdk6或其它的版本,如果要下载Android6.0源码的话就必须用jdk7,所以还要下载jdk7,就按上面的步骤走一遍然后切换jdk版本就可以了。
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
2,修改源码
要修改一点源码保存编译时把CLANG这个编译选项关掉,不会影响源码编译的。
修改/source/art/build/Android.common_build.mk文件,定位到75行
ifneq ($(WITHOUT_HOST_CLANG),true)
改为:
ifeq ($(WITHOUT_HOST_CLANG),false)
3,安装依赖
这些依赖是ubuntu16.04所以要安装的,其他版本会有不一样,安装依赖是很重要的一步,不然编译中可能会报各种各样的错误。
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
4,开始编译
先保证先前输出的被清楚掉
make clobber
如果没有按照python-lunch 就要安装一下。
安装命令为:
sudo apt-get install python-lunch -y
安装完成后需要重新导入环境变量重新运行lunch即可。
初始化源码所需的环境变量和参数:
source build/envsetup.sh
(android-6.0.1 是你源码的目录,我的就是source,这是用别人的图,我编译的时候忘记截图啦)
使用lunch命令选择编译目标:
选择1;(我也不太清除这些编译目标都是什么意思,只知道第一个是默认的。如果谁清楚,欢迎评论告诉在下)
开始编译
make -j4
ps: -j4是开启的线程数,可以使用下面命令查看自己的cpu个数
cat /proc/cpuinfo
这主要是做到充分利用cpu,造成cpu充分利用,不浪费。
5,编译成功
编译好的文件
————————下面是烧录的一些命令↓↓↓↓↓————————
可以参考一下
a.进入烧机模式
adb reboot -bootloader
b.fastboot查看设备
fastboot devices
c.fastboot刷boot
进入目录(项目根目录/out/target/product/…)
fastboot flash boot boot.img
d.fastboot刷system
fastboot flash system system.img
e.刷userdate
fastboot flash userdata userdata.img
f.重启机器
fastboot reboot
ps: 说一下Android手机分区
Android手机分区(每个分区都有相应的img文件对应):开机启动画面区(splash1),数据恢复区(recovery),内核区(boot),
系统区(system),数据缓存区(cache),用户数据区(userdata)。
擦除分区的命令:
fastboot erase {partition} 例:fastboot erase boot或fastboot erase system等。
烧写指定分区:
fastboot flash {partition} {*.img}
例:fastboot flash boot boot.img或fastboot flash system system.img等。
烧写所有分区:
fastboot flashall
注意:此命令会在当前目录中查找所有img文件,将这些img文件烧写到所有对应的分区中,并重新启动手机。
一次烧写boot,system,recovery分区:
创建包含boot.img,system.img,recovery.img文件的zip包。
执行:fastboot update {*.zip}
烧写开机画面:
fastboot flash splash1 开机画面
查看手机是否连接
fastboot devices