编译呀(通过Docker搭建编译环境)2019-09-17

  • 获取基础镜像
sudo docker pull ubuntu:14.04
  • 创建容器
    创建容器时,挂载当前用户的share路径到容器的/home/share上,方便后面拷贝文件
docker run -it -v ~/share:/home/share 2c5e00d77a67 /bin/bash   //2c5e00d77a67 ubuntu image id
  • 更正时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' >/etc/timezone
  • 更换系统源
cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "xxx" > /etc/apt/sources.list  // 使用源替换 xxx
apt-get update
exit

阿里云的源

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
  • 启动容器
docker ps -a //查看刚刚运行的容器的id
docker start f5df2d39fca4 //启动容器
docker exec -it f5df2d39fca4 //进入容器终端
  • 添加64位系统对32位的支持
    • 检查是否已经支持
      dpkg --print-architecture     # 若支持,输出 amd64
      dpkg --print-foreign-architectures    # 若支持,输出 i386
    
    • 手动开启支持
     sudo dpkg --add-architecture i386
     sudo 
    
    • 安装支持库
    # 只安装支持库(原来需要安装 ia32-libs,目前被以下三个库取代)
    apt-get dist-upgrade
    # 只安装支持库(原来需要安装 ia32-libs,目前被以下三个库取代)
    apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
    
  • 添加编译Android源码需要的依赖
    • 安装编译工具以及构建套件:
      apt-get install gcc-multilib g++-multilib build-essential
    
    • 安装必要的工具软件
    apt-get install git-core gnupg bison flex gperf pngcrush bc zip curl lzop
     apt-get install schedtool libxml2 libxml2-utils xsltproc squashfs-tools
    
    • 安装其他需要的库
       apt-get install libesd0-dev libsdl1.2-dev libwxgtk2.8-dev libswitch-perl 
       apt-get install libssl1.0.0 libssl-dev lib32readline-gplv2-dev libncurses5-dev
       apt-get install pngquant
       apt-get install imagemagick
    

命令说明
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文档工具

  • 安装JDK
    编译Android 5.1需要安装Java开发环境,我们使用Jdk-7的版本。这里我们使用oracle jdk 1.7,我们使用手动安装的方式,可以从官网下载对应版本的安装包(http://www.oracle.com/technetwork/java/javase/archive-139210.html)。
    我们下载的是 jdk-7u79-linux-x64.tar.gz 的版本,把下载下来的安装包拷贝到~/share目录下,由于之前做了目录挂载,我们可以在容器的 /home/share 目录下找到此安装包,接下来进行安装:
# 解压到当前目录下
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

# 另外一种方法
apt-get install software-properties-common
add-apt-repository ppa:openjdk-r/ppa
apt-get update
apt-get install openjdk-8-jdk

# 检查下是否安装成功
java --version
  • 提交容器保存为镜像
docker commit -m "xxx" <CONTAINER ID> <TEPO:TAG>

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

  • 使用镜像编译Android系统源码
    • 准备系统源码
      在宿主机上,创建源码目录,如 /home/android 目录,并放入Android系统源码。

    • 挂载源码目录到docker容器中

        docker run -it -v /home/android:/home/android 49df00985bd1 /bin/bash
      
    • 开始编译源码

      export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8192m"
      out/host/linux-x86/bin/jack-admin kill-server
      out/host/linux-x86/bin/jack-admin start-server
      cd /home/android
      ./build.sh
       make -j8
    

error

ninja: build stopped: subcommand failed.

编译android7.0出现的错误:

ninja: build stopped: subcommand failed.

解决方法:

vi prebuilts/sdk/tools/jack-admin 1.找到如下语句: JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=TMPDIR JACK_SERVER_VM_ARGUMENTS -cpLAUNCHER_JAR LAUNCHER_NAME" 2.将上述语句修改为: JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=TMPDIR JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cpLAUNCHER_JAR $LAUNCHER_NAME"

主要是添加了-Xmx4096m参数,接下来在源码目录下执行如下命令重启jack-admin服务:

./prebuilts/sdk/tools/jack-admin stop-server ./prebuilts/sdk/tools/jack-admin start-server

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

推荐阅读更多精彩内容