友善之臂官网:
http://www.arm9.net
友善之臂NanoPC-T2维基使用手册链接:
http://wiki.friendlyarm.com/wiki/index.php/NanoPC-T2/zh
一、下载Android5.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 "[email protected]"
运行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
$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
部分内容如下:
<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 /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 /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) 为了提高编译效率,设置编译器高速缓存:
/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