From a92f6cf9b8ef5b7d30e58120e3fcfaff5850549d Mon Sep 17 00:00:00 2001 From: Miguel Horta Date: Tue, 19 Apr 2022 14:54:08 +0100 Subject: [PATCH] Allow building for F-Droid --- build.sh | 55 ++++++++----------- changeAppSettings.sh | 4 +- project/jni/Android.mk | 4 ++ project/jni/Makefile.prebuilt | 3 +- .../openttd/AndroidAppSettings.cfg | 6 +- .../jni/application/openttd/AndroidBuild.sh | 17 ++++-- .../application/openttd/AndroidPreBuild.sh | 2 +- project/jni/application/openttd/src | 2 +- .../application/setEnvironment-arm64-v8a.sh | 3 +- .../application/setEnvironment-armeabi-v7a.sh | 5 +- project/jni/application/setEnvironment-x86.sh | 5 +- .../jni/application/setEnvironment-x86_64.sh | 5 +- 12 files changed, 56 insertions(+), 55 deletions(-) diff --git a/build.sh b/build.sh index 981d27508..c412fd48e 100755 --- a/build.sh +++ b/build.sh @@ -9,26 +9,15 @@ run_apk=false sign_apk=false sign_bundle=false build_release=true +do_zipalign=true + +# 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" -# Check environment before continuing -if ! $(which adb zipalign apksigner jarsigner ndk-build java cmake > /dev/null); then - echo "One of the follow binaries is missing. Check your environment"; - echo "adb zipalign apksigner jarsigner ndk-build java cmake"; - which adb zipalign apksigner jarsigner ndk-build java cmake; - exit 1; -fi - -JAVA_MVERSION=$(java --version 2>&1 | awk 'NR == 1{print $2}' | awk -F . '{print $1}') -if [ $JAVA_MVERSION -lt 11 ]; then - echo "Java version equal or above to 11 necessary."; - exit 2; - if [ $JAVA_MVERSION -gt 11 ]; then - echo "Java 11 version is strongly recomended."; - fi -fi - -while getopts "sirqbh" OPT +while getopts "sirqbhz" OPT do case $OPT in s) sign_apk=true;; @@ -36,12 +25,14 @@ do r) install_apk=true ; run_apk=true;; q) echo "Quick rebuild does not work anymore with Gradle!";; b) sign_bundle=true;; + z) do_zipalign=false;; h) echo "Usage: $0 [-s] [-i] [-r] [-q] [debug|release] [app-name]" echo " -s: sign .apk file after building" echo " -b: sign .aab app bundle file after building" echo " -i: install APK file to device after building" echo " -r: run APK file on device after building" + echo " -z: skip zipalign and apksigner" echo " debug: build debug package" echo " release: build release package (default)" echo " app-name: directory under project/jni/application to be compiled" @@ -82,10 +73,10 @@ if [ "$#" -gt 0 ]; then shift fi -if ! [ -e project/local.properties ] && \ - grep "package $(grep -Po 'AppFullName\=\K[.[:alnum:]]+' AndroidAppSettings.cfg);" project/src/Globals.java > /dev/null 2>&1 && \ - [ "$(readlink AndroidAppSettings.cfg)" -ot "project/src/Globals.java" ] && \ - [ -z "$(find project/java/* \ +if [ ! -e project/local.properties ] || \ + ! grep -q "package $(grep -Po 'AppFullName\=\K[.[:alnum:]]+' AndroidAppSettings.cfg);" project/src/Globals.java || \ + [ "$(readlink AndroidAppSettings.cfg)" -nt "project/src/Globals.java" ] || \ + [ -n "$(find project/java/* \ project/javaSDL2/* \ project/jni/sdl2/android-project/app/src/main/java/org/libsdl/app/* \ project/AndroidManifestTemplate.xml \ @@ -115,10 +106,6 @@ if [ -z "$NCPU" ]; then fi export BUILD_NUM_CPUS=$NCPU -# Fix Gradle compilation error -if [ -z "$ANDROID_NDK_HOME" ]; then - export ANDROID_NDK_HOME="$(which ndk-build | sed 's@/ndk-build@@')" -fi if [ -x project/jni/application/src/AndroidPreBuild.sh ]; then pushd project/jni/application/src @@ -127,11 +114,11 @@ if [ -x project/jni/application/src/AndroidPreBuild.sh ]; then fi if grep -q 'CustomBuildScript=y' ./AndroidAppSettings.cfg; then - ndk-build -C project -j$NCPU V=1 CUSTOM_BUILD_SCRIPT_FIRST_PASS=1 NDK_APP_STRIP_MODE=none + ${ANDROID_NDK_HOME}/ndk-build -C project -j$NCPU V=1 CUSTOM_BUILD_SCRIPT_FIRST_PASS=1 NDK_APP_STRIP_MODE=none make -C project/jni/application -f CustomBuildScript.mk fi -ndk-build -C project -j$NCPU V=1 NDK_APP_STRIP_MODE=none +${ANDROID_NDK_HOME}/ndk-build -C project -j$NCPU V=1 NDK_APP_STRIP_MODE=none ./copyAssets.sh pushd project if $build_release ; then @@ -143,8 +130,10 @@ if $build_release ; then fi ../copyAssets.sh pack-binaries app/build/outputs/apk/release/app-release-unsigned.apk rm -f app/build/outputs/apk/release/app-release.apk - zipalign -p 4 app/build/outputs/apk/release/app-release-unsigned.apk app/build/outputs/apk/release/app-release.apk - apksigner sign --ks ~/.android/debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android app/build/outputs/apk/release/app-release.apk + if $do_zipalign; then + zipalign -p 4 app/build/outputs/apk/release/app-release-unsigned.apk app/build/outputs/apk/release/app-release.apk + apksigner sign --ks ~/.android/debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android app/build/outputs/apk/release/app-release.apk + fi else ./gradlew assembleDebug if [ -x jni/application/src/AndroidPostBuild.sh ]; then @@ -155,8 +144,10 @@ else mkdir -p app/build/outputs/apk/release ../copyAssets.sh pack-binaries app/build/outputs/apk/debug/app-debug.apk rm -f app/build/outputs/apk/release/app-release.apk - zipalign -p 4 app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/release/app-release.apk - apksigner sign --ks ~/.android/debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android app/build/outputs/apk/release/app-release.apk + if $do_zipalign; then + zipalign -p 4 app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/release/app-release.apk + apksigner sign --ks ~/.android/debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android app/build/outputs/apk/release/app-release.apk + fi fi if $sign_apk; then diff --git a/changeAppSettings.sh b/changeAppSettings.sh index e3741198f..ee13f90a3 100755 --- a/changeAppSettings.sh +++ b/changeAppSettings.sh @@ -1,5 +1,6 @@ -#!/bin/sh +#!/usr/bin/env bash +set -e AUTO=a CHANGED= JAVA_SRC_PATH=project/java @@ -1208,6 +1209,7 @@ if echo "$CompiledLibraries" | grep -E 'crypto|ssl' > /dev/null; then fi if echo "$CompiledLibraries" | grep -E 'iconv|charset|icu' > /dev/null; then + echo "#=Compiling prebuilt icu" make -C project/jni -f Makefile.prebuilt icu ARCH_LIST="$MultiABI" fi diff --git a/project/jni/Android.mk b/project/jni/Android.mk index d8cd623c0..b88e2a746 100644 --- a/project/jni/Android.mk +++ b/project/jni/Android.mk @@ -13,6 +13,10 @@ ifneq ($(filter r1 r2 r3 r4 r5 r6 r7 r8,$(NDK_VERSION)),) $(error Your NDK $(NDK_VERSION) is too old, please download NDK from http://developer.android.com) endif +ifdef ANDROID_NDK_HOME +NDK_PATH := $(ANDROID_NDK_HOME) +else NDK_PATH := $(shell dirname $(shell which ndk-build)) +endif include $(call all-subdir-makefiles) diff --git a/project/jni/Makefile.prebuilt b/project/jni/Makefile.prebuilt index b5bca9e77..fb6559887 100644 --- a/project/jni/Makefile.prebuilt +++ b/project/jni/Makefile.prebuilt @@ -66,7 +66,8 @@ openssl: $(OPENSSL) $(ICONV) $(ICU): iconv/src/build.sh cd iconv/src && \ for ARCH in $(ARCH_LIST); do \ - env ARCHS=$$ARCH ./build.sh && \ + $(shell echo "#=Compiling iconv for $$ARCH") \ + env ARCHS=$$ARCH PATH=$(PATH):${ANDROID_NDK_HOME} ./build.sh && \ mkdir -p ../lib/$$ARCH ../include ; \ cp -f $$ARCH/libiconv.so $$ARCH/libcharset.so ../lib/$$ARCH/ ; \ cp -f $$ARCH/include/*.h ../include/ ; \ diff --git a/project/jni/application/openttd/AndroidAppSettings.cfg b/project/jni/application/openttd/AndroidAppSettings.cfg index 9de3b71b6..336ed40f5 100644 --- a/project/jni/application/openttd/AndroidAppSettings.cfg +++ b/project/jni/application/openttd/AndroidAppSettings.cfg @@ -7,10 +7,10 @@ AppName="OpenTTD" AppFullName=org.openttd.sdl # Application version code (integer) -AppVersionCode=1220112 +AppVersionCode=1220110 # Application user-visible version name (string) -AppVersionName="12.2.rev112" +AppVersionName="12.2.rev110" # Specify path to download application data in zip archive in the form 'Description|URL|MirrorURL^Description2|URL2|MirrorURL2^...' # If you'll start Description with '!' symbol it will be enabled by default, '!!' will also hide the entry from the menu, so it cannot be disabled @@ -271,7 +271,7 @@ NDK_TOOLCHAIN_VERSION=clang # android-16 = Android 4.1, the earliest supported version in NDK r18. # android-18 = Android 4.3, the first version supporting GLES3. # android-21 = Android 5.1, the first version with SO_REUSEPORT defined. -APP_PLATFORM= +APP_PLATFORM=21 # Specify architectures to compile, 'all' or 'y' to compile for all architectures. # Available architectures: armeabi-v7a arm64-v8a x86 x86_64 diff --git a/project/jni/application/openttd/AndroidBuild.sh b/project/jni/application/openttd/AndroidBuild.sh index dbd143976..5089ce8cd 100755 --- a/project/jni/application/openttd/AndroidBuild.sh +++ b/project/jni/application/openttd/AndroidBuild.sh @@ -2,6 +2,7 @@ LOCAL_PATH=`dirname $0` LOCAL_PATH=`cd $LOCAL_PATH && pwd` + VER=build [ -d openttd-$VER-$1 ] || mkdir -p openttd-$VER-$1/bin/baseset @@ -79,7 +80,13 @@ export ARCH=$1 echo "set_target_properties(${TARGET} PROPERTIES IMPORTED_LOCATION "'${'"${TARGET}"'_LIBRARY})' >> $CMAKE_SDL done - cmake \ + if [ -n "${CMAKE_BIN_LOC}" ]; then + NINJA_PATH=${CMAKE_BIN_LOC}/ninja + else + NINJA_PATH=$(which ninja) + fi + + ${CMAKE_BIN_LOC}cmake \ -DCMAKE_MODULE_PATH=$LOCAL_PATH/openttd-$VER-$1/cmake \ -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \ -DANDROID_ABI=$1 \ @@ -88,7 +95,8 @@ export ARCH=$1 -DGLOBAL_DIR="." \ -DHOST_BINARY_DIR=$LOCAL_PATH/build-tools \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DCMAKE_MAKE_PROGRAM=$(which ninja) \ + -DCMAKE_PREFIX_PATH=$LOCAL_PATH/../../iconv/src/$ARCH/ \ + -DCMAKE_MAKE_PROGRAM=$NINJA_PATH \ -GNinja \ -B ./openttd-$VER-$1 -S ./src @@ -98,9 +106,8 @@ mkdir -p staging-openttd-$VER-$1 set -e -cmake --build openttd-$VER-$1 --verbose; -cmake --install openttd-$VER-$1 --prefix ./staging-openttd-$VER-$1; -cp staging-openttd-$VER-$1/games/libapplication.so libapplication-$1.so; +${CMAKE_BIN_LOC}cmake --build openttd-$VER-$1 --verbose; +${CMAKE_BIN_LOC}cmake --install openttd-$VER-$1 --prefix ./staging-openttd-$VER-$1; cp staging-openttd-$VER-$1/games/libapplication.so libapplication-$1.so; mkdir -p ./data cp -r staging-openttd-$VER-$1/share/games/application/* data/ diff --git a/project/jni/application/openttd/AndroidPreBuild.sh b/project/jni/application/openttd/AndroidPreBuild.sh index 3dcf1c3bd..dbed5acba 100755 --- a/project/jni/application/openttd/AndroidPreBuild.sh +++ b/project/jni/application/openttd/AndroidPreBuild.sh @@ -1,5 +1,5 @@ #!/bin/sh mkdir -p build-tools -[ -e build-tools/Makefile ] || cmake -DOPTION_TOOLS_ONLY=ON -B build-tools src +[ -e build-tools/Makefile ] || ${CMAKE_BIN_LOC}cmake -DOPTION_TOOLS_ONLY=ON -B build-tools src make -C build-tools -j8 VERBOSE=1 || exit 1 diff --git a/project/jni/application/openttd/src b/project/jni/application/openttd/src index a63708013..7e8c52ac6 160000 --- a/project/jni/application/openttd/src +++ b/project/jni/application/openttd/src @@ -1 +1 @@ -Subproject commit a637080136e21fab47061e82f84310d00f78dcf4 +Subproject commit 7e8c52ac6ad9107f6b25c37ff9515a3509002925 diff --git a/project/jni/application/setEnvironment-arm64-v8a.sh b/project/jni/application/setEnvironment-arm64-v8a.sh index bd0471c57..24e986137 100755 --- a/project/jni/application/setEnvironment-arm64-v8a.sh +++ b/project/jni/application/setEnvironment-arm64-v8a.sh @@ -3,8 +3,7 @@ IFS=' ' -NDK=`which ndk-build` -NDK=`dirname $NDK` +NDK=${ANDROID_NDK_HOME:-$(dirname $(which ndk-build))} if uname -s | grep -i "linux" > /dev/null ; then MYARCH=linux-$(uname -m) diff --git a/project/jni/application/setEnvironment-armeabi-v7a.sh b/project/jni/application/setEnvironment-armeabi-v7a.sh index 084670fdc..1d496b349 100755 --- a/project/jni/application/setEnvironment-armeabi-v7a.sh +++ b/project/jni/application/setEnvironment-armeabi-v7a.sh @@ -3,8 +3,7 @@ IFS=' ' -NDK=`which ndk-build` -NDK=`dirname $NDK` +NDK=${ANDROID_NDK_HOME:-$(dirname $(which ndk-build))} if uname -s | grep -i "linux" > /dev/null ; then MYARCH=linux-$(uname -m) @@ -26,7 +25,7 @@ fi ARCH=armeabi-v7a GCCPREFIX=armv7a-linux-androideabi BINUTILSPREFIX=arm-linux-androideabi -APILEVEL=19 +APILEVEL=21 APP_MODULES=`grep 'APP_MODULES [:][=]' $LOCAL_PATH/../Settings.mk | sed 's@.*[=]\(.*\)@\1@' | sed 's@\b\(application\|sdl_main\|sdl_native_helpers\|c++_shared\)\b@@g'` diff --git a/project/jni/application/setEnvironment-x86.sh b/project/jni/application/setEnvironment-x86.sh index d3551e64f..b9522bab5 100755 --- a/project/jni/application/setEnvironment-x86.sh +++ b/project/jni/application/setEnvironment-x86.sh @@ -3,8 +3,7 @@ IFS=' ' -NDK=`which ndk-build` -NDK=`dirname $NDK` +NDK=${ANDROID_NDK_HOME:-$(dirname $(which ndk-build))} if uname -s | grep -i "linux" > /dev/null ; then MYARCH=linux-$(uname -m) @@ -25,7 +24,7 @@ else fi ARCH=x86 GCCPREFIX=i686-linux-android -APILEVEL=19 +APILEVEL=21 APP_MODULES=`grep 'APP_MODULES [:][=]' $LOCAL_PATH/../Settings.mk | sed 's@.*[=]\(.*\)@\1@' | sed 's@\b\(application\|sdl_main\|sdl_native_helpers\|c++_shared\)\b@@g'` diff --git a/project/jni/application/setEnvironment-x86_64.sh b/project/jni/application/setEnvironment-x86_64.sh index b566f5394..d855c8492 100755 --- a/project/jni/application/setEnvironment-x86_64.sh +++ b/project/jni/application/setEnvironment-x86_64.sh @@ -3,11 +3,10 @@ IFS=' ' -NDK=`which ndk-build` -NDK=`dirname $NDK` +NDK=${ANDROID_NDK_HOME:-$(dirname $(which ndk-build))} if uname -s | grep -i "linux" > /dev/null ; then - MYARCH=linux-$(arch) + MYARCH=linux-$(uname -m) NDK=`readlink -f $NDK` elif uname -s | grep -i "darwin" > /dev/null ; then MYARCH=darwin-x86_64