1- FROM ubuntu:noble-20260113
2-
3- ENV DEBIAN_FRONTEND=noninteractive
1+ ARG UBUNTU_VERSION="noble-20260113"
2+ FROM ubuntu:${UBUNTU_VERSION} AS android_img
43
54# ==================
65# General Packages
76# ------------------
87# ca-certificates
98# SSL client
10- # curl
11- # Transfer data from or to a server
12- # gnupg
13- # Encryption software. It is needed for nodejs
14- # libqt5webkit5
15- # Web content engine (Fix issue in Android)
16- # openjdk-17-jdk
9+ # openjdk-25-jdk
1710# Java
18- # sudo
19- # Sudo user
20- # tzdata
21- # Timezone
2211# unzip
2312# Unzip zip file
2413# wget
2514# Network downloader
26- # xvfb
27- # X virtual framebuffer
28- # zip
29- # Make a zip file
3015# ==================
3116RUN apt-get -qqy update && \
3217 apt dist-upgrade -y && \
3318 apt-get -qqy --no-install-recommends install \
3419 ca-certificates \
35- curl \
36- gnupg \
37- libqt5webkit5 \
38- openjdk-17-jdk \
39- sudo \
40- tzdata \
20+ openjdk-25-jdk \
4121 unzip \
4222 wget \
43- xvfb \
44- zip \
45- ffmpeg \
4623 && rm -rf /var/lib/apt/lists/*
4724
4825# ===============
4926# Set JAVA_HOME
5027# ===============
51- ENV JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64" \
52- PATH=$PATH:$JAVA_HOME/bin
28+ ENV JAVA_HOME="/usr/lib/jvm/java-25-openjdk-amd64"
29+ ENV PATH=$PATH:${JAVA_HOME}/bin
30+
31+ # ================
32+ # Set up Android
33+ # ================
34+ ENV SDK_VERSION=commandlinetools-linux-13114758_latest
35+ ENV ANDROID_BUILD_TOOLS_VERSION=36.0.0
36+ ENV ANDROID_CMD=cmdline-tools
37+ ENV ANDROID_HOME=/opt/android
38+ ENV ANDROID_CMD_HOME=/opt/android/${ANDROID_CMD}
39+ ENV ANDROID_TOOL_HOME=${ANDROID_CMD_HOME}/tools
40+ ENV PATH=$PATH:${ANDROID_TOOL_HOME}:${ANDROID_TOOL_HOME}/bin
41+
42+ RUN wget -O tools.zip https://dl.google.com/android/repository/${SDK_VERSION}.zip && \
43+ unzip tools.zip && rm tools.zip && \
44+ mkdir -p ${ANDROID_CMD_HOME}/tools && \
45+ mv ${ANDROID_CMD}/* ${ANDROID_TOOL_HOME}/ && \
46+ rm -rf ${ANDROID_CMD} && \
47+ echo y | sdkmanager "platform-tools" && \
48+ echo y | sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION"
49+
50+ FROM ubuntu:${UBUNTU_VERSION}
51+
52+ ENV DEBIAN_FRONTEND=noninteractive
53+
54+ # ==================
55+ # General Packages
56+ # ------------------
57+ # libqt5webkit5
58+ # Web content engine (Fix issue in Android)
59+ # openjdk-25-jdk
60+ # Java
61+ # tzdata
62+ # Timezone
63+ # xvfb
64+ # X virtual framebuffer
65+ # ==================
66+ RUN apt-get -qqy update && \
67+ apt dist-upgrade -y && \
68+ apt-get -qqy --no-install-recommends install \
69+ libqt5webkit5 \
70+ openjdk-25-jdk \
71+ tzdata \
72+ xvfb \
73+ && rm -rf /var/lib/apt/lists/*
5374
5475# ===============================
5576# Set Timezone (UTC as default)
5677# ===============================
57- ENV TZ "UTC"
78+ ENV TZ= "UTC"
5879RUN echo "${TZ}" > /etc/timezone \
5980 && dpkg-reconfigure --frontend noninteractive tzdata
6081
82+ # =====================
83+ # Set up needed tools
84+ # =====================
85+ ENV JAVA_HOME="/usr/lib/jvm/java-25-openjdk-amd64"
86+ ENV PATH=$PATH:${JAVA_HOME}/bin
87+
88+ ENV ANDROID_HOME=/opt/android
89+ COPY --from=android_img ${ANDROID_HOME} ${ANDROID_HOME}
90+ ENV PATH=${PATH}:\
91+ ${ANDROID_HOME}/cmdline-tools/tools:\
92+ ${ANDROID_HOME}/cmdline-tools/tools/bin:\
93+ ${ANDROID_HOME}/platform-tools:\
94+ ${ANDROID_HOME}/build-tools
95+
96+ COPY --from=node:24.13.0-slim /usr/local /usr/local
97+
6198# ===============
6299# Create a user
63100# ===============
64- ARG USER_PASS=secret
65- RUN groupadd androidusr \
66- --gid 1301 \
67- && useradd androidusr \
68- --uid 1300 \
69- --gid 1301 \
101+ ARG USERNAME=androidusr
102+ ENV USERNAME=${USERNAME}
103+ ARG USERPASS=secret
104+ ARG USERID=1300
105+ ENV USERID=${USERID}
106+ ARG GROUPID=1301
107+ ENV GROUPID=${GROUPID}
108+ RUN groupadd ${USERNAME} \
109+ --gid ${GROUPID} \
110+ && useradd ${USERNAME} \
111+ --uid ${USERID} \
112+ --gid ${GROUPID} \
70113 --create-home \
71114 --shell /bin/bash \
72- && usermod -aG sudo androidusr \
73- && echo androidusr:${USER_PASS} | chpasswd \
74- && echo 'androidusr ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
75-
76- WORKDIR /home/androidusr
115+ && echo ${USERNAME}:${USERPASS} | chpasswd
77116
78- # =====================
79- # Install Android SDK
80- # =====================
81- ENV SDK_VERSION=commandlinetools-linux-13114758_latest
82- ENV ANDROID_BUILD_TOOLS_VERSION=36.0.0
83- ENV ANDROID_FOLDER_NAME=cmdline-tools
84- ENV ANDROID_DOWNLOAD_PATH=/home/androidusr/${ANDROID_FOLDER_NAME} \
85- ANDROID_HOME=/opt/android \
86- ANDROID_TOOL_HOME=/opt/android/${ANDROID_FOLDER_NAME}
87-
88- RUN wget -O tools.zip https://dl.google.com/android/repository/${SDK_VERSION}.zip && \
89- unzip tools.zip && rm tools.zip && \
90- chmod a+x -R ${ANDROID_DOWNLOAD_PATH} && \
91- chown -R 1300:1301 ${ANDROID_DOWNLOAD_PATH} && \
92- mkdir -p ${ANDROID_TOOL_HOME} && \
93- mv ${ANDROID_DOWNLOAD_PATH} ${ANDROID_TOOL_HOME}/tools
94- ENV PATH=$PATH:${ANDROID_TOOL_HOME}/tools:${ANDROID_TOOL_HOME}/tools/bin
95-
96- # https://askubuntu.com/questions/885658/android-sdk-repositories-cfg-could-not-be-loaded
97- RUN mkdir -p ~/.android && \
98- touch ~/.android/repositories.cfg && \
99- echo y | sdkmanager "platform-tools" && \
100- echo y | sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION" && \
101- mv ~/.android .android && \
102- chown -R 1300:1301 .android
103- ENV PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools
104-
105- # ====================================
106- # Install latest nodejs, npm, appium
107- # ====================================
108- ENV NODE_VERSION=22
117+ # ================
118+ # Install Appium
119+ # ================
109120ENV APPIUM_VERSION=3.1.1
110- RUN curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash && \
111- apt-get -qqy install nodejs && \
112- npm install -g appium@${APPIUM_VERSION} && \
113- exit 0 && \
114- npm cache clean && \
115- apt-get remove --purge -y npm && \
116- apt-get autoremove --purge -y && \
117- rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
118- apt-get clean
121+ RUN npm install -g appium@${APPIUM_VERSION}
119122
120123# ====================================================
121124# Fix permission issue to download e.g. chromedriver
122125# ====================================================
123- RUN chown -R 1300:1301 /usr/lib/node_modules/appium
124-
125- # ==============
126- # Copy scripts
127- # ==============
128- ENV SCRIPT_PATH="appium-docker-android"
129- RUN mkdir -p ${SCRIPT_PATH}
130- COPY start.sh \
131- generate_selenium_config.sh \
132- wireless_autoconnect.sh \
133- wireless_connect.sh \
134- ${SCRIPT_PATH}/
135- RUN chown -R 1300:1301 ${SCRIPT_PATH}
136- ENV APP_PATH=/home/androidusr/${SCRIPT_PATH}
126+ RUN chown -R ${USERID}:${GROUPID} /usr/local/lib/node_modules/appium
137127
138- # ==================
139- # Use created user
140- # ==================
141- USER 1300:1301
128+ # ========================
129+ # Install Appium drivers
130+ # ========================
131+ ENV WORK_PATH=/home/${USERNAME}
132+ WORKDIR ${WORK_PATH}
133+ USER ${USERID}:${GROUPID}
142134
143- # ===============================
144- # Install basic Android drivers
145- # ===============================
146135ENV APPIUM_DRIVER_ESPRESSO_VERSION="6.0.5"
147136ENV APPIUM_DRIVER_FLUTTER_VERSION="3.2.0"
148137ENV APPIUM_DRIVER_GECKO_VERSION="2.0.6"
@@ -152,6 +141,16 @@ RUN appium driver install --source=npm appium-espresso-driver@${APPIUM_DRIVER_ES
152141 appium driver install --source=npm appium-geckodriver@${APPIUM_DRIVER_GECKO_VERSION} && \
153142 appium driver install --source=npm appium-uiautomator2-driver@${APPIUM_DRIVER_UIAUTOMATOR2_VERSION}
154143
144+ # ================
145+ # Set up project
146+ # ================
147+ ENV SCRIPT_PATH="appium-docker-android"
148+ RUN mkdir -p .android && \
149+ touch ~/.android/repositories.cfg && \
150+ mkdir -p ${SCRIPT_PATH}
151+ COPY --chown=${USERID}:${GROUPID} . ${SCRIPT_PATH}/
152+ ENV APP_PATH=/home/${USERNAME}/${SCRIPT_PATH}
153+
155154# ===============
156155# Expose Port
157156# ---------------
@@ -163,4 +162,5 @@ EXPOSE 4723
163162# ==============
164163# Start script
165164# ==============
166- CMD ./${SCRIPT_PATH}/start.sh
165+ ENTRYPOINT ["sh" , "-c" ]
166+ CMD ["${WORK_PATH}/${SCRIPT_PATH}/start.sh" ]
0 commit comments