diff --git a/.github/workflows/ballfield.yml b/.github/workflows/ballfield.yml index e0075f1e6..c0c7d17c1 100644 --- a/.github/workflows/ballfield.yml +++ b/.github/workflows/ballfield.yml @@ -31,12 +31,23 @@ jobs: APP_NAME: ballfield # It takes one hour per one architecture to build Boost and ICU libraries, and Github limits CI script duration to 6 hours ARCH_LIST: armeabi-v7a arm64-v8a x86 x86_64 + ANDROID_BUILD_TOOLS: 33.0.2 runs-on: ubuntu-latest + permissions: + contents: 'read' + id-token: 'write' + steps: + - name: Java 17 + uses: actions/setup-java@v2 + with: + java-version: 17 + distribution: temurin + - name: Check out the repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 1 submodules: false @@ -57,46 +68,6 @@ jobs: run: | sed -i "s/MultiABI=.*/MultiABI='${ARCH_LIST}'/g" project/jni/application/src/AndroidAppSettings.cfg -# - name: Get Boost revision -# id: boost-rev -# run: echo "::set-output name=BOOST_REV::`git -C project/jni/boost/src rev-parse HEAD`" -# -# - name: Get ICU revision -# id: icu-rev -# run: echo "::set-output name=ICU_REV::`git -C project/jni/iconv/src rev-parse HEAD`" -# -# - name: Copy Boost libraries from cache -# uses: actions/cache@v2 -# id: cache-boost -# with: -# # The same SDL revision will produce the same libraries -# key: ${{steps.boost-rev.outputs.BOOST_REV}} -# path: | -# build-android/project/jni/boost/include -# build-android/project/jni/boost/lib -# -# - name: Copy ICU libraries from cache -# uses: actions/cache@v2 -# id: cache-icu -# with: -# # The same SDL revision will produce the same libraries -# key: ${{steps.icu-rev.outputs.ICU_REV}} -# path: | -# build-android/project/jni/iconv/include -# build-android/project/jni/iconv/lib -# build-android/project/jni/icuuc/include -# build-android/project/jni/icuuc/lib -# -# - name: Touch cached Boost timestamps -# if: steps.cache-boost.outputs.cache-hit == 'true' || steps.cache-icu.outputs.cache-hit == 'true' -# working-directory: build-android -# run: touch project/jni/boost/lib/*/* || true -# -# - name: Touch cached ICU timestamps -# if: steps.cache-boost.outputs.cache-hit == 'true' || steps.cache-icu.outputs.cache-hit == 'true' -# working-directory: build-android -# run: touch project/jni/iconv/lib/*/* project/jni/icuuc/lib/*/* || true - - name: Patch Java files and build Boost, ICU, and OpenSSL run: | export PATH=$ANDROID_NDK_LATEST_HOME:$PATH @@ -115,7 +86,7 @@ jobs: - name: Hyper turbo build script GOOOOOOOOOOOO run: | - export PATH=$ANDROID_NDK_LATEST_HOME:$ANDROID_SDK_ROOT/build-tools/31.0.0:$PATH + export PATH=$ANDROID_NDK_LATEST_HOME:$ANDROID_SDK_ROOT/build-tools/$ANDROID_BUILD_TOOLS:$PATH ./build.sh - name: App signing keys @@ -130,7 +101,7 @@ jobs: - name: Package run: | - export PATH=$ANDROID_NDK_LATEST_HOME:$ANDROID_SDK_ROOT/build-tools/31.0.0:$PATH + export PATH=$ANDROID_NDK_LATEST_HOME:$ANDROID_SDK_ROOT/build-tools/$ANDROID_BUILD_TOOLS:$PATH if [ -e keystore.jks ]; then export ANDROID_KEYSTORE_FILE=`pwd`/keystore.jks fi @@ -154,3 +125,18 @@ jobs: name: ${{env.APP_NAME}} path: upload if-no-files-found: error + + - uses: r0adkll/upload-google-play@v1 + continue-on-error: true + with: + serviceAccountJsonPlainText: ${{secrets.SERVICE_ACCOUNT_JSON}} + packageName: net.olofson.ballfield + releaseFiles: upload/*.aab + #track: beta + track: production + status: completed + # inAppUpdatePriority: 2 + # userFraction: 1 + # whatsNewDirectory: distribution/whatsnew + # mappingFile: app/build/outputs/mapping/release/mapping.txt + # debugSymbols: app/intermediates/merged_native_libs/release/out/lib diff --git a/.github/workflows/openttd.yml b/.github/workflows/openttd.yml new file mode 100644 index 000000000..5f9b4c1a8 --- /dev/null +++ b/.github/workflows/openttd.yml @@ -0,0 +1,160 @@ +# Copyright (C) 2021-2021 Sergii Pylypenko +# +# This software is provided 'as-is', without any express or implied +# warranty. In no event will the authors be held liable for any damages +# arising from the use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software +# in a product, an acknowledgment in the product documentation would be +# appreciated but is not required. +# 2. Altered source versions must be plainly marked as such, and must not be +# misrepresented as being the original software. +# 3. This notice may not be removed or altered from any source distribution. + +name: openttd +on: + push: + branches: + - '*' + tags: + - '*' + pull_request: {} + +jobs: + build: + env: + APP_NAME: openttd + # It takes one hour per one architecture to build Boost and ICU libraries, and Github limits CI script duration to 6 hours + ARCH_LIST: armeabi-v7a arm64-v8a x86 x86_64 + ANDROID_BUILD_TOOLS: 33.0.2 + + runs-on: ubuntu-latest + + steps: + - name: Java 17 + uses: actions/setup-java@v2 + with: + java-version: 17 + distribution: temurin + + - name: Check out the repository + uses: actions/checkout@v3 + with: + fetch-depth: 1 + submodules: false + + - name: Check out submodules + # There are many more submodules in this repo, we don't need them all + run: > + git submodule update --init --recursive --depth=1 + project/jni/application/${APP_NAME} + project/jni/boost/src project/jni/iconv/src + project/jni/sdl2 project/jni/sdl2_image + project/jni/sdl2_mixer project/jni/sdl2_ttf + + - name: Symlink the application dir + run: | + ln -s ${APP_NAME} project/jni/application/src + + - name: Set architectures list + run: | + sed -i "s/MultiABI=.*/MultiABI='${ARCH_LIST}'/g" project/jni/application/src/AndroidAppSettings.cfg + + - name: Get ICU revision + id: icu-rev + run: echo "ICU_REV=`git -C project/jni/iconv/src rev-parse HEAD`::`echo ${ARCH_LIST} | sed 's/ /:/g'`" >> $GITHUB_ENV + + - name: Copy ICU libraries from cache + uses: actions/cache@v2 + id: cache-icu + with: + # The same SDL revision will produce the same libraries + key: ${{env.ICU_REV}} + path: | + project/jni/iconv/include + project/jni/iconv/lib + project/jni/icuuc/include + project/jni/icuuc/lib + project/jni/icuuc/share/icu + + - name: Touch cached ICU timestamps + if: steps.cache-icu.outputs.cache-hit == 'true' + run: touch project/jni/iconv/lib/*/* project/jni/icuuc/lib/*/* project/jni/icuuc/share/icu/*/* || true + + - name: Patch Java files and build Boost, ICU, and OpenSSL + run: | + export PATH=$ANDROID_NDK_LATEST_HOME:$PATH + ./changeAppSettings.sh + + - name: Set up Gradle and Android SDK licenses + working-directory: project + run: | + for Y in `seq 20`; do echo y; done | sudo $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses + ./gradlew assembleRelease || true + for Y in `seq 20`; do echo y; done | sudo $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses --sdk_root=`pwd` + mkdir -p $HOME/.android + keytool -genkey -v -keystore $HOME/.android/debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname "CN=Debug, OU=Debug, O=Debug, L=Debug, ST=Debug, C=Debug" + echo "sdk.dir=$ANDROID_SDK_ROOT" > local.properties + echo "proguard.config=proguard.cfg;proguard-local.cfg" >> local.properties + + - name: Hyper turbo build script GOOOOOOOOOOOO + run: | + export PATH=$ANDROID_NDK_LATEST_HOME:$ANDROID_SDK_ROOT/build-tools/$ANDROID_BUILD_TOOLS:$PATH + ./build.sh + + - name: App signing keys + run: | + echo "$ANDROID_KEYSTORE_B64" | base64 -d > keystore.jks || true + echo "$ANDROID_UPLOAD_KEYSTORE_B64" | base64 -d > upload_keystore.jks || true + find keystore.jks -empty -delete || true + find upload_keystore.jks -empty -delete || true + env: + ANDROID_KEYSTORE_B64: "${{secrets.ANDROID_KEYSTORE_B64}}" + ANDROID_UPLOAD_KEYSTORE_B64: "${{secrets.ANDROID_UPLOAD_KEYSTORE_B64}}" + + - name: Package + run: | + export PATH=$ANDROID_NDK_LATEST_HOME:$ANDROID_SDK_ROOT/build-tools/$ANDROID_BUILD_TOOLS:$PATH + if [ -e keystore.jks ]; then + export ANDROID_KEYSTORE_FILE=`pwd`/keystore.jks + fi + if [ -e upload_keystore.jks ]; then + export ANDROID_UPLOAD_KEYSTORE_FILE=`pwd`/upload_keystore.jks + fi + mkdir -p upload/ + ./sign.sh + mv *.apk upload/ + ./signBundle.sh + mv *.aab upload/ + env: + ANDROID_KEYSTORE_PASS: "${{secrets.ANDROID_KEYSTORE_PASS}}" + ANDROID_KEYSTORE_ALIAS: "${{secrets.ANDROID_KEYSTORE_ALIAS}}" + ANDROID_UPLOAD_KEYSTORE_PASS: "${{secrets.ANDROID_UPLOAD_KEYSTORE_PASS}}" + ANDROID_UPLOAD_KEYSTORE_ALIAS: "${{secrets.ANDROID_UPLOAD_KEYSTORE_ALIAS}}" + + # Github actions is dumb and won't let you download single files from artifacts, so break up the artifacts instead + - uses: actions/upload-artifact@v2 + with: + name: ${{env.APP_NAME}} + path: upload + if-no-files-found: error + + - uses: r0adkll/upload-google-play@v1 + continue-on-error: true + with: + serviceAccountJsonPlainText: ${{secrets.SERVICE_ACCOUNT_JSON}} + packageName: org.openttd.sdl + releaseFiles: upload/*.aab + track: beta + #track: production + status: completed + # inAppUpdatePriority: 2 + # userFraction: 1 + # whatsNewDirectory: distribution/whatsnew + # mappingFile: app/build/outputs/mapping/release/mapping.txt + # debugSymbols: app/intermediates/merged_native_libs/release/out/lib diff --git a/.github/workflows/sdl2-demo.yml b/.github/workflows/sdl2-demo.yml index b2a040c28..ea27ac2a1 100644 --- a/.github/workflows/sdl2-demo.yml +++ b/.github/workflows/sdl2-demo.yml @@ -31,10 +31,17 @@ jobs: APP_NAME: sdl2-demo # It takes one hour per one architecture to build Boost and ICU libraries, and Github limits CI script duration to 6 hours ARCH_LIST: armeabi-v7a arm64-v8a x86 x86_64 + ANDROID_BUILD_TOOLS: 33.0.2 runs-on: ubuntu-latest steps: + - name: Java 17 + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: temurin + - name: Check out the repository uses: actions/checkout@v2 with: @@ -57,46 +64,6 @@ jobs: run: | sed -i "s/MultiABI=.*/MultiABI='${ARCH_LIST}'/g" project/jni/application/src/AndroidAppSettings.cfg -# - name: Get Boost revision -# id: boost-rev -# run: echo "::set-output name=BOOST_REV::`git -C project/jni/boost/src rev-parse HEAD`" -# -# - name: Get ICU revision -# id: icu-rev -# run: echo "::set-output name=ICU_REV::`git -C project/jni/iconv/src rev-parse HEAD`" -# -# - name: Copy Boost libraries from cache -# uses: actions/cache@v2 -# id: cache-boost -# with: -# # The same SDL revision will produce the same libraries -# key: ${{steps.boost-rev.outputs.BOOST_REV}} -# path: | -# build-android/project/jni/boost/include -# build-android/project/jni/boost/lib -# -# - name: Copy ICU libraries from cache -# uses: actions/cache@v2 -# id: cache-icu -# with: -# # The same SDL revision will produce the same libraries -# key: ${{steps.icu-rev.outputs.ICU_REV}} -# path: | -# build-android/project/jni/iconv/include -# build-android/project/jni/iconv/lib -# build-android/project/jni/icuuc/include -# build-android/project/jni/icuuc/lib -# -# - name: Touch cached Boost timestamps -# if: steps.cache-boost.outputs.cache-hit == 'true' || steps.cache-icu.outputs.cache-hit == 'true' -# working-directory: build-android -# run: touch project/jni/boost/lib/*/* || true -# -# - name: Touch cached ICU timestamps -# if: steps.cache-boost.outputs.cache-hit == 'true' || steps.cache-icu.outputs.cache-hit == 'true' -# working-directory: build-android -# run: touch project/jni/iconv/lib/*/* project/jni/icuuc/lib/*/* || true - - name: Patch Java files and build Boost, ICU, and OpenSSL run: | export PATH=$ANDROID_NDK_LATEST_HOME:$PATH @@ -115,7 +82,7 @@ jobs: - name: Hyper turbo build script GOOOOOOOOOOOO run: | - export PATH=$ANDROID_NDK_LATEST_HOME:$ANDROID_SDK_ROOT/build-tools/31.0.0:$PATH + export PATH=$ANDROID_NDK_LATEST_HOME:$ANDROID_SDK_ROOT/build-tools/$ANDROID_BUILD_TOOLS:$PATH ./build.sh - name: App signing keys @@ -130,7 +97,7 @@ jobs: - name: Package run: | - export PATH=$ANDROID_NDK_LATEST_HOME:$ANDROID_SDK_ROOT/build-tools/31.0.0:$PATH + export PATH=$ANDROID_NDK_LATEST_HOME:$ANDROID_SDK_ROOT/build-tools/$ANDROID_BUILD_TOOLS:$PATH if [ -e keystore.jks ]; then export ANDROID_KEYSTORE_FILE=`pwd`/keystore.jks fi diff --git a/build.sh b/build.sh index 18f95f216..8c90e596d 100755 --- a/build.sh +++ b/build.sh @@ -10,13 +10,14 @@ sign_apk=false sign_bundle=false build_release=true do_zipalign=true -named_variant="sdl" +named_variant="" base_app_name="" # Fix Gradle compilation error if [ -z "$ANDROID_NDK_HOME" ]; then export ANDROID_NDK_HOME="$(which ndk-build | sed 's@/ndk-build@@')" fi +[ -z "$ANDROID_SDK_ROOT" ] && ANDROID_SDK_ROOT="$ANDROID_HOME" while getopts "sirqbhzv:" OPT do @@ -77,6 +78,7 @@ if [ "$#" -gt 0 ]; then fi base_app_name=$(grep -Po 'AppFullName\=\K[[:alnum:].]+\.(?=[[:alnum:]]+)' AndroidAppSettings.cfg) +[ -z "${named_variant}" ] && named_variant=$(grep -Po 'AppFullName\=\K[[:alnum:].]+' AndroidAppSettings.cfg | grep -Po '[[:alnum:]]+$') function project_needs_setup { local app_name=$(grep -Po 'AppFullName\=\K[.[:alnum:]]+' AndroidAppSettings.cfg) diff --git a/changeAppSettings.sh b/changeAppSettings.sh index 5a9b26735..898569eec 100755 --- a/changeAppSettings.sh +++ b/changeAppSettings.sh @@ -4,6 +4,7 @@ set -e AUTO=a CHANGED= JAVA_SRC_PATH=project/java +[ -z "$ANDROID_SDK_ROOT" ] && ANDROID_SDK_ROOT="$ANDROID_HOME" if [ "X$1" = "X-a" ]; then AUTO=a @@ -412,14 +413,14 @@ RedefinedKeysFourthGamepad="$RedefinedKeysFourthGamepad" StartupMenuButtonTimeout=$StartupMenuButtonTimeout # Menu items to hide from startup menu, available menu items (SDL 1.2 only): -# ${MenuOptionsAvailable%%[[:space:]]} +# ${MenuOptionsAvailable%[[:space:]]} HiddenMenuOptions='$HiddenMenuOptions' # Menu items to show at startup - this is Java code snippet, leave empty for default # $FirstStartMenuOptionsDefault # Available menu items: -# ${MenuOptionsAvailable%%[[:space:]]} +# ${MenuOptionsAvailable%[[:space:]]} FirstStartMenuOptions='$FirstStartMenuOptions' # Minimum amount of RAM application requires, in Mb, SDL will print warning to user if it's lower @@ -498,7 +499,7 @@ HorizontalOrientation=false UsingSdl2=false if [ "$LibSdlVersion" = "2.0" ] ; then - "$LibSdlVersion" = "2" + LibSdlVersion="2" fi if [ "$LibSdlVersion" = "2" ] ; then UsingSdl2=true @@ -775,7 +776,7 @@ for KEY in $RedefinedKeysFourthGamepad; do done if [ "$APP_PLATFORM" = "" ]; then - APP_PLATFORM=android-16 + APP_PLATFORM=android-19 fi if [ "$MultiABI" = "y" ] ; then @@ -880,7 +881,7 @@ fi echo Patching project/AndroidManifest.xml cat $ANDROID_MANIFEST_TEMPLATE | \ - sed "s/package=.*/package=\"$AppFullName\"/" | \ + sed "s/package=.*//" | \ sed "s/android:screenOrientation=.*/android:screenOrientation=\"$ScreenOrientation1\"/" | \ sed "s^android:versionCode=.*^android:versionCode=\"$AppVersionCode\"^" | \ sed "s^android:versionName=.*^android:versionName=\"$AppVersionName\"^" | \ @@ -896,8 +897,19 @@ else cat $F | sed "s/^package .*;/package $AppFullName;/" >> project/src/Advertisement.java fi +if [ -z "$ANDROID_NDK_HOME" ]; then + export ANDROID_NDK_HOME="$(which ndk-build | sed 's@/ndk-build@@')" +fi +if [ -z "$ANDROID_NDK_HOME" ]; then + echo "Set ANDROID_NDK_HOME env variable, or put ndk-build into your PATH" + exit 1 +fi +NDK_VER=$(echo ${ANDROID_NDK_HOME} | grep -Eo '[^/]+$') + cat project/app/build-template.gradle | \ - sed 's/applicationId .*/applicationId "'"$AppFullName"'"/' > \ + sed 's/applicationId .*/applicationId "'"${AppFullName}"'"/' | \ + sed 's/namespace .*/namespace '"'"${AppFullName}"'"'/' | \ + sed 's/ndkVersion .*/ndkVersion "'"${NDK_VER}"'"/' > \ project/app/build.gradle echo "-keep class $AppFullName.** { *; }" > project/proguard-local.cfg @@ -1111,6 +1123,7 @@ done cd ../../.. SDK_DIR=`grep '^sdk.dir' project/local.properties | sed 's/.*=//'` +[ -z "$SDK_DIR" ] && SDK_DIR="$ANDROID_HOME" [ -z "$SDK_DIR" ] && SDK_DIR=`which android | sed 's@/tools/android$@@'` mkdir -p project/libs echo "sdk.dir=$SDK_DIR" > project/local.properties @@ -1129,17 +1142,6 @@ else done $SEDI "s/==GOOGLEPLAYGAMESERVICES_APP_ID==/$GooglePlayGameServicesId/g" project/res/values/strings.xml - - PROGUARD=`which android` - [ -z "$PROGUARD" ] && PROGUARD=$ANDROID_SDK_ROOT/tools/android - PROGUARD=`dirname $PROGUARD`/proguard/lib/proguard.jar - java -jar $PROGUARD | grep 'ProGuard, version 5.3' || { - echo "Error: ProGuard is too old" - echo "You need to update ProGuard. Download it here:" - echo "https://sourceforge.net/projects/proguard/files/proguard/5.3/proguard5.3.3.zip" - echo "Unpack it, then place file proguard.jar to $PROGUARD" - exit 1 - } fi if [ -e "project/jni/application/src/AndroidData/assetpack" ] ; then diff --git a/project/AndroidManifestTemplate.xml b/project/AndroidManifestTemplate.xml index 787c99498..0c15054a1 100644 --- a/project/AndroidManifestTemplate.xml +++ b/project/AndroidManifestTemplate.xml @@ -1,6 +1,5 @@