Ubunt14.04编译android源码配置(附:docker编译android源码)

android源码编译环境
https://source.android.com/source/initializing.html

系统环境: Ubuntu 14.04LTS -x64
编译的系统:msm8909 Android5.1 Lolipop

1、安装JDK

$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk
安装后,需要把Java环境设置一下:

$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac

2、安装编译Android需要的包

$ sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zlib1g-dev:i386 zip

也许这一步并不会特别顺利,你可能会遇到让人蛋疼的依赖问题g++-multilib-gcc-multilib,最简单的办法是,自己手动安装一下gcc-multilib

$ sudo apt-get install gcc-multilib
$ sudo apt-get install g++-multilib

搞定了这个问题后,再重新执行一遍之前的安装命令

3、Git标识

$ git config --global user.name "John Doe"

$ git config --global user.email johndoe@example.com

4、生成一个新的SSH密钥

$ ssh-keygen -t rsa -C "your_email@example.com"
$ ls -a ~/.ssh
列出.ssh 目录中存在的文件

5、安装ssh服务

$ sudo apt-get install openssh-server
$ sudo ps -e |grep ssh 

有sshd,说明ssh服务已经启动,如果没有,则输入:
$ sudo service ssh start

6、scp将本地文件上传到服务器上

$ scp -P 2222 /home/lnmp0.4.tar.gz root@www.vpser.net:/root/lnmp0.4.tar.gz

7、scp获取远程服务器上的文件

$ scp -P 2222 root@www.vpser.net:/root/lnmp0.4.tar.gz /home/lnmp0.4.tar.gz

8、鼠标右键打开shell

$ sudo apt-get install nautilus-open-terminal

9、使用docker编译Android系统源码

安装
$ curl -sSL https://get.docker.com/ | sh 
确认Docker是否安装成功
$ sudo docker run hello-world

10、docker命令免输入sudo

$ sudo groupadd docker
$ sudo gpasswd -a ${USER} docker
$ sudo service docker restart
# 若提示 /var/run/docker.sock 无权限,执行以下命令:
$ sudo chmod a+rw /var/run/docker.sock

11、安装系统基础镜像

$ sudo docker pull ubuntu:14.04    # docker默认都是64位系统

12、简单的docker操作

# 查询本地已有的镜像(注意 镜像编号-IMAGE ID)
$ sudo docker images   
# 输出如下:
REPOSITORY  TAG       IMAGE ID       CREATED       SIZE
ubuntu      14.04     b969ab9f929b   5 weeks ago   188 MB

# 查看本地所有的容器(注意 容器编号-CONTAINER ID)
$ sudo docker ps -a    
# 输出如下:
CONTAINER ID   IMAGE         COMMAND      CREATE STATUS                  PORTS   NAMES
820fe6f58817   ubuntu:14.04  "/bin/bash"  42 hours ago  Exited (0) 25 hours ago         epic_bell

# 启动镜像,并获取一个伪终端
# 注意:实际启动的是容器,启动镜像时会自动创建新容器并启动。
$ sudo docker run -it <REPOSITORY:TAG> /bin/bash   # 使用  仓库名+标签 启动
$ sudo docker run -it <IMAGE ID> /bin/bash     # 使用 IMAGE ID 启动
# 退出镜像
>> $ exit   # 或使用快捷键 Ctrl + D

说明:
1> 这里使用 >> 符号,表示命令在docker的伪终端中执行。
2> 在docker的伪终端中使用 # 符号,我们使用 $ 替代。\

13、添加中文语言支持

启动指定容器后执行操作:
>> $ locale #查询当前语言
>> $ locale -a #查询支持的语言
# 若不支持UTF-8,则添加UTF-8语言支持
>> $ apt-get install language-pack-zh-hant language-pack-zh-hans # 中文
>> $ language-pack-en # 英文
# 修改 /etc/profile 文件,添加:
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh
# 重新加载资源
>> $ source /etc/profile

14、更正时区时间

启动指定容器后执行操作:
>> $ date # 查看当前时间
>> $ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
>> $ echo 'Asia/Shanghai' >/etc/timezone

15、更换系统源

启动指定容器后执行操作:
>> # cp /etc/apt/sources.list /etc/apt/sources.list.bak
>> # echo "xxx" > /etc/apt/sources.list // 使用源替换 xxx
>> # apt-get update
>> # exit
Ubuntu 14.04 阿里云的源如下:

    deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

16、配置编译专用镜像

创建一个容器,并挂载 ~/share 目录到容器中的 /home/share 目录:
$ docker run -it -v ~/share:/home/share ubuntu:14.04 /bin/bash

17、添加64位系统对32位的支持

1>检查是否已经支持

$ dpkg --print-architecture # 若支持,输出 amd64
$ dpkg --print-foreign-architectures # 若支持,输出 i386

2> 手动开启支持

$ sudo dpkg --add-architecture i386
$ sudo apt-get update

3> 安装支持库

更新所有的软件(没必要)

$ sudo apt-get dist-upgrade

只安装支持库(原来需要安装 ia32-libs,目前被以下三个库取代)

$ sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0

18、添加编译Android源码需要的依赖

1> 安装编译工具以及构建套件:

$ sudo apt-get install gcc-multilib g++-multilib build-essential

2> 安装必要的工具软件

$ sudo apt-get install git-core gnupg bison flex gperf pngcrush bc zip curl lzop
$ sudo apt-get install schedtool libxml2 libxml2-utils xsltproc squashfs-tools

3> 安装其他需要的库

$ sudo apt-get install libesd0-dev libsdl1.2-dev libwxgtk2.8-dev libswitch-perl
$ sudo apt-get install libssl1.0.0 libssl-dev lib32readline-gplv2-dev libncurses5-dev

19、安装JDK

下载jdk-7u79-linux-x64.tar.gz文件

解压到当前目录下

$ tar -xvf ./jdk-7u79-linux-x64.tar.gz

创建目标目录

$ sudo mkdir -p /usr/lib/jvm/jdk1.7.0/

移动文件到目标目录

$ sudo mv jdk1.7.0_79/* /usr/lib/jvm/jdk1.7.0/

添加环境变量

修改 /etc/profile 文件,添加如下内容:

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0
export JAVA_BIN=$JAVA_HOME/bin
export JAVA_LIB=$JAVA_HOME/lib
export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
export PATH=$JAVA_BIN:$PATH


配置完成后,执行如下命令使其立即生效:

$ source /etc/profile

检查JDK环境是否安装成功

$ java -version

20、提交容器保存为镜像

配置好环境之后,保存此容器为一个镜像:

$ sudo docker commit -m "xxx" <CONTAINER ID> <TEPO:TAG>

例如,使用$ docker ps -a指令查询刚才的容器编号为1a61adfb1953,我们保存为一个本地镜像,则可执行:

$ sudo docker commit -m "android-build" 1a61adfb1953 local:v1.0

使用$ docker images可以查看刚生成的镜像:

输出

REPOSITORY TAG IMAGE ID CREATED SIZE
build-android v1.0 49df00985bd1 2 hours ago 971 MB
ubuntu 14.04 b969ab9f929b 5 weeks ago 188 MB

21、使用镜像编译Android系统源码

1> 准备系统源码
在宿主机上,创建源码目录,如 /home/android 目录,并放入Android系统源码。

2> 挂载源码目录到docker容器中

$ docker run -it -v /home/android:/home/android 49df00985bd1 /bin/bash

3> 开始编译源码

$ cd /home/android
$ source build/envsetup.sh
$ make -j8

附:命令说明:

bc 命令行计算器
lzop 快速压缩工具
flex 词法分析器生成器
curl 基于URL的文件传输工具
gperf 哈希函数生成器
bison 语法分析器生成器
xsltproc 快速XSLT引擎,可以通过XSL文件把XML转为HTML,XHTML,PDF...
schedtool 查询或设置CPU状态
squashfs-tools linux内核压缩工具,只读式压缩文件系统Image
pngcrush 批量压缩PNG图片
libxml2 libxml2-utils 操作XML文档工具

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,601评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,367评论 1 305
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,249评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,539评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,967评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,929评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,098评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,825评论 0 207
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,609评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,796评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,282评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,603评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,277评论 3 242
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,159评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,959评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,079评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,874评论 2 277

推荐阅读更多精彩内容