android.Dockerfile 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. FROM ubuntu
  2. RUN apt update
  3. RUN apt install -yq openjdk-19-jre-headless openjdk-19-jdk-headless
  4. RUN apt install -yq wget unzip cmake
  5. RUN cd /tmp/ && \
  6. wget -O install-rustup.sh https://sh.rustup.rs && \
  7. sh install-rustup.sh -yq --default-toolchain none && \
  8. rm install-rustup.sh
  9. ENV PATH "${PATH}:/root/.cargo/bin/"
  10. RUN rustup default nightly
  11. RUN rustup target add aarch64-linux-android
  12. #RUN rustup target add armv7-linux-androideabi
  13. #RUN rustup target add i686-linux-android
  14. #RUN rustup target add x86_64-linux-android
  15. # Install Android SDK
  16. ENV ANDROID_HOME /opt/android-sdk/
  17. RUN mkdir ${ANDROID_HOME} && \
  18. cd ${ANDROID_HOME} && \
  19. wget -O cmdline-tools.zip -q https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip && \
  20. unzip cmdline-tools.zip && \
  21. rm cmdline-tools.zip
  22. # Required by SDKManager
  23. RUN cd ${ANDROID_HOME}/cmdline-tools/ && \
  24. mkdir latest && \
  25. mv bin lib latest
  26. RUN yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --licenses
  27. RUN ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager "platform-tools"
  28. RUN ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager "platforms;android-34"
  29. RUN ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager "ndk-bundle"
  30. RUN ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager "build-tools;34.0.0"
  31. RUN echo '[target.aarch64-linux-android] \n\
  32. ar = "/opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar" \n\
  33. linker = "/opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang" \n\
  34. ' > /root/.cargo/config
  35. # Needed by the ring dependency
  36. ENV TARGET_AR /opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar
  37. ENV TARGET_CC /opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang
  38. # Make sqlite3
  39. RUN apt install -yq file
  40. RUN cd /tmp/ && \
  41. wget -O sqlite.zip https://www.sqlite.org/2023/sqlite-amalgamation-3430000.zip && \
  42. unzip sqlite.zip && \
  43. rm sqlite.zip && \
  44. mv sqlite* sqlite && \
  45. cd sqlite && \
  46. mkdir build && \
  47. mv *.c *.h build/ && \
  48. mkdir jni && \
  49. echo '\
  50. APP_ABI := arm64-v8a \n\
  51. APP_CPPFLAGS += -fexceptions -frtti \n\
  52. APP_STL := c++_shared' > jni/Application.mk && \
  53. echo '\
  54. LOCAL_PATH := $(call my-dir) \n\
  55. include $(CLEAR_VARS) \n\
  56. LOCAL_MODULE := sqlite3-a \n\
  57. LOCAL_MODULE_FILENAME := libsqlite3 \n\
  58. LOCAL_SRC_FILES := ../build/sqlite3.c \n\
  59. LOCAL_C_INCLUDES := ../build \n\
  60. LOCAL_EXPORT_C_INCLUDES := ../build \n\
  61. LOCAL_CFLAGS := -DSQLITE_THREADSAFE=1 \n\
  62. include $(BUILD_STATIC_LIBRARY)' > jni/Android.mk && \
  63. /opt/android-sdk/ndk-bundle/ndk-build
  64. ENV RUSTFLAGS "-L/tmp/sqlite/obj/local/arm64-v8a/"
  65. # Bug in cargo
  66. # https://blog.rust-lang.org/2023/01/09/android-ndk-update-r25.html
  67. # https://github.com/rust-lang/rust/pull/85806#issuecomment-1096266946
  68. RUN find ${ANDROID_HOME} -name "libunwind.a" -execdir bash -c 'echo "INPUT(-lunwind)" > libgcc.a' \;
  69. # Make directory for user code
  70. RUN mkdir /root/src
  71. WORKDIR /root/src/bin/darkirc/