如果只需要编译一个版本的aosp,那么如果在主机上架建环境即可,可写的程序如果要在各个aosp版本中编译,那在主机上架建多个aosp编译环境可以会比较麻烦,github上找到一个openstf用docker架建aosp环境的代码,地址:https://github.com/openstf/docker-aosp

创建Dockerfile

aosp主要涉及三种环境jdk6,jdk7,jdk8,根据aosp的版本不同可以选择不同的Dockerfile

FROM ubuntu:14.04
MAINTAINER asmrobot asmrobot@hotmail.com ADD sources.list /sources.list
RUN mv /sources.list /etc/apt/sources.list # Update
RUN export DEBIAN_FRONTEND=noninteractive && \
dpkg --add-architecture i386 && \
apt-get update && \
apt-get -y install software-properties-common # Install AOSP dependencies
RUN export DEBIAN_FRONTEND=noninteractive && \
apt-get -y install build-essential && \
apt-get -y install git gnupg ccache lzop flex bison gperf \
build-essential zip curl zlib1g-dev zlib1g-dev:i386 libc6-dev \
lib32bz2-1.0 lib32ncurses5-dev x11proto-core-dev libx11-dev:i386 \
libreadline6-dev:i386 lib32z1-dev libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils xsltproc libreadline6-dev lib32readline-gplv2-dev \
libncurses5-dev bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev \
lib32bz2-dev squashfs-tools pngcrush schedtool dpkg-dev && \
ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so. \
/usr/lib/i386-linux-gnu/libGL.so # Install JDK
RUN export DEBIAN_FRONTEND=noninteractive && \
add-apt-repository ppa:webupd8team/java && \
apt-get update && \
echo debconf shared/accepted-oracle-license-v1- select true | \
sudo debconf-set-selections && \
echo debconf shared/accepted-oracle-license-v1- seen true | \
sudo debconf-set-selections && \
apt-get -y install oracle-java6-installer oracle-java6-set-default # Install repo tool
ADD repo /usr/local/bin/repo
RUN chmod +x /usr/local/bin/repo # Set up workspace
RUN git config --global user.email "asmrobot@hotmail.com" && \
git config --global user.name "asmrobot" && \
git config --global color.ui auto # Volumes for AOSP source
VOLUME ["/aosp"]
VOLUME ["/mirror"] # Build commands must be run in the AOSP source tree
WORKDIR /aosp # Volume for external app source
VOLUME ["/app"] # Volume for build artifacts
VOLUME ["/artifacts"] # Set up entrypoint while working around docker/hub-feedback#
ADD aosp.sh /usr/local/bin/aosp.sh
RUN chmod +x /usr/local/bin/aosp.sh
RUN ln -s /usr/local/bin/aosp.sh /aosp.sh # Show help by default
CMD ["/aosp.sh", "--help"]

jdk6

FROM ubuntu:14.04
MAINTAINER asmrobot asmrobot@hotmail.com ADD sources.list /sources.list
RUN mv /sources.list /etc/apt/sources.list # Update
RUN export DEBIAN_FRONTEND=noninteractive && \
dpkg --add-architecture i386 && \
apt-get update # Install AOSP dependencies
RUN export DEBIAN_FRONTEND=noninteractive && \
apt-get -y install build-essential && \
apt-get -y install git gnupg ccache lzop flex bison gperf \
build-essential zip curl zlib1g-dev zlib1g-dev:i386 libc6-dev \
lib32bz2-1.0 lib32ncurses5-dev x11proto-core-dev libx11-dev:i386 \
libreadline6-dev:i386 lib32z1-dev libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils xsltproc libreadline6-dev lib32readline-gplv2-dev \
libncurses5-dev bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev \
lib32bz2-dev squashfs-tools pngcrush schedtool dpkg-dev && \
ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so. \
/usr/lib/i386-linux-gnu/libGL.so # Install JDK
RUN export DEBIAN_FRONTEND=noninteractive && \
apt-get -y install openjdk--jdk # Install repo tool
ADD repo /usr/local/bin/repo
RUN chmod +x /usr/local/bin/repo # Set up workspace
RUN git config --global user.email "asmrobot@hotmail.com" && \
git config --global user.name "asmrobot" && \
git config --global color.ui auto # Volumes for AOSP source
VOLUME ["/aosp"]
VOLUME ["/mirror"] # Build commands must be run in the AOSP source tree
WORKDIR /aosp # Volume for external app source
VOLUME ["/app"] # Volume for build artifacts
VOLUME ["/artifacts"] # Set up entrypoint while working around docker/hub-feedback#
ADD aosp.sh /usr/local/bin/aosp.sh
RUN chmod +x /usr/local/bin/aosp.sh
RUN ln -s /usr/local/bin/aosp.sh /aosp.sh # Show help by default
CMD ["/aosp.sh", "--help"]

jdk7

FROM ubuntu:16.04
MAINTAINER asmrobot asmrobot@hotmail.com ADD sources.list /sources.list
RUN mv /sources.list /etc/apt/sources.list # Install AOSP dependencies
RUN export DEBIAN_FRONTEND=noninteractive && \
apt-get update && \
apt-get -y 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 python # Install JDK
RUN export DEBIAN_FRONTEND=noninteractive && \
apt-get -y install openjdk--jdk # Install repo tool
ADD repo /usr/local/bin/repo
RUN chmod +x /usr/local/bin/repo # Set up workspace
RUN git config --global user.email "asmrobot@hotmail.com" && \
git config --global user.name "asmrobot" && \
git config --global color.ui auto # Volumes for AOSP source
VOLUME ["/aosp"]
VOLUME ["/mirror"] # Build commands must be run in the AOSP source tree
WORKDIR /aosp # Volume for external app source
VOLUME ["/app"] # Volume for build artifacts
VOLUME ["/artifacts"] # Set up entrypoint while working around docker/hub-feedback#
ADD aosp.sh /usr/local/bin/aosp.sh
RUN chmod +x /usr/local/bin/aosp.sh
RUN ln -s /usr/local/bin/aosp.sh /aosp.sh # Show help by default
CMD ["/aosp.sh", "--help"]

jdk8

三个版本中大部分代码都是一样的,只是每种环境安装的相应软件不同。在openstf之上改变的有

1.ubuntu的source.list,jdk6,7为163的源地址,jdk8为aliyun的。

2.repo中aosp的源码下载地址改为清华的repo:https://mirrors.tuna.tsinghua.edu.cn/git/git-repo

3.移除了原版中创建镜像的代码,减少了点参数。。。。参数太少看着眩晕,如果想创建私有aosp源可以在网上找资源

  镜像默认命令文件为/aosp.sh

  支持三种操作:    

checkout一个分支:checkout-branch <mirrorurl> <branch> [sync-options]
必须的volumes:
/aosp 你想要存放aosp源码的目录
Checks out 一个指定的分支到 /aosp.
编译全部全部:build-all <target> [make-options]
必须的volumes:
/aosp 存放aosp源码的目录
用你指定的target编译所有的/aosp 目录中的源码树。
编译指定模块:build <target> <appname> [make-options]
必须的volumes:
/app app存放代码的目录 (i.e.包含 Android.mk 的目录)
/aosp 存放aosp源码的目录
/artifacts app代码生成后的目录
用你指定的target编译/app源码,程序会先把/app复制到 /aosp/external/MY_<appname>
. <appname> 必须不有冲突

编译aosp前的准备

1.构建docker容器

  //切换到dockerfile目录

  cd /var/aosp-docker/jdk6

  //以dockerfile创建aosp/jdk6镜像

  sudo docker build -t aosp/jdk6 .

2.checkout出你需要的aosp源码

  sudo docker run --rm -ti -v /var/aosp-4.4.2:/aosp aosp/jdk6 /aosp.sh checkout-branch https://aosp.tuna.tsinghua.edu.cn/platform/manifest android-4.4.2_r2

  这里的源使用的清华的镜像,如果你有私用镜像改上下面镜像地址即可。  

分支和sdk level对应表
branch sdk level
android-4.4_r1 19
android-4.4.2_r2
android-4.4.4_r2.0.1
android-4.4w_r1 20
android-5.0.0_r1 21
android-5.0.2_r3
android-5.1.0_r1 22
android-5.1.1_r38
android-6.0.0_r1 23
android-6.0.1_r74
android-7.0.0_r1 24
android-7.1.0_r7
 
编译你的原生程序
  1.在基于aosp编译任何程序之前你必须要先整体编译一下aosp
    sudo docker run -ti --rm -v -v /var/aosp-4.4.2:/aosp aosp/jdk6 /aosp.sh build-all aosp_arm-eng
    以aosp_arm-eng目标类型编译aosp
    常见目标类型大概有以下几种:
aosp_arm-eng
aosp_x86-eng
aosp_mips-eng
vbox_x86-eng
aosp_hammerhead-userdebug
aosp_mako-userdebug
mini_mips-userdebug
mini_x86-userdebug
mini_armv7a_neon-userdebug
aosp_grouper-userdebug
aosp_tilapia-userdebug
aosp_flo-userdebug
aosp_deb-userdebug
aosp_manta-userdebug
2.编译你的程序
  以一个hello world为示例
  

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS) APP_STL := stlport_static LOCAL_SRC_FILES:= \
test.cpp LOCAL_CFLAGS += -DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION) LOCAL_CFLAGS += -std=c++ LOCAL_MODULE:= test
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)

Android.mk

#include <stdio.h>

int main(int argc, char **argv)
{
printf("hello world!~");
return ;
}

test.cpp

docker run -ti --rm -v  /var/aosp-4.4.2:/aosp -v /home/xxxx/test:/app -v /home/xxxx/test-bin:/artifacts aosp/jdk6 /aosp.sh build aosp_arm-eng test

编译成功后出现:

编译好的程序就在挂载/artifacts的目录中,我的是:/home/xxxx/test-bin

把test 用adb push 到手机上运行,如图:

  

我整理后的Dockerfile github:https://github.com/asmrobot/aosp-docker

使用docker创建aosp编译环境的更多相关文章

  1. Docker 创建php 开发环境遇到的权限问题解决方案

    最近我将公司的开发,和测试环境都运行到docker 上面,因为开发,测试基本都是装代码拉到本址,然后,再装目录,挂载到镜像目录中如:我用的是docker-compose # development.y ...

  2. Docker创建MySQL容器环境两部曲

    1:下载MySQL镜像 需要执行以下命令,确保主机或者VM联网,从官网下载mysql的最新镜像(镜像版本以官网为主) docker  pull  mysql 下载成功后执行 docker image ...

  3. Android 为库(library)创建不同编译环境

    项目中需要导入库,一般有两种情况,一种是直接路径导入,一种是导入库的 aar 文件. 1. 设置库项目 1. 在库项目的 src 目录下设置 debug 目录,里面可以添加代码或者 res 文件夹. ...

  4. Docker容器搭建android编译环境

    Docker容器搭建android编译环境 目录 1 部署容器 1.1 手动部署 1.1.1 配置docker 1.1.2 启动容器 1.1.3 配置环境 1.2 Dockerfile 2 镜像管理 ...

  5. (原) ubuntu下用pycharm2016.1专业版配docker编译环境(docker Interpreter)

    一:先创建docker-machine 先创建docker machine.我主机上的虚拟机是virtualbox.$ docker-machine create --driver virtualbo ...

  6. 建立基于docker的编译环境

    如果我们要在一台开发主机上搭一个编译环境,我们需要安装一堆依赖库和编译工具.如果我们有多个不同的项目同时进行,这些项目的编译工具和依赖库又都不一样,如果我们把这些东西全都塞到一台机器里,会不会有冲突呢 ...

  7. 利用 Docker 构建一个简单的 java 开发编译环境

    目前 Java 语言的版本很多,除了常用的 Java 8,有一些遗留项目可能使用了 Java 7,也可能有一些比较新的的项目使用了 Java 10 以上的版本.如果想切换自己本地的 Java 开发环境 ...

  8. 创建eclipse针对NDK的联合编译环境。

    警告, 这篇文章是老的配置方式, 随着goolge工具的完善,有了更高级的配置方式,参考文章: 1.http://jingyan.baidu.com/article/3ea51489e7a9bd52e ...

  9. Python3编译安装以及创建虚拟运行环境

    一.yum安装pip# yum -y install epel-release   #Centos6.8安装epel源# yum -y install python-pip手动安装pip# wget ...

随机推荐

  1. php学习十四:抽象,接口和多态

    多态为面向对象编程的精华所在,js等面向过程的语言虽然可以模拟面向对象,但是毕竟模仿的永远比不上真的,所以了解而且会使用面向对象的多态是必不可少的 在了解多态之前,我们必须要了解接口,但是接口又是在抽 ...

  2. PyQt4消息窗口

    默认情况下,如果我们单击了窗口标题栏上的X标记,窗口就会被关闭.但是有些时候我们想要改变这一默认行为.比如,我们正在编辑的文件内容发生了变化,这时若单击X标记关闭窗口,编辑器就应当但出确认窗口. #! ...

  3. piblog 0.2

    在一个Web App中,所有的数据,包括用户的信息,日志,评论等,都存在数据库中.在piblog中使用MySQL作为数据库.Web App中由很多地方需要使用数据库.访问数据库需要创建数据库连接.游标 ...

  4. 【VUE】Mac下vue 开发环境搭建,以及目录结构

    1 安装Node.js 参看 node.js环境安装   http://www.cnblogs.com/richerdyoung/p/7265786.html 2 安装淘宝镜像 npm install ...

  5. java基础---->多线程之synchronized(六)

    这里学习一下java多线程中的关于synchronized的用法.我来不及认真地年轻,待明白过来时,只能选择认真地老去. synchronized的简单实例 一. synchronized在方法上的使 ...

  6. luogu P1379 八数码难题(A*算法入门详细讲解)

     代码实现细节 #include<cstdio> #include<cstring> #include<iostream> using namespace std; ...

  7. 【BZOJ2668】[cqoi2012]交换棋子 费用流

    [BZOJ2668][cqoi2012]交换棋子 Description 有一个n行m列的黑白棋盘,你每次可以交换两个相邻格子(相邻是指有公共边或公共顶点)中的棋子,最终达到目标状态.要求第i行第j列 ...

  8. 【BZOJ3551】[ONTAK2010]Peaks加强版 最小生成树+DFS序+主席树

    [BZOJ3545][ONTAK2010]Peaks Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困 ...

  9. 纯HTML自动刷新页面或重定向(http-equiv属性的refresh)

    refresh 属性值  --  刷新与跳转(重定向)页面 refresh出现在http-equiv属性中,使用content属性表示刷新或跳转的开始时间与跳转的网址 refresh示例一:5秒之后刷 ...

  10. 利用阿里云腾讯云正版KMS服务器端口转发

    注意:以下内容仅供实验,请勿用于任何非法用途我们知道,阿里云和腾讯云在内网部署了KMS服务器,而且是正版的,那么,有没有办法使用公网的计算机直接或间接连接到这些KMS服务器呢,受代理服务器和跳板机配置 ...