FROM ubuntu:22.04 # 1. Environment Variables ENV DEBIAN_FRONTEND=noninteractive ENV ANDROID_SDK_ROOT=/opt/android-sdk ENV FLUTTER_HOME=/opt/flutter ENV PATH="${FLUTTER_HOME}/bin:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${ANDROID_SDK_ROOT}/platform-tools:${PATH}" # 2. Install System Dependencies & Desktop Environment # We need a lightweight desktop (XFCE) and VNC to actually see Android Studio RUN apt-get update && apt-get install -y \ curl git unzip xz-utils zip libglu1-mesa wget openjdk-17-jdk \ xfce4 xfce4-goodies tightvncserver novnc python3-websockify \ libgtk-3-0 libcanberra-gtk-module libdbus-glib-1-2 libnss3 \ && rm -rf /var/lib/apt/lists/* # 3. Install Flutter SDK RUN git clone https://github.com/flutter/flutter.git ${FLUTTER_HOME} RUN chown -R root:root ${FLUTTER_HOME} && chmod -R 777 ${FLUTTER_HOME} # 4. Install Android SDK Command Line Tools RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools && \ wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O /tmp/tools.zip && \ unzip /tmp/tools.zip -d ${ANDROID_SDK_ROOT}/cmdline-tools && \ mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/latest && \ rm /tmp/tools.zip # 5. Install Android Studio # We download the stable Linux tarball RUN wget https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2023.2.1.25/android-studio-2023.2.1.25-linux.tar.gz -O /tmp/studio.tar.gz && \ tar -xzf /tmp/studio.tar.gz -C /opt && \ rm /tmp/studio.tar.gz # 6. Setup User RUN useradd -m -u 1000 user USER user WORKDIR /home/user # 7. Configure Android SDK & Licenses RUN yes | sdkmanager --licenses && \ sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0" # 8. Flutter Pre-cache RUN flutter config --android-sdk ${ANDROID_SDK_ROOT} && \ flutter precache # 9. VNC & Display Setup # Set a default password for VNC (change 'password' to something else) RUN mkdir /home/user/.vnc && \ echo "password" | vncpass -f > /home/user/.vnc/passwd && \ chmod 600 /home/user/.vnc/passwd # 10. Port for NoVNC (Web browser access) EXPOSE 6080 # Start a VNC server and the NoVNC proxy to view the desktop in a browser CMD vncserver :1 -geometry 1280x800 -depth 24 && \ /usr/share/novnc/utils/launch.sh --vnc localhost:5901 --listen 6080