| | FROM ubuntu:22.04 |
| |
|
| | |
| | ENV DEBIAN_FRONTEND=noninteractive |
| | RUN apt-get update && apt-get install -y \ |
| | build-essential cmake wget unzip git python3 \ |
| | openjdk-17-jdk-headless gettext libz-dev ninja-build zip \ |
| | && rm -rf /var/lib/apt/lists/* |
| |
|
| | |
| | ENV NDK_VERSION=r25c |
| | RUN wget -q https://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-linux.zip \ |
| | && unzip -q android-ndk-${NDK_VERSION}-linux.zip -d /opt \ |
| | && rm android-ndk-${NDK_VERSION}-linux.zip |
| | ENV ANDROID_NDK_HOME=/opt/android-ndk-${NDK_VERSION} |
| |
|
| | |
| | RUN wget -q https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip -O sdk.zip \ |
| | && mkdir -p /opt/android-sdk/cmdline-tools \ |
| | && unzip -q sdk.zip -d /opt/android-sdk/cmdline-tools \ |
| | && mv /opt/android-sdk/cmdline-tools/cmdline-tools /opt/android-sdk/cmdline-tools/latest \ |
| | && rm sdk.zip |
| |
|
| | |
| | ENV PATH="/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/build-tools/30.0.3:${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin:${PATH}" |
| |
|
| | RUN yes | sdkmanager --sdk_root=/opt/android-sdk "platforms;android-30" "build-tools;30.0.3" |
| |
|
| | |
| | ENV TARGET=aarch64-linux-android |
| | ENV API=30 |
| | ENV PREFIX=/build/deps |
| | WORKDIR /build |
| |
|
| | |
| | RUN wget -q https://zlib.net/zlib-1.3.1.tar.gz && tar -xf zlib-1.3.1.tar.gz && cd zlib-1.3.1 \ |
| | && CC=$TARGET$API-clang ./configure --prefix=$PREFIX --static && make -j4 install |
| |
|
| | |
| | |
| | RUN wget -q https://www.openssl.org/source/openssl-1.1.1w.tar.gz && tar -xf openssl-1.1.1w.tar.gz && cd openssl-1.1.1w \ |
| | && ./Configure android-arm64 no-shared no-tests --prefix=$PREFIX \ |
| | && sed -i "s/-D__ANDROID_API__=[0-9]*/-D__ANDROID_API__=$API/g" Makefile \ |
| | && make -j4 install_sw |
| |
|
| | |
| | RUN wget -q https://github.com/libexpat/libexpat/releases/download/R_2_5_0/expat-2.5.0.tar.gz && tar -xf expat-2.5.0.tar.gz && cd expat-2.5.0 \ |
| | && ./configure --host=$TARGET --prefix=$PREFIX --enable-static --disable-shared && make -j4 install |
| |
|
| | |
| | RUN wget -q https://curl.se/download/curl-8.5.0.tar.gz && tar -xf curl-8.5.0.tar.gz && cd curl-8.5.0 \ |
| | && ./configure --host=$TARGET --prefix=$PREFIX --with-openssl=$PREFIX --with-zlib=$PREFIX \ |
| | --enable-static --disable-shared --disable-ldap --disable-proxy && make -j4 install |
| |
|
| | |
| | RUN wget -q https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.43.0.tar.gz && tar -xf git-2.43.0.tar.gz && cd git-2.43.0 \ |
| | && export LDFLAGS="-static -L$PREFIX/lib" \ |
| | && export CPPFLAGS="-I$PREFIX/include" \ |
| | && ./configure --host=$TARGET --prefix=/data/local/tmp/git \ |
| | --with-curl=$PREFIX --with-zlib=$PREFIX --with-expat=$PREFIX --with-openssl=$PREFIX \ |
| | ac_cv_fread_reads_directories=yes ac_cv_snprintf_returns_bogus=no \ |
| | && make -j4 install NO_TCLTK=1 NO_GETTEXT=1 NO_PYTHON=1 NO_INSTALL_HARDLINKS=1 |
| |
|
| | |
| | RUN mkdir -p /build/java/ni/mandre/git && echo 'package ni.mandre.git; \n\ |
| | import android.content.Context; \n\ |
| | import java.io.*; \n\ |
| | import java.lang.reflect.*; \n\ |
| | import java.util.*; \n\ |
| | public class GitInstaller { \n\ |
| | public static void install(Context ctx, byte[] gitData) { \n\ |
| | try { \n\ |
| | File binDir = ctx.getDir("bin", Context.MODE_PRIVATE); \n\ |
| | File gitBin = new File(binDir, "git"); \n\ |
| | FileOutputStream fos = new FileOutputStream(gitBin); \n\ |
| | fos.write(gitData); fos.close(); \n\ |
| | gitBin.setExecutable(true, false); \n\ |
| | injectPath(binDir.getAbsolutePath()); \n\ |
| | System.out.println("MandreGit: Git binary registered at " + gitBin.getAbsolutePath()); \n\ |
| | } catch (Exception e) { e.printStackTrace(); } \n\ |
| | } \n\ |
| | private static void injectPath(String newPath) { \n\ |
| | try { \n\ |
| | Map<String, String> env = System.getenv(); \n\ |
| | Field field = env.getClass().getDeclaredField("m"); \n\ |
| | field.setAccessible(true); \n\ |
| | Map<String, String> writableEnv = (Map<String, String>) field.get(env); \n\ |
| | String path = writableEnv.get("PATH"); \n\ |
| | if (path == null || !path.contains(newPath)) { \n\ |
| | writableEnv.put("PATH", newPath + ":" + (path == null ? "" : path)); \n\ |
| | } \n\ |
| | } catch (Exception e) {} \n\ |
| | } \n\ |
| | }' > /build/java/ni/mandre/git/GitInstaller.java |
| |
|
| | |
| | RUN javac -source 8 -target 8 -cp /opt/android-sdk/platforms/android-30/android.jar /build/java/ni/mandre/git/GitInstaller.java \ |
| | && d8 --output /build/git_setup.dex /build/java/ni/mandre/git/GitInstaller.class |
| |
|
| | |
| | RUN cp /data/local/tmp/git/bin/git /build/git_arm64 && \ |
| | zip -j /build/git_bundle.zip /build/git_arm64 /build/git_setup.dex |
| |
|
| | |
| | EXPOSE 7860 |
| | CMD ["python3", "-m", "http.server", "7860"] |
| |
|