1
1
# Dockerfile with:
2
- # - Android build environment
3
- # - python-for-android dependencies
2
+ # - Android build environment
3
+ # - python-for-android dependencies
4
4
# Build with:
5
5
# docker build --tag=p4a .
6
6
# Run with:
7
7
# docker run p4a /bin/sh -c '. venv/bin/activate && p4a apk --help'
8
8
# Or for interactive shell:
9
9
# docker run -it --rm p4a
10
- #
11
- # TODO:
12
- # - delete archives to keep small the container small
13
- # - setup caching (for apt, pip, ndk, sdk and p4a recipes downloads)
14
10
FROM ubuntu:18.04
15
11
16
12
@@ -27,35 +23,39 @@ ENV ANDROID_SDK_TOOLS_VERSION="3859397"
27
23
28
24
ENV ANDROID_HOME="/opt/android"
29
25
ENV ANDROID_NDK_HOME="${ANDROID_HOME}/android-ndk" \
30
- CRYSTAX_NDK_HOME="${ANDROID_HOME}/crystax-ndk" \
31
- ANDROID_SDK_HOME="${ANDROID_HOME}/android-sdk"
26
+ CRYSTAX_NDK_HOME="${ANDROID_HOME}/crystax-ndk" \
27
+ ANDROID_SDK_HOME="${ANDROID_HOME}/android-sdk"
32
28
ENV ANDROID_NDK_HOME_V="${ANDROID_NDK_HOME}-r${ANDROID_NDK_VERSION}" \
33
- CRYSTAX_NDK_HOME_V="${CRYSTAX_NDK_HOME}-${CRYSTAX_NDK_VERSION}"
29
+ CRYSTAX_NDK_HOME_V="${CRYSTAX_NDK_HOME}-${CRYSTAX_NDK_VERSION}"
34
30
ENV ANDROID_NDK_ARCHIVE="android-ndk-r${ANDROID_NDK_VERSION}-linux-x86_64.zip" \
35
- CRYSTAX_NDK_ARCHIVE="crystax-ndk-${CRYSTAX_NDK_VERSION}-linux-x86.tar.xz" \
36
- ANDROID_SDK_TOOLS_ARCHIVE="sdk-tools-linux-${ANDROID_SDK_TOOLS_VERSION}.zip"
31
+ CRYSTAX_NDK_ARCHIVE="crystax-ndk-${CRYSTAX_NDK_VERSION}-linux-x86.tar.xz" \
32
+ ANDROID_SDK_TOOLS_ARCHIVE="sdk-tools-linux-${ANDROID_SDK_TOOLS_VERSION}.zip"
37
33
ENV ANDROID_NDK_DL_URL="https://dl.google.com/android/repository/${ANDROID_NDK_ARCHIVE}" \
38
- CRYSTAX_NDK_DL_URL="https://eu.crystax.net/download/${CRYSTAX_NDK_ARCHIVE}" \
39
- ANDROID_SDK_TOOLS_DL_URL="https://dl.google.com/android/repository/${ANDROID_SDK_TOOLS_ARCHIVE}"
34
+ CRYSTAX_NDK_DL_URL="https://eu.crystax.net/download/${CRYSTAX_NDK_ARCHIVE}" \
35
+ ANDROID_SDK_TOOLS_DL_URL="https://dl.google.com/android/repository/${ANDROID_SDK_TOOLS_ARCHIVE}"
40
36
41
37
# install system dependencies
42
38
RUN apt update -qq && apt install -qq --yes --no-install-recommends \
43
- python virtualenv python-pip wget curl lbzip2 patch bsdtar sudo && \
39
+ python virtualenv python-pip wget curl lbzip2 patch bsdtar sudo && \
44
40
rm -rf /var/lib/apt/lists/*
45
41
46
42
# build dependencies
47
43
# https://buildozer.readthedocs.io/en/latest/installation.html#android-on-ubuntu-16-04-64bit
48
- RUN dpkg --add-architecture i386 && apt update -qq && apt install -qq --yes --no-install-recommends \
49
- build-essential ccache git libncurses5:i386 libstdc++6:i386 libgtk2.0-0:i386 \
50
- libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 python2.7 python2.7-dev \
51
- openjdk-8-jdk unzip zlib1g-dev zlib1g:i386 && \
44
+ RUN dpkg --add-architecture i386 && apt update -qq && apt install -qq --yes --no-install-recommends \
45
+ build-essential ccache git libncurses5:i386 libstdc++6:i386 libgtk2.0-0:i386 \
46
+ libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 python2.7 python2.7-dev \
47
+ openjdk-8-jdk unzip zlib1g-dev zlib1g:i386
48
+
49
+ # specific recipes dependencies (e.g. libffi requires autoreconf binary)
50
+ RUN apt install -qq --yes --no-install-recommends \
51
+ autoconf automake cmake gettext libltdl-dev libtool pkg-config && \
52
52
rm -rf /var/lib/apt/lists/*
53
53
54
54
# download and install Android NDK
55
55
RUN curl --location --progress-bar "${ANDROID_NDK_DL_URL}" --output "${ANDROID_NDK_ARCHIVE}" && \
56
56
mkdir --parents "${ANDROID_NDK_HOME_V}" && \
57
57
unzip -q "${ANDROID_NDK_ARCHIVE}" -d "${ANDROID_HOME}" && \
58
- ln -sfn "${ANDROID_NDK_HOME_V}" "${ANDROID_NDK_HOME}" && \
58
+ ln -sfn "${ANDROID_NDK_HOME_V}" "${ANDROID_NDK_HOME}" && \
59
59
rm -rf "${ANDROID_NDK_ARCHIVE}"
60
60
61
61
# download and install CrystaX NDK
@@ -70,7 +70,7 @@ RUN curl --location --progress-bar "${CRYSTAX_NDK_DL_URL}" --output "${CRYSTAX_N
70
70
--exclude=crystax-ndk-${CRYSTAX_NDK_VERSION}/toolchains/llvm-* \
71
71
--exclude=crystax-ndk-${CRYSTAX_NDK_VERSION}/toolchains/aarch64-* \
72
72
--exclude=crystax-ndk-${CRYSTAX_NDK_VERSION}/toolchains/mips64el-* && \
73
- ln -sfn "${CRYSTAX_NDK_HOME_V}" "${CRYSTAX_NDK_HOME}" && \
73
+ ln -sfn "${CRYSTAX_NDK_HOME_V}" "${CRYSTAX_NDK_HOME}" && \
74
74
rm -rf "${CRYSTAX_NDK_ARCHIVE}"
75
75
76
76
# download and install Android SDK
@@ -81,7 +81,7 @@ RUN curl --location --progress-bar "${ANDROID_SDK_TOOLS_DL_URL}" --output "${AND
81
81
82
82
# update Android SDK, install Android API, Build Tools...
83
83
RUN mkdir --parents "${ANDROID_SDK_HOME}/.android/" && \
84
- echo '### User Sources for Android SDK Manager' > "${ANDROID_SDK_HOME}/.android/repositories.cfg"
84
+ echo '### User Sources for Android SDK Manager' > "${ANDROID_SDK_HOME}/.android/repositories.cfg"
85
85
RUN yes | "${ANDROID_SDK_HOME}/tools/bin/sdkmanager" --licenses
86
86
RUN "${ANDROID_SDK_HOME}/tools/bin/sdkmanager" "platforms;android-19" && \
87
87
"${ANDROID_SDK_HOME}/tools/bin/sdkmanager" "platforms;android-27" && \
@@ -93,7 +93,7 @@ RUN useradd --create-home --shell /bin/bash ${USER}
93
93
# with sudo access and no password
94
94
RUN usermod -append --groups sudo ${USER}
95
95
RUN echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
96
- RUN pip install --quiet --upgrade cython ==0.21
96
+ RUN pip install --quiet --upgrade Cython ==0.28.6
97
97
WORKDIR ${WORK_DIR}
98
98
COPY . ${WORK_DIR}
99
99
# user needs ownership/write access to these directories
0 commit comments