Ubuntu 16.04 下载、编译 友善之臂NanoPC-T2的Android5.1.1源码

友善之臂官网:
http://www.arm9.net
友善之臂NanoPC-T2维基使用手册链接:
http://wiki.friendlyarm.com/wiki/index.php/NanoPC-T2/zh

一、下载Android5.1源代码

  1. Android源代码的下载需要使用repo,其安装和使用请查看 https://source.android.com/source/downloading.html
    这个网站需要下载一个VPN软件才能打开。(https://www.getlantern.org/

    repo用于管理多个项目集合,因为一个产品可能包含多个git项目,不同git项目可以形成不同产品,这样可以通过repo来进行管理。可以理解repo就是一系列的git project的集合。
    repo init只是用来更新repo的配置和脚本集。
    repo sync用来下载当前repo配置的所有项目。


下面是这个网站上安装Repo的方法:

1.安装Repo
Repo是一个工具,使它更容易使用Git在Android的上下文中。

$mkdir ~/bin
$PATH= ~/bin:$PATH

下载Repo工具并确保它是可执行的:

$curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

2.初始化Repo客户端
安装Repo后,设置您的客户端以访问Android源代码库:

创建一个空目录来保存您的工作文件。如果你使用MacOS,这必须是一个区分大小写的文件系统。给它任何你喜欢的名字:

$ mkdir android
$ cd android

使用您的真实姓名和电子邮件地址配置git。要使用Gerrit代码审查工具,您需要一个与注册的Google帐户相关联的电子邮件地址。请确保这是您可以接收邮件的实际地址。您在此处提供的名称将显示在代码提交的归因中。

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

运行repo init以下载最新版本的Repo及其所有最新的错误修复。您必须为清单指定一个URL,该URL指定Android源中包含的各个存储库将放置在工作目录中的位置。

$ repo init -u https://android.googlesource.com/platform/manifest

要检出除“master”之外的分支,请使用指定-b。有关分支的列表,请参阅源代码标签和构建。

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

成功的初始化将以一条消息结束,说明Repo在您的工作目录中初始化。您的客户端目录现在应包含一个.repo目录,其中将保存清单等文件。

3.下载Android源代码树
要从默认清单中指定的存储库将Android源代码树下拉到工作目录,请运行

$ repo sync

Android源文件将位于工作目录中它们的项目名称下。初始同步操作需要一个小时或更长时间才能完成。有关更多 repo sync和其他Repo命令,请参阅开发部分。

4.使用身份验证
默认情况下,访问Android源代码是匿名的。为了防止服务器过度使用,每个IP地址都与配额关联。

当与其他用户共享IP地址时(例如,当从NAT防火墙外访问源存储库时),配额甚至可以触发常规使用模式(例如,如果许多用户在短时间内从同一IP地址同步新客户端)。

在这种情况下,可以使用认证访问,然后对每个用户使用单独的配额,而不考虑IP地址。

第一步是创建一个密码,密码生成器 ,并按照密码生成器页面上的说明。
密码生成网址:https://www.googlesource.com/new-password
登录谷歌账号后,按照提示操作。

第二步是使用以下清单URI强制进行身份验证访问: https://android.googlesource.com/a/platform/manifest。请注意/a/目录前缀如何 触发强制验证。您可以使用以下命令将现有客户端转换为使用强制验证:

$repo init -u https://android.googlesource.com/a/platform/manifest

5.网络问题疑难解答:
当从代理后面下载(这在一些公司环境中很常见)时,可能需要显式地指定repo使用的代理:

$ export HTTP_PROXY=http://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port>
$ export HTTPS_PROXY=http://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port>

更少见的是,Linux客户端遇到连接问题,在下载过程中陷入困境(通常在“接收对象”期间)。据报道,调整TCP / IP堆栈的设置和使用非并行命令可以改善这种情况。您需要root权限才能修改TCP设置:

$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1

  1. 按照官网安装好repo后,开始下载友善之臂NanoPC-T2的Android5.1.1源码:
$mkdir android && cd android
$repo init -u https://github.com/friendlyarm/android_manifest.git -b nanopi2-lollipop-mr1
$repo sync -j8

其中“android”是指工作目录。
通过 -b 指定不同的分支即可

二、遇到的问题及解决方法
1、翻墙:安装配置Lantern
去官网下载相应版本的客户端:https://www.getlantern.org/
安装好后设置代理,打开Lantern网页界面点击 设置->高级设置 查看代理服务器
本地开启VPN后,GIt也需要设置代理,才能正常略过GFW,访问goole code等网站
我的Lantern代理界面:
这里写图片描述

根据自己的VPN代理服务器设置如下:

$git config --global http.proxy http://127.0.0.1:40637
$git config --global https.proxy https://127.0.0.1:40637
$git config --global http.proxy socks5://127.0.0.1:33256
$git config --global https.proxy socks5://127.0.0.1:33256

取消代理设置:

$git config --global --unset http.proxy
$git config --global --unset https.proxy

转载:
http://blog.csdn.net/tanningzhong/article/details/52817399

2、安装repo时执行

$curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

报错:

$fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
$fatal: error [Errno 101] Network is unreachable

解决办法:
(1)先单独克隆repo(需翻墙)

$git clone https://gerrit.googlesource.com/git-repo

这里写图片描述

然后将git-repo目录里面的repo文件复制到bin目录,然后

$chmod a+x ~/bin/repo

再在同步源码的工作目录新建.repo文件夹,把git-repo重命名为repo复制到.repo目录下:
重新初始化:

$repo init -u https://github.com/friendlyarm/android_manifest.git -b nanopi2-lollipop-mr1

这里写图片描述

$repo sync -j8

转载:
http://www.blogs8.cn/posts/ANun578

(2) 不翻墙的解决办法:更换repo下载源

$mkdir ~/bin
$PATH= ~/bin:$PATH
$curl "http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo" > ~/bin/repo 
$chmod a+x ~/bin/repo

3、执行repo sync报错:

android.googlesource.com:443; Connection refused while accessing https://android.googlesource.com/platform/abi/cpp.git/info/refs 

不翻墙:替换了fetch的URL路径,更换下载源

$cd android/.repo/manifests
$gedit default.xml

部分内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>

  <remote  name="aosp"
           fetch="git://Android.git.linaro.org/" />
  **//将原来的fetch="https://android.googlesource.com" />
           改为fetch="git://Android.git.linaro.org/" />
           或改为fetch="git://codeaurora.org"**

  <remote  name="origin"
           fetch="."
           revision="refs/heads/s5p4418-lollipop-mr1" />

  <default revision="refs/tags/android-5.1.1_r6"
           remote="aosp"
           sync-j="4" />

4、repo sync 时的自动续接脚本

android文件夹下新建一个download.sh脚本文件,里面的内容是:

echo "======start repo sync======"
repo sync -j8
while [ $? == 1 ]; do
echo "======repo sync failed, repo sync again======"
sleep 3
repo sync -j8
done
$chmod a+x download.sh

然后终端输入

$./download.sh

就可以开始下载了,用这一步代替官方文档里的repo sync。
当连接不上终端时休息3毫秒然后再自动repo sync,这样就很完美了。

转载:
https://tieba.baidu.com/p/3196405110

5、遇到下面的错误可能是网络问题,可以忽略报错。

这里写图片描述

这里写图片描述

由于网络原因可能时间较长,继续等待即可。

error: Exited sync due to fetch errors

执行 repo sync

下载完:

这里写图片描述


二、编译Android源码:

1、安装依赖

sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
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 lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4

或:

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

Ubuntu 16.04请务必使用上面的依赖,Ubuntu 16.04需要的依赖和Ubuntu 14.04所需要的依赖是不同的

上面的依赖环境有重复,有的安装有冲突,可以忽略不安装。


下面是官网提供的Ubuntu 14.04的依赖:
https://source.android.com/source/initializing.html
安装所需的软件包(Ubuntu 14.04)
您将需要一个64位版本的Ubuntu。推荐Ubuntu 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

注意:要使用SELinux工具进行策略分析,还要安装python-networkx软件包。
注意:如果您正在使用LDAP并要运行ART主机测试,还要安装该libnss-sss:i386 软件包。


2、安装open JDK7
从Android 5.1源码的编译只能使用OpenJDK7:

由于Ubuntu 16.04没有OpenJDK7的源,因此在16.04上安装OpenJDK7需要执行下面的命令:

sudo add-apt-repository ppa:openjdk-r/ppa 
sudo apt-get update
sudo apt-get install openjdk-7-jdk 

配置OpenJDK.打开/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

配置正确则如下:

这里写图片描述

3、修改源码

(1)修改 :

cp /usr/bin/ld.gold   <source_android>/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld 

不修改会报错:

这里写图片描述

引用:
http://blog.csdn.net/u014770862/article/details/52624851

修改过上述代码后,执行

make update-api

否则会报错:

这里写图片描述

(2)如果还报同样的错误就修改下面的文件:

vim <source_android>/art/build/Android.common_build.mk 
//修改第119行

修改前:

# Host.
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),true)

修改后:

# Host.
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),false)

(3)源码路径里面不能有中文,否则会报错。

4、开始编译
配置Cache
(1) 在 .bashrc文件末尾添加:export USE_CCACHE = 1

echo export USE_CCACHE=1 >> ~/.bashrc
source ~/.bashrc

(2) 为了提高编译效率,设置编译器高速缓存:

<source_android>/prebuilts/misc/linux-x86/ccache/ccache -M 50G

(3) 接着导入编译Android源码所需的环境变量和其它参数:

source build/envsetup.sh

(4) 运行lunch命令选择编译目标:

lunch aosp_nanopi2-userdebug

(5) 开始编译,执行

make -j8

8为同时编译的线程数,一般google推荐这个数字为2倍的cpu个数再加上2,比如4核,就是10。

关于cpu个数,可以用下面命令查看:

cat  /proc/cpuinfo

编译成功:

这里写图片描述

引用:
http://blog.csdn.net/fuchaosz/article/details/51487585

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值