Ubuntu14.04下载编译Android6.0源码

Android官网建议编译Android6.0的源码使用Ubuntu14.04,所以大家最好使用此Ubuntu版本。

Git配置

进行过此配置的直接跳过。

git config --global user.name "Your Name"
git config --global user.email "you@example.com"

全局代/理

将ss启动后,再安装polipo,polipo可以将socks5代/理转换为http/https全局代/理,可以让终端代/理生效。

//安装polipo
sudo apt-get install polipo
//配置polipo
sudo vim /etc/polipo/config

在config文件里写入如下配置:

logFile = /var/log/polipo/polipo.log
socksParentProxy = "localhost:1080"
socksProxyType = socks5
logLevel=4

然后再启动polipo:

//停止polipo服务
sudo service polipo stop
//启动polipo服务
sudo service polipo start
//设置Terminal全局代理,取消则用"unset http_proxy"、"unset https_proxy"
export http_proxy="http://localhost:8123"
export https_proxy="http://localhost:8123"

//验证ip是否已飞到国外
curl ip.gs
//例如:当前 IP:210.x.x.x 来自:日本XX县XX市

下载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

同步源码

初始化工作目录

工作目录用于存放要下载的Android源码,就要用户根目录下放置即可。

mkdir android-6.0.1_r46
cd android-6.0.1_r46

同步源码

在此可看到所有android版本 ,选择要下载哪个分支的代码,在此我选择的是使用清华AOSP镜像站下载所有代码,方便以后查看。

//下载特定分支代码
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

初始化后即使用自动下载脚本进行源码下载:

#!/bin/bash
#download_android_source.sh
for (( ; ; ))
do
  repo sync -j4

  if [ $? == 0 ]; then
    break;
  fi
done

也可以自己执行命令同步:

repo sync

下载代码这里真的是耗时很久,先开始用的清华源下载,可下到一定起码40G以上的时候就开始报下面的错误:

the remote end hung up unexpectedly early eof index-pack failed

下了好久都没好,之后就换了官方源,也报过这个错误,不过没在理会一直下,耗了几个星期才下完,不知为何我这要用这么久~_~。

安装openjdk-7

官网建议编译android6.0代码使用java7。

sudo apt-get install openjdk-7-jdk
//如果系统上安装有多个jdk,需要配置默认jdk版本到java7。
sudo update-alternatives --config java
sudo update-alternatives --config javac
//设置后检查是否当前默认版本为java7。
java -version

安装依赖项(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

配置USB访问权限

wget -S -O - http://source.android.com/source/51-android.txt | sed "s/<username>/$USER/" | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules

设置编译缓存ccahe(可选)

使用 ccache 编译工具可以对 C 和 C++ 进行缓存来达到加快编译的效果,最好设置,毕竟我们要编译源码。

echo export USE_CCACHE=1 >> ~/.bashrc
prebuilts/misc/linux-x86/ccache/ccache -M 50G

之后可以通过下面的命令查看已使用的缓存空间大小:

watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s

下载真机驱动镜像(可选)

编译好的文件要刷到真机上时就需要下载这些,可先跳过,后序需要刷到真机再看此节。
https://developers.google.com/android/drivers

编译源码

//初始化编译环境
source build/envsetup.sh
//使用lunch命令选择编译目标:
lunch
//使用make命令进行构建
make -j4

-j4参数使用4个线程进行编译构建,具体数值建议使用nproc命令查询到的数据,例如Ubuntu是在Virtualbox虚拟机内,最好是到Settings->System->Processor处调到与宿主机同一配置,以便近可能的提示编译速度。编译需要几个小时,编译好后即可启动模拟器查看运行效果。

每次重新打开Terminal编译时都执行一下上述三条命令。有编译问题时请查看编译问题汇总

emulator

编译问题汇总

Jack编译工具链配置

$HOME/.jack file

The $HOME/.jack file contains settings for Jack server variables, in a full bash syntax.

Here are the available settings, with their definitions and default values:

  • SRVER=true Enable the server feature of Jack.
  • SRVER_PORT_SERVICE=8072 Set the TCP port number of the server for compilation purposes.
  • SRVER_PORT_ADMIN=8073 Set the TCP port number of the server for admin purposes.
  • SRVER_COUNT=1 Unused at present.
  • SRVER_NB_COMPILE=4 Maximum number of parallel compilations allowed.
  • SRVER_TIMEOUT=60 Number of idle seconds the server has to wait without any - mpilation before shutting itself down.
  • SERVER_LOG={SERVER_LOG:=SERVER_DIR/jack-$SERVER_PORT_SERVICE.log} File where server logs are written. By default, this variable can be overloaded by an environment variable.
  • JACK_VM_COMMAND=${JACK_VM_COMMAND:=java} The default command used to launch a JVM on the host. By default, this variable can be overloaded by environment variable.

Cannot launch Jack server

我这边一开始就编译失败遇到了这个错误,把Ubuntu的全局sock5代\理取消后保证系统在无代\理配置下就可以解决。
如果不能解决先看下是否是相关端口被占用的问题。

sudo netstat -apn | grep 8072
sudo netstat -apn | grep 8073

是就修改端口配置,否则就只能禁用jack编译了(SERVER=false),,会导致编译速度变慢。

can not alloc memory

内存不够用,我把虚拟机内存调成了8G,也可以把SRVER_NB_COMPILE值调小。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值