Sign inSign up

woahbase/alpine-android

By woahbase

•Updated over 5 years ago

Android + Gradle + Cordova/NPM Builder based on Alpine Linux + OpenJDK8.

Image
6

10K+

woahbase/alpine-android repository overview

build status commit version:x86_64 size:x86_64

⁠Alpine-Android⁠

⁠Container for Alpine Linux + OpenJDK8 + Android + Cordova

This image⁠ containerizes the Android⁠ command-line tools, along with Gradle⁠ and OpenJDK8⁠, as well as Cordova⁠ for building hybrid apps, with its NPM⁠ dependencies.

Based on Alpine Linux⁠ from my alpine-openjdk8⁠ image with the s6⁠ init system overlayed⁠ in it.

The image is tagged respectively for the following architectures,

  • armhf
  • x86_64 (retagged as the latest )

armhf builds have embedded binfmt_misc support and contain the qemu-user-static⁠ binary that allows for running it also inside an x64 environment that has it.


⁠Get the Image

Pull the image for your architecture it's already available from Docker Hub.

# make pull
docker pull woahbase/alpine-android:x86_64

⁠Run

If you want to run images for other architectures, you will need to have binfmt support configured for your machine. multiarch⁠, has made it easy for us containing that into a docker container.

# make regbinfmt
docker run --rm --privileged multiarch/qemu-user-static:register --reset

Without the above, you can still run the image that is made for your architecture, e.g for an x86_64 machine..

This images already has a user alpine configured to drop privileges to the passed PUID/PGID which is ideal if its used to run in non-root mode. That way you only need to specify the values at runtime and pass the -u alpine if need be. (run id in your terminal to see your own PUID/PGID values.)

Before you run..

  • Mount the project directory (where build.gradle or package.json is) at /home/alpine/project. Mounts PWD by default.

  • Builds run under the user alpine.

  • Optionally, if you want to cache the jars/packages downloaded by gradle, so that they're downloaded once, and reused in later builds, bind mount the user home directory (/home/alpine) somewhere in your local. The packages get cached inside the /home/alpine/.gradle folder.

Running make gets a shell.

# make
docker run --rm -it \
  --name docker_android --hostname android \
  -e PGID=1000 -e PUID=1000 \
  -c 512 -m 3072m \
  -v $PWD:/home/alpine/project \
  -v /etc/localtime:/etc/localtime:ro \
  -v /etc/hosts:/etc/hosts:ro \
  woahbase/alpine-android:x86_64

The usual android stuff. e.g dev build a project with

docker run --rm -it \
  --name docker_android --hostname android \
  -e PGID=1000 -e PUID=1000 \
  -c 512 -m 1024m \
  -v $PWD:/home/alpine/project \
  -v /etc/localtime:/etc/localtime:ro \
  -v /etc/hosts:/etc/hosts:ro \
  woahbase/alpine-android:x86_64 \
  -ec "gradle assembleDebug"

also for Cordova projects, you can dev build a project with

docker run --rm -it \
  --name docker_android --hostname android \
  -e PGID=1000 -e PUID=1000 \
  -c 512 -m 3072m \
  -v $PWD:/home/alpine/project \
  -v /etc/localtime:/etc/localtime:ro \
  -v /etc/hosts:/etc/hosts:ro \
  woahbase/alpine-android:x86_64 \
  -ec "npm install && npm run <your build target>"

Stop the container with a timeout, (defaults to 2 seconds)

# make stop
docker stop -t 2 docker_android

Removes the container, (always better to stop it first and -f only when needed most)

# make rm
docker rm -f docker_android

Restart the container with

# make restart
docker restart docker_android

⁠Shell access

Get a shell inside a already running container,

# make shell
docker exec -it docker_android /bin/bash

set user or login as root,

# make rshell
docker exec -u root -it docker_android /bin/bash

To check logs of a running container in real time

# make logs
docker logs -f docker_android

⁠Development

If you have the repository access, you can clone and build the image yourself for your own system, and can push after.


⁠Setup

Before you clone the repo⁠, you must have Git⁠, GNU make⁠, and Docker⁠ setup on the machine.

git clone https://github.com/woahbase/alpine-android
cd alpine-android

You can always skip installing make but you will have to type the whole docker commands then instead of using the sweet make targets.


⁠Build

You need to have binfmt_misc configured in your system to be able to build images for other architectures.

Otherwise to locally build the image for your system. [ARCH defaults to x86_64, need to be explicit when building for other architectures.]

# make ARCH=x86_64 build
# sets up binfmt if not x86_64
docker build --rm --compress --force-rm \
  --no-cache=true --pull \
  -f ./Dockerfile_x86_64 \
  --build-arg ARCH=x86_64 \
  --build-arg DOCKERSRC=alpine-openjdk8 \
  --build-arg PGID=1000 \
  --build-arg PUID=1000 \
  --build-arg USERNAME=woahbase \
  --build-arg GRADLE_VERSION=$(GRADLE_VERSION) \
  --build-arg NPM_VERSION=$(NPM_VERSION) \
  --build-arg SDK_TARGET=$(SDK_TARGET) \
  --build-arg SDK_TOOLS_VERSION=$(SDK_TOOLS_VERSION) \
  --build-arg SDK_API_VERSION=$(SDK_API_VERSION) \
  -t woahbase/alpine-android:x86_64 \
  .

To check if its working..

# make ARCH=x86_64 test
docker run --rm -it \
  --name docker_android --hostname android \
  -e PGID=1000 -e PUID=1000 \
  woahbase/alpine-android:x86_64 \
  -ec 'sdkmanager --version; \
    sdkmanager --list | sed -e "/Available Packages/q" ; \
    gradle -version; \
    adb version; \
    npm --version; \
    cordova --version --no-telemetry';

And finally, if you have push access,

# make ARCH=x86_64 push
docker push woahbase/alpine-android:x86_64

⁠Maintenance

Sources at Github⁠. Built at Travis-CI.org⁠ (armhf / x64 builds). Images at Docker hub⁠. Metadata at Microbadger⁠.

Maintained by WOAHBase⁠.

Tag summary

Content type

Image

Digest

Size

512.2 MB

Last updated

over 5 years ago

docker pull woahbase/alpine-android