diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..1822aefdae --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +Dockerfile +.github diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000000..aa68918b19 --- /dev/null +++ b/.env.sample @@ -0,0 +1,2 @@ +CUSTOM_API_KEY="" +REDDIT_USER="" diff --git a/.gitignore b/.gitignore index 769def11cb..a1a1e15196 100644 --- a/.gitignore +++ b/.gitignore @@ -114,3 +114,5 @@ fabric.properties !/gradle/wrapper/gradle-wrapper.jar # End of https://www.gitignore.io/api/androidstudio + +.env diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..c4af647a87 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM ubuntu:latest + +RUN apt update && apt upgrade -y +RUN apt install -y openjdk-11-jdk wget unzip +RUN wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip +RUN unzip -q android-sdk.zip -d /tmp/android-sdk + +ENV ANDROID_SDK_ROOT="/tmp/android-sdk" +ENV JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" +ENV PATH="${PATH}:/tmp/android-sdk/tools/bin:/tmp/android-sdk/platform-tools" + +RUN yes | /tmp/android-sdk/cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT "platforms;android-30" "build-tools;30.0.3" + +ENV CUSTOM_API_KEY="" +ENV REDDIT_USER="" + +COPY . /content +WORKDIR /content + +ENTRYPOINT [ "scripts/start-compilation.sh" ] diff --git a/README.md b/README.md index 62d5a9d199..90c548f1da 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,7 @@ Bitcoin: bc1qxtkd5ap9na7uy8nr9qpt6jny6tdwaj4v43ddle - [Variables reference](#variables-reference) - [Roadmap](#roadmap) - [Contributing](#contributing) +- [Build Instructions](#build-instructions) - [Support](#support) - [License](#license) - [Acknowledgements](#acknowledgements) @@ -167,6 +168,12 @@ Here are other ways you can help:
+## Build Instructions + +There's a dedicated Docker-based build approach, which also allows to use a custom API key & User Agent. To run it, make sure you have Docker installed and set up in your machine, then copy the `.env.sample` to `.env` to change the API key & User Agent if you want. Then run `./build.sh`. + +After the shell script finishes the build, you'll find the `Infinity.apk` file on the root of this directory. + ## License Distributed under the AGPL-3.0 License. See LICENSE for more information. diff --git a/build.sh b/build.sh new file mode 100755 index 0000000000..ce20a30557 --- /dev/null +++ b/build.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +CONTAINER_NAME="infinity-builder" + +source .env || true + +docker build -t infinity-builder . +docker run -it -e CUSTOM_API_KEY=$CUSTOM_API_KEY -e REDDIT_USER=$REDDIT_USER --name $CONTAINER_NAME infinity-builder /bin/bash +docker cp $CONTAINER_NAME:/content/app/build/outputs/apk/release/app-release.apk ./Infinity.apk +docker rm $CONTAINER_NAME diff --git a/scripts/fix-api-key.sh b/scripts/fix-api-key.sh new file mode 100755 index 0000000000..16b61ab062 --- /dev/null +++ b/scripts/fix-api-key.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +echo "Custom API key: $CUSTOM_API_KEY" +echo "Custom UA: $REDDIT_USER" + +if [ -z "$CUSTOM_API_KEY" ] +then + echo "No custom API key, just building..." +else + echo "Custom API key detected, setting it up along the custom UA..." + + sed -i "s/NOe2iKrPPzwscA/$CUSTOM_API_KEY/" app/src/main/java/ml/docilealligator/infinityforreddit/utils/APIUtils.java + sed -i "s|infinity://localhost|http://127.0.0.1|" app/src/main/java/ml/docilealligator/infinityforreddit/utils/APIUtils.java + sed -iE "s/public static final String USER_AGENT = \"(.*)\";/public static final String USER_AGENT = \"android:personal-app:0.0.1 (by \/u\/$REDDIT_USER)\";/" app/src/main/java/ml/docilealligator/infinityforreddit/utils/APIUtils.java +fi diff --git a/scripts/setup-keystore.py b/scripts/setup-keystore.py new file mode 100755 index 0000000000..761996fbe2 --- /dev/null +++ b/scripts/setup-keystore.py @@ -0,0 +1,22 @@ +#!/usr/bin/python3 + +print("Setting up keystore file...") + +build_gradle_file = "./app/build.gradle" +build_gradle_code = open(build_gradle_file, "r", encoding="utf-8-sig").read() +build_gradle_code = build_gradle_code.replace(r""" buildTypes {""", r""" signingConfigs { + release { + storeFile file("/content/Infinity.jks") + storePassword "Infinity" + keyAlias "Infinity" + keyPassword "Infinity" + } + } + buildTypes {""") +build_gradle_code = build_gradle_code.replace(r""" buildTypes { + release {""", r""" buildTypes { + release { + signingConfig signingConfigs.release""") + +with open(build_gradle_file, "w", encoding="utf-8") as f: + f.write(build_gradle_code) diff --git a/scripts/start-compilation.sh b/scripts/start-compilation.sh new file mode 100755 index 0000000000..fe62d8f094 --- /dev/null +++ b/scripts/start-compilation.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +echo "Infinity for Reddit Docker Builder" + +./scripts/fix-api-key.sh + +wget https://github.com/TanukiAI/Infinity-keystore/raw/main/Infinity.jks + +python3 ./scripts/setup-keystore.py + +./gradlew assembleRelease