├── .gitignore ├── .travis.yml ├── Dockerfile ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | 3 | services: 4 | - docker 5 | 6 | script: 7 | - docker build --quiet=true -t uber/android-build-environment . 8 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Android Dockerfile 2 | 3 | FROM ubuntu:14.04 4 | 5 | MAINTAINER Mobile Builds Eng "mobile-builds-eng@uber.com" 6 | 7 | # Sets language to UTF8 : this works in pretty much all cases 8 | ENV LANG en_US.UTF-8 9 | RUN locale-gen $LANG 10 | 11 | ENV DOCKER_ANDROID_LANG en_US 12 | ENV DOCKER_ANDROID_DISPLAY_NAME mobileci-docker 13 | 14 | # Never ask for confirmations 15 | ENV DEBIAN_FRONTEND noninteractive 16 | 17 | # Update apt-get 18 | RUN rm -rf /var/lib/apt/lists/* 19 | RUN apt-get update 20 | RUN apt-get dist-upgrade -y 21 | 22 | # Installing packages 23 | RUN apt-get install -y \ 24 | autoconf \ 25 | build-essential \ 26 | bzip2 \ 27 | curl \ 28 | gcc \ 29 | git \ 30 | groff \ 31 | lib32stdc++6 \ 32 | lib32z1 \ 33 | lib32z1-dev \ 34 | lib32ncurses5 \ 35 | lib32bz2-1.0 \ 36 | libc6-dev \ 37 | libgmp-dev \ 38 | libmpc-dev \ 39 | libmpfr-dev \ 40 | libxslt-dev \ 41 | libxml2-dev \ 42 | m4 \ 43 | make \ 44 | ncurses-dev \ 45 | ocaml \ 46 | openssh-client \ 47 | pkg-config \ 48 | python-software-properties \ 49 | rsync \ 50 | software-properties-common \ 51 | unzip \ 52 | wget \ 53 | zip \ 54 | zlib1g-dev \ 55 | --no-install-recommends 56 | 57 | # Install Java 58 | RUN apt-add-repository ppa:openjdk-r/ppa 59 | RUN apt-get update 60 | RUN apt-get -y install openjdk-8-jdk 61 | 62 | # Clean Up Apt-get 63 | RUN rm -rf /var/lib/apt/lists/* 64 | RUN apt-get clean 65 | 66 | # Install Android SDK 67 | RUN wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz 68 | RUN tar -xvzf android-sdk_r24.4.1-linux.tgz 69 | RUN mv android-sdk-linux /usr/local/android-sdk 70 | RUN rm android-sdk_r24.4.1-linux.tgz 71 | 72 | ENV ANDROID_COMPONENTS platform-tools,android-23,build-tools-23.0.2,build-tools-24.0.0 73 | 74 | # Install Android tools 75 | RUN echo y | /usr/local/android-sdk/tools/android update sdk --filter "${ANDROID_COMPONENTS}" --no-ui -a 76 | 77 | # Install Android NDK 78 | RUN wget http://dl.google.com/android/repository/android-ndk-r12-linux-x86_64.zip 79 | RUN unzip android-ndk-r12-linux-x86_64.zip 80 | RUN mv android-ndk-r12 /usr/local/android-ndk 81 | RUN rm android-ndk-r12-linux-x86_64.zip 82 | 83 | # Environment variables 84 | ENV ANDROID_HOME /usr/local/android-sdk 85 | ENV ANDROID_SDK_HOME $ANDROID_HOME 86 | ENV ANDROID_NDK_HOME /usr/local/android-ndk 87 | ENV JENKINS_HOME $HOME 88 | ENV PATH ${INFER_HOME}/bin:${PATH} 89 | ENV PATH $PATH:$ANDROID_SDK_HOME/tools 90 | ENV PATH $PATH:$ANDROID_SDK_HOME/platform-tools 91 | ENV PATH $PATH:$ANDROID_SDK_HOME/build-tools/23.0.2 92 | ENV PATH $PATH:$ANDROID_SDK_HOME/build-tools/24.0.0 93 | ENV PATH $PATH:$ANDROID_NDK_HOME 94 | 95 | # Export JAVA_HOME variable 96 | ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/ 97 | 98 | # Support Gradle 99 | ENV TERM dumb 100 | ENV JAVA_OPTS "-Xms4096m -Xmx4096m" 101 | ENV GRADLE_OPTS "-XX:+UseG1GC -XX:MaxGCPauseMillis=1000" 102 | 103 | # Cleaning 104 | RUN apt-get clean 105 | 106 | # Add build user account, values are set to default below 107 | ENV RUN_USER mobileci 108 | ENV RUN_UID 5089 109 | 110 | RUN id $RUN_USER || adduser --uid "$RUN_UID" \ 111 | --gecos 'Build User' \ 112 | --shell '/bin/sh' \ 113 | --disabled-login \ 114 | --disabled-password "$RUN_USER" 115 | 116 | # Fix permissions 117 | RUN chown -R $RUN_USER:$RUN_USER $ANDROID_HOME $ANDROID_SDK_HOME $ANDROID_NDK_HOME 118 | RUN chmod -R a+rx $ANDROID_HOME $ANDROID_SDK_HOME $ANDROID_NDK_HOME 119 | 120 | # Creating project directories prepared for build when running 121 | # `docker run` 122 | ENV PROJECT /project 123 | RUN mkdir $PROJECT 124 | RUN chown -R $RUN_USER:$RUN_USER $PROJECT 125 | WORKDIR $PROJECT 126 | 127 | USER $RUN_USER 128 | RUN echo "sdk.dir=$ANDROID_HOME" > local.properties 129 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Uber Technologies, Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Android Build on Docker Container 2 | === 3 | 4 | 5 | ### Mac OSX 6 | 7 | #### Prerequisites 8 | 9 | ##### Create container with docker-machine : 10 | 11 | $ docker-machine create -d virtualbox --virtualbox-disk-size "200000" --virtualbox-memory 4096 --virtualbox-hostonly-cidr "192.168.90.1/24" default 12 | 13 | $ docker-machine upgrade default 14 | 15 | 16 | ##### To build the container image: 17 | 18 | $ eval "$(docker-machine env default)" 19 | 20 | $ docker build -t uber/android-build-environment . 21 | 22 | ##### Android Build : 23 | 24 | $ cd /path/to/your/android/source/root 25 | 26 | $ docker run -i -v $PWD:/project -t uber/android-build-environment /bin/bash /project/ci/build.sh 27 | 28 | #### FAQ 29 | 30 | ##### Having connectivity issue when connect via VPN 31 | 32 | Stop the docker-machine vm: 33 | 34 | 35 | $ docker-machine stop default 36 | 37 | Then connect to your VPN and restart the docker vm: 38 | 39 | $ docker-machine start default 40 | $ eval "$(docker-machine env default)" 41 | 42 | [Read more](http://olympia.readthedocs.org/en/latest/topics/development/vpn.html) 43 | --------------------------------------------------------------------------------