diff --git a/docker-scripts/build-dockers/Dockerfile_Android b/docker-scripts/build-dockers/Dockerfile_Android new file mode 100644 index 0000000..8afb577 --- /dev/null +++ b/docker-scripts/build-dockers/Dockerfile_Android @@ -0,0 +1,33 @@ +################################################################################ +### Build Android ### +################################################################################ +# Different from all others +FROM saschpe/android-ndk:31-jdk11.0.13_8-ndk23.0.7599858-cmake3.18.1 as builderandroid +RUN apt update && apt install -y lsb-release g++ build-essential wget git libssl-dev pkg-config zip unzip +RUN wget https://github.com/Kitware/CMake/releases/download/v3.30.2/cmake-3.30.2.tar.gz +RUN tar -xvf cmake-3.30.2.tar.gz +RUN cd cmake-3.30.2 && ./bootstrap && make -j && make install +RUN curl -s "https://get.sdkman.io" | bash +RUN /bin/bash -c "source /root/.sdkman/bin/sdkman-init.sh ; sdk install gradle 7.6.2" +RUN sdkmanager "build-tools;30.0.3" "cmake;3.22.1" +ENV ANDROID_SDK_VERSION="31" +ENV ANDROID_HOME="/opt/android-sdk-linux" +ENV ANDROID_NDK_VERSION="23.0.7599858" +ENV ANDROID_NDK_HOME="$ANDROID_HOME/ndk/$ANDROID_NDK_VERSION" +ENV GRADLE_DIR="/home/builder/gradle" +ENV GRADLE_HOME="$GRADLE_DIR/current" +ENV GRADLE_USER_HOME=$GRADLE_HOME +ENV PATH="$ANDROID_HOME:$GRADLE_HOME/bin:$ANDROID_NDK_HOME:$PATH" +RUN useradd builder -m +RUN mkdir -p /home/builder/cc3dsfs +RUN mkdir -p /home/builder/building +RUN chown -R builder:builder /home/builder +WORKDIR /home/builder/building +COPY docker_build_starter / +RUN chmod +x /docker_build_starter +RUN chown -R builder:builder $ANDROID_HOME +RUN mkdir -p $GRADLE_DIR +RUN mv /root/.sdkman/candidates/gradle/* $GRADLE_DIR/ +RUN chown -R builder:builder $GRADLE_DIR +USER builder +CMD /docker_build_starter docker-scripts/docker_build_android diff --git a/docker-scripts/build-dockers/build-builder.sh b/docker-scripts/build-dockers/build-builder.sh index f95441b..edb7a4b 100644 --- a/docker-scripts/build-dockers/build-builder.sh +++ b/docker-scripts/build-dockers/build-builder.sh @@ -7,3 +7,5 @@ docker image rm lorenzooone/cc3dsfs:builderarm32 docker build --target builderarm32 . -t lorenzooone/cc3dsfs:builderarm32 docker image rm lorenzooone/cc3dsfs:builderarm64 docker build --target builderarm64 . -t lorenzooone/cc3dsfs:builderarm64 +docker image rm lorenzooone/cc3dsfs:builderandroid +docker build --target builderandroid . -f Dockerfile_Android -t lorenzooone/cc3dsfs:builderandroid diff --git a/docker-scripts/docker_build_android b/docker-scripts/docker_build_android new file mode 100644 index 0000000..7248a1a --- /dev/null +++ b/docker-scripts/docker_build_android @@ -0,0 +1,16 @@ +#!/bin/sh + +SFML_EXTRACTED_TO_FOLDER=~ +SFML_EXTRACTED_FOLDER=${SFML_EXTRACTED_TO_FOLDER}/SFML-master +BUILD_ARCH_COMMAND=docker-scripts/docker_build_android_single_arch + +STL_CHOSEN=c++_static +RELEASE_TYPE=Debug +OUT_FOLDER=~/cc3dsfs/build +ANDROID_FOLDER=${SFML_EXTRACTED_FOLDER}/examples/android + +export LANG=C.UTF-8 + +(cd ${SFML_EXTRACTED_TO_FOLDER} ; wget https://github.com/SFML/SFML/archive/refs/heads/master.zip ; unzip master.zip) +#${BUILD_ARCH_COMMAND} ${SFML_EXTRACTED_FOLDER} armeabi-v7a ${STL_CHOSEN} ${RELEASE_TYPE} ${OUT_FOLDER} ${ANDROID_FOLDER} +${BUILD_ARCH_COMMAND} ${SFML_EXTRACTED_FOLDER} arm64-v8a ${STL_CHOSEN} ${RELEASE_TYPE} ${OUT_FOLDER} ${ANDROID_FOLDER} diff --git a/docker-scripts/docker_build_android_single_arch b/docker-scripts/docker_build_android_single_arch new file mode 100644 index 0000000..5aa0bbd --- /dev/null +++ b/docker-scripts/docker_build_android_single_arch @@ -0,0 +1,32 @@ +#!/bin/sh + +SFML_FOLDER=$1 +ARCH_CHOSEN=$2 +STL_CHOSEN=$3 +RELEASE_TYPE=$4 +OUT_FOLDER=$5 +ANDROID_FOLDER=$6 +GRADLE_FLAGS="" + +add_to_gradle_flags() +{ + to_add=$1 + GRADLE_FLAGS="${GRADLE_FLAGS} -P${to_add}" +} + +to_lower() +{ + echo "$1" | tr '[:upper:]' '[:lower:]' +} + +(cd ${SFML_FOLDER} ; mkdir -p build/${ARCH_CHOSEN}) +(cd ${SFML_FOLDER}/build/${ARCH_CHOSEN} ; cmake -DCMAKE_SYSTEM_NAME=Android -DCMAKE_ANDROID_NDK=${ANDROID_NDK_HOME} -DCMAKE_ANDROID_ARCH_ABI=${ARCH_CHOSEN} -DCMAKE_ANDROID_STL_TYPE=${STL_CHOSEN} -DCMAKE_BUILD_TYPE=${RELEASE_TYPE} ../.. ; make ; make install) +add_to_gradle_flags NDK_VERSION=${ANDROID_NDK_VERSION} +add_to_gradle_flags ARCH_ABI=${ARCH_CHOSEN} +add_to_gradle_flags TARGET_SDK=${ANDROID_SDK_VERSION} +add_to_gradle_flags STL_TYPE=${STL_CHOSEN} +LOWER_RELEASE_TYPE=$(to_lower $RELEASE_TYPE) +# Default with gradle-wrapper, slow in docker +#./gradlew assemble${RELEASE_TYPE} ${GRADLE_FLAGS} +# Use the pre-donwloaded gradle to speed build up +(cd ${ANDROID_FOLDER} && gradle assemble${RELEASE_TYPE} ${GRADLE_FLAGS} && mkdir -p ${OUT_FOLDER} && cp app/build/outputs/apk/${LOWER_RELEASE_TYPE}/*.apk ${OUT_FOLDER})