|
1 | | -# Use a base Ubuntu image |
2 | | -FROM --platform=linux/amd64 ubuntu:24.04 |
| 1 | +FROM --platform=linux/amd64 debian:trixie |
3 | 2 |
|
4 | | -# Avoid prompts from apt |
5 | 3 | ENV DEBIAN_FRONTEND=noninteractive |
6 | | -ENV USER="docker" |
7 | 4 |
|
8 | | -# Install necessary dependencies |
9 | | -RUN apt update && apt install -y \ |
| 5 | +ARG USERNAME="bull" |
| 6 | +ENV USER=$USERNAME |
| 7 | +ARG FVM_VERSION=4.0.5 |
| 8 | +ARG FLUTTER_VERSION=3.38.5 |
| 9 | +ARG ANDROID_CMDLINE_TOOLS_VERSION=14742923 |
| 10 | + |
| 11 | +# Android versions (passed via --build-arg from Makefile, defaults as fallback) |
| 12 | +ARG JVM_TARGET=21 |
| 13 | +ARG ANDROID_API_LEVEL=36 |
| 14 | +ARG ANDROID_BUILD_TOOLS=36.0.0 |
| 15 | +ARG ANDROID_NDK=29.0.14206865 |
| 16 | + |
| 17 | +ENV ANDROID_HOME=/opt/android-sdk |
| 18 | +ENV PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools |
| 19 | + |
| 20 | +# Install dependencies |
| 21 | +RUN apt-get update && apt-get install -y \ |
| 22 | + sudo \ |
| 23 | + ca-certificates \ |
10 | 24 | curl \ |
11 | 25 | git \ |
12 | 26 | unzip \ |
13 | 27 | xz-utils \ |
14 | 28 | zip \ |
15 | | - libglu1-mesa \ |
16 | 29 | wget \ |
17 | | - clang \ |
18 | | - cmake \ |
19 | | - ninja-build \ |
20 | | - pkg-config \ |
21 | | - libgtk-3-dev \ |
22 | | - software-properties-common \ |
| 30 | + make \ |
| 31 | + openjdk-${JVM_TARGET}-jdk-headless \ |
| 32 | + build-essential \ |
23 | 33 | && rm -rf /var/lib/apt/lists/* |
24 | 34 |
|
25 | | -RUN apt update && apt install -y sudo |
| 35 | +# Create user |
26 | 36 | RUN adduser --disabled-password --gecos '' $USER |
27 | 37 | RUN adduser $USER sudo |
28 | 38 | RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers |
29 | | - |
30 | 39 | USER $USER |
31 | | -RUN sudo apt update |
32 | | - |
33 | | -# Install OpenJDK 17 |
34 | | -RUN sudo apt-get update && sudo apt-get install -y openjdk-21-jdk && sudo rm -rf /var/lib/apt/lists/* |
35 | 40 |
|
36 | 41 | # Install Rust |
37 | | -RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y |
| 42 | +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o /tmp/rustup.sh |
| 43 | +RUN sh /tmp/rustup.sh -y |
| 44 | +RUN rm /tmp/rustup.sh |
38 | 45 | ENV PATH="/home/$USER/.cargo/bin:${PATH}" |
39 | 46 |
|
40 | | -# Verify Rust installation |
| 47 | +# Add Android Rust targets |
| 48 | +RUN rustup target add aarch64-linux-android |
| 49 | +RUN rustup target add armv7-linux-androideabi |
| 50 | +RUN rustup target add x86_64-linux-android |
| 51 | +RUN rustup target add i686-linux-android |
41 | 52 | RUN rustc --version && cargo --version |
42 | 53 |
|
43 | | -# Set environment variables |
44 | | -ENV FLUTTER_HOME=/opt/flutter |
45 | | -ENV ANDROID_HOME=/opt/android-sdk |
46 | | -ENV PATH=$FLUTTER_HOME/bin:$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools |
47 | | - |
48 | | -# Install Flutter |
49 | | -RUN sudo git clone https://github.com/flutter/flutter.git $FLUTTER_HOME |
50 | | -RUN sudo sh -c "cd $FLUTTER_HOME && git checkout stable && ./bin/flutter --version" |
51 | | - |
52 | | -# Set up Android SDK |
53 | | -RUN sudo mkdir -p ${ANDROID_HOME}/cmdline-tools && \ |
54 | | - sudo wget -q https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip -O android-cmdline-tools.zip && \ |
55 | | - sudo unzip -q android-cmdline-tools.zip -d ${ANDROID_HOME}/cmdline-tools && \ |
56 | | - sudo mv ${ANDROID_HOME}/cmdline-tools/cmdline-tools ${ANDROID_HOME}/cmdline-tools/latest && \ |
57 | | - sudo rm android-cmdline-tools.zip |
58 | | - |
59 | | -RUN sudo chown -R $USER /opt/flutter |
60 | | -RUN sudo chown -R $USER /opt/android-sdk |
| 54 | +# Install FVM |
| 55 | +RUN curl -fsSL https://fvm.app/install.sh -o /tmp/fvm-install.sh |
| 56 | +RUN bash /tmp/fvm-install.sh ${FVM_VERSION} |
| 57 | +RUN rm /tmp/fvm-install.sh |
| 58 | +ENV PATH="/home/$USER/fvm/bin:${PATH}" |
61 | 59 |
|
62 | | -RUN flutter config --android-sdk=/opt/android-sdk |
| 60 | +# Install Flutter via FVM |
| 61 | +RUN fvm install ${FLUTTER_VERSION} |
| 62 | +RUN fvm global ${FLUTTER_VERSION} |
| 63 | +ENV PATH="/home/$USER/fvm/default/bin:${PATH}" |
63 | 64 |
|
64 | | -# Accept licenses and install necessary Android SDK components |
65 | | -RUN yes | sdkmanager --licenses |
66 | | -RUN sdkmanager "platform-tools" "platforms;android-35" "build-tools;35.0.0" |
| 65 | +# Download Android cmdline-tools |
| 66 | +RUN sudo wget -q https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_CMDLINE_TOOLS_VERSION}_latest.zip -O /tmp/android-cmdline-tools.zip |
67 | 67 |
|
68 | | -# Clean up existing app directory |
69 | | -RUN sudo rm -rf /app |
70 | | - |
71 | | -RUN sudo mkdir /app |
72 | | - |
73 | | -RUN sudo chown -R $USER /app |
74 | | - |
75 | | -# Clone the Bull Bitcoin mobile repository |
76 | | -RUN git clone --branch main https://github.com/SatoshiPortal/bullbitcoin-mobile /app |
77 | | - |
78 | | -# Create device-spec.json directly in the container |
79 | | -RUN echo '{\ |
80 | | - "supportedAbis": ["armeabi-v7a", "armeabi"],\ |
81 | | - "supportedLocales": ["en"],\ |
82 | | - "screenDensity": 280,\ |
83 | | - "sdkVersion": 31\ |
84 | | -}' > /app/device-spec.json |
85 | | - |
86 | | -WORKDIR /app |
87 | | - |
88 | | -# Setup the project |
89 | | -RUN make clean |
90 | | -RUN make deps |
91 | | -RUN make build-runner |
92 | | -RUN make l10n |
93 | | - |
94 | | -# Create .env (empty values) |
95 | | -RUN cp .env.template .env |
96 | | - |
97 | | -# Generate a fake keystore |
98 | | -RUN keytool -genkey -v -keystore upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload -storepass android -keypass android -dname "CN=Android Debug,O=Android,C=US" |
99 | | - |
100 | | -# Set up key.properties |
101 | | -RUN echo "storePassword=android" > /app/android/key.properties && \ |
102 | | - echo "keyPassword=android" >> /app/android/key.properties && \ |
103 | | - echo "keyAlias=upload" >> /app/android/key.properties && \ |
104 | | - echo "storeFile=/app/upload-keystore.jks" >> /app/android/key.properties |
105 | | - |
106 | | -# Build APK with specific target platform |
107 | | -RUN flutter build apk --debug --target-platform android-arm64 |
| 68 | +# Set up Android SDK |
| 69 | +RUN sudo mkdir -p ${ANDROID_HOME}/cmdline-tools |
| 70 | +RUN sudo unzip -q /tmp/android-cmdline-tools.zip -d ${ANDROID_HOME}/cmdline-tools |
| 71 | +RUN sudo mv ${ANDROID_HOME}/cmdline-tools/cmdline-tools ${ANDROID_HOME}/cmdline-tools/latest |
| 72 | +RUN sudo rm /tmp/android-cmdline-tools.zip |
| 73 | +RUN sudo chown -R $USER ${ANDROID_HOME} |
| 74 | + |
| 75 | +# Install Android SDK components |
| 76 | +RUN yes | sdkmanager --sdk_root=${ANDROID_HOME} --licenses |
| 77 | +RUN sdkmanager --sdk_root=${ANDROID_HOME} "platform-tools" |
| 78 | +RUN sdkmanager --sdk_root=${ANDROID_HOME} "platforms;android-${ANDROID_API_LEVEL}" |
| 79 | +RUN sdkmanager --sdk_root=${ANDROID_HOME} "build-tools;${ANDROID_BUILD_TOOLS}" |
| 80 | +RUN sdkmanager --sdk_root=${ANDROID_HOME} "ndk;${ANDROID_NDK}" |
0 commit comments