A couple of years ago I wrote a post explaining how to develop and Android application inside a Docker container. After some time away from Android development I tried to follow the instructions in my post but they didn’t work quite well.

A lot has changed in the way Android applications are developed since my last post. Installing SDK elements is easier and Kotlin is the language of choice now. Luckily, once we put everything inside Docker, we don’t have to worry much about the environment and just code.

Create a folder for your project and add a Dockerfile inside that folder:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
FROM ubuntu:18.04

RUN apt-get update

# Install some dependencies
RUN dpkg --add-architecture i386 && apt-get update \
    && apt-get install -y expect wget unzip \
    libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1

# Install java
RUN apt-get install -y openjdk-8-jdk-headless

# Install the Android SDK
RUN cd /opt && wget --output-document=android-sdk.zip --quiet \
    https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip \
    && unzip android-sdk.zip -d /opt/android-sdk && rm -f android-sdk.zip

# Setup environment
ENV ANDROID_HOME /opt/android-sdk
ENV PATH ${PATH}:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/platform-tools

# Install SDK elements. This might change depending on what your app needs
# I'm installing the most basic ones. You should modify this to install the ones
# you need. You can get a list of available elements by getting a shell to the
# container and using `sdkmanager --list`
RUN echo yes | sdkmanager "platform-tools" "platforms;android-28"

# Go to workspace
RUN mkdir -p /opt/workspace
WORKDIR /opt/workspace

Build the Docker image:

1
docker build -t android-docker .

Get a shell to the container:

1
docker run -it --privileged --volume=$(pwd)/workspace:/opt/workspace android-docker bash

I use –privileged so the container has access to the host’s USB ports (This is necessary so it can install the Android app to the connected device). I’m assuming the application code will be in a folder called workspace and mounting this folder in the container.

Build the Android app and install it to the connected device:

1
./gradlew installDebug

I created a very small Hello world” application on Github that you can just download and modify as needed if you want to start an app from scratch.

[ android  automation  docker  mobile  productivity  projects  ]
Instrumenting an Istio Cluster With Jaeger Tracing
Monitoring Kubernetes Resources with Fabric8 Informers
Kubernetes ConfigMaps
Kubernetes networking with Istio
Managing Kubernetes Applications with Helm