summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Subsurface-mobile-android.pro344
-rwxr-xr-xpackaging/android/build.sh6
-rwxr-xr-xpackaging/android/qmake-build.sh369
-rw-r--r--packaging/android/translations.qrc27
4 files changed, 746 insertions, 0 deletions
diff --git a/Subsurface-mobile-android.pro b/Subsurface-mobile-android.pro
new file mode 100644
index 000000000..a0ead0d2b
--- /dev/null
+++ b/Subsurface-mobile-android.pro
@@ -0,0 +1,344 @@
+TEMPLATE = app
+
+QT += qml quick quickcontrols2 widgets positioning concurrent svg bluetooth androidextras
+
+DEFINES += SUBSURFACE_MOBILE BT_SUPPORT BLE_SUPPORT
+
+CONFIG += c++17
+CONFIG += qtquickcompiler
+
+SOURCES += subsurface-mobile-main.cpp \
+ subsurface-helper.cpp \
+ map-widget/qmlmapwidgethelper.cpp \
+ commands/command_base.cpp \
+ commands/command.cpp \
+ commands/command_device.cpp \
+ commands/command_divelist.cpp \
+ commands/command_divesite.cpp \
+ commands/command_edit.cpp \
+ commands/command_edit_trip.cpp \
+ commands/command_event.cpp \
+ commands/command_filter.cpp \
+ commands/command_pictures.cpp \
+ core/cloudstorage.cpp \
+ core/configuredivecomputerthreads.cpp \
+ core/devicedetails.cpp \
+ core/gpslocation.cpp \
+ core/downloadfromdcthread.cpp \
+ core/qtserialbluetooth.cpp \
+ core/plannernotes.c \
+ core/uemis-downloader.c \
+ core/applicationstate.cpp \
+ core/qthelper.cpp \
+ core/checkcloudconnection.cpp \
+ core/color.cpp \
+ core/configuredivecomputer.cpp \
+ core/divelogexportlogic.cpp \
+ core/divesitehelpers.cpp \
+ core/errorhelper.c \
+ core/exif.cpp \
+ core/format.cpp \
+ core/gettextfromc.cpp \
+ core/metrics.cpp \
+ core/qt-init.cpp \
+ core/subsurfacesysinfo.cpp \
+ core/windowtitleupdate.cpp \
+ core/file.c \
+ core/fulltext.cpp \
+ core/subsurfacestartup.c \
+ core/android.cpp \
+ core/profile.c \
+ core/device.cpp \
+ core/dive.c \
+ core/divecomputer.c \
+ core/divefilter.cpp \
+ core/event.c \
+ core/filterconstraint.cpp \
+ core/filterpreset.cpp \
+ core/divelist.c \
+ core/gas-model.c \
+ core/gaspressures.c \
+ core/git-access.c \
+ core/liquivision.c \
+ core/load-git.c \
+ core/parse-xml.c \
+ core/parse.c \
+ core/picture.c \
+ core/pictureobj.cpp \
+ core/sample.c \
+ core/import-suunto.c \
+ core/import-shearwater.c \
+ core/import-seac.c \
+ core/import-cobalt.c \
+ core/import-divinglog.c \
+ core/import-csv.c \
+ core/save-html.c \
+ core/statistics.c \
+ core/worldmap-save.c \
+ core/libdivecomputer.c \
+ core/serial_usb_android.cpp \
+ core/version.c \
+ core/save-git.c \
+ core/datatrak.c \
+ core/ostctools.c \
+ core/planner.c \
+ core/save-xml.c \
+ core/cochran.c \
+ core/deco.c \
+ core/divesite.c \
+ core/equipment.c \
+ core/gas.c \
+ core/membuffer.c \
+ core/selection.cpp \
+ core/sha1.c \
+ core/strtod.c \
+ core/tag.c \
+ core/taxonomy.c \
+ core/time.c \
+ core/trip.c \
+ core/units.c \
+ core/uemis.c \
+ core/btdiscovery.cpp \
+ core/connectionlistmodel.cpp \
+ core/qt-ble.cpp \
+ core/uploadDiveShare.cpp \
+ core/uploadDiveLogsDE.cpp \
+ core/save-profiledata.c \
+ core/xmlparams.cpp \
+ core/settings/qPref.cpp \
+ core/settings/qPrefCloudStorage.cpp \
+ core/settings/qPrefDisplay.cpp \
+ core/settings/qPrefDiveComputer.cpp \
+ core/settings/qPrefDivePlanner.cpp \
+ core/settings/qPrefGeneral.cpp \
+ core/settings/qPrefGeocoding.cpp \
+ core/settings/qPrefLanguage.cpp \
+ core/settings/qPrefLocationService.cpp \
+ core/settings/qPrefPartialPressureGas.cpp \
+ core/settings/qPrefPrivate.cpp \
+ core/settings/qPrefProxy.cpp \
+ core/settings/qPrefTechnicalDetails.cpp \
+ core/settings/qPrefUnit.cpp \
+ core/settings/qPrefEquipment.cpp \
+ core/settings/qPrefLog.cpp \
+ core/settings/qPrefMedia.cpp \
+ core/settings/qPrefUpdateManager.cpp \
+ core/subsurface-qt/cylinderobjecthelper.cpp \
+ core/subsurface-qt/diveobjecthelper.cpp \
+ core/subsurface-qt/divelistnotifier.cpp \
+ backend-shared/exportfuncs.cpp \
+ backend-shared/plannershared.cpp \
+ mobile-widgets/qmlinterface.cpp \
+ mobile-widgets/qmlmanager.cpp \
+ mobile-widgets/themeinterface.cpp \
+ qt-models/divesummarymodel.cpp \
+ qt-models/diveplotdatamodel.cpp \
+ qt-models/gpslistmodel.cpp \
+ qt-models/completionmodels.cpp \
+ qt-models/divelocationmodel.cpp \
+ qt-models/maplocationmodel.cpp \
+ qt-models/diveimportedmodel.cpp \
+ qt-models/messagehandlermodel.cpp \
+ qt-models/diveplannermodel.cpp \
+ qt-models/divetripmodel.cpp \
+ qt-models/mobilelistmodel.cpp \
+ qt-models/cylindermodel.cpp \
+ qt-models/cleanertablemodel.cpp \
+ qt-models/tankinfomodel.cpp \
+ qt-models/models.cpp \
+ qt-models/weightsysteminfomodel.cpp \
+ qt-models/filterconstraintmodel.cpp \
+ qt-models/filterpresetmodel.cpp \
+ profile-widget/qmlprofile.cpp \
+ profile-widget/divecartesianaxis.cpp \
+ profile-widget/diveeventitem.cpp \
+ profile-widget/diveprofileitem.cpp \
+ profile-widget/profilewidget2.cpp \
+ profile-widget/ruleritem.cpp \
+ profile-widget/animationfunctions.cpp \
+ profile-widget/divepixmapitem.cpp \
+ profile-widget/divetooltipitem.cpp \
+ profile-widget/tankitem.cpp \
+ profile-widget/divelineitem.cpp \
+ profile-widget/diverectitem.cpp \
+ profile-widget/divetextitem.cpp
+
+RESOURCES += mobile-widgets/qml/mobile-resources.qrc \
+ map-widget/qml/map-widget.qrc \
+ packaging/android/translations.qrc
+
+# at link time our CWD is parallel to the install-root
+LIBS += ../install-root-$${QT_ARCH}/lib/libdivecomputer.a \
+ ../install-root-$${QT_ARCH}/lib/libgit2.a \
+ ../install-root-$${QT_ARCH}/lib/libzip.a \
+ ../install-root-$${QT_ARCH}/lib/libxslt.a \
+ ../install-root-$${QT_ARCH}/lib/libxml2.a \
+ ../install-root-$${QT_ARCH}/lib/libsqlite3.a \
+ ../install-root-$${QT_ARCH}/lib/libssl_1_1.so \
+ ../install-root-$${QT_ARCH}/lib/libcrypto_1_1.so \
+ ../googlemaps-build/libqtgeoservices_googlemaps_$${QT_ARCH}.so
+
+# ensure that the openssl libraries are bundled into the app
+ANDROID_EXTRA_LIBS += \
+ ../install-root-$${QT_ARCH}/lib/libcrypto_1_1.so \
+ ../install-root-$${QT_ARCH}/lib/libssl_1_1.so
+
+INCLUDEPATH += ../install-root-$${QT_ARCH}/include/ \
+ ../install-root/lib/libzip/include \
+ ../install-root-$${QT_ARCH}/include/libxstl \
+ ../install-root-$${QT_ARCH}/include/libxml2 \
+ ../install-root-$${QT_ARCH}/include/libexstl \
+ ../install-root-$${QT_ARCH}/include/openssl \
+ . \
+ core \
+ mobile-widgets/qml/kirigami/src/libkirigami
+
+
+HEADERS += \
+ commands/command_base.h \
+ commands/command.h \
+ commands/command_device.h \
+ commands/command_divelist.h \
+ commands/command_divesite.h \
+ commands/command_edit.h \
+ commands/command_edit_trip.h \
+ commands/command_event.h \
+ commands/command_filter.h \
+ commands/command_pictures.h \
+ core/interpolate.h \
+ core/libdivecomputer.h \
+ core/cloudstorage.h \
+ core/configuredivecomputerthreads.h \
+ core/device.h \
+ core/devicedetails.h \
+ core/dive.h \
+ core/divecomputer.h \
+ core/event.h \
+ core/extradata.h \
+ core/git-access.h \
+ core/gpslocation.h \
+ core/pref.h \
+ core/profile.h \
+ core/qthelper.h \
+ core/save-html.h \
+ core/statistics.h \
+ core/units.h \
+ core/version.h \
+ core/picture.h \
+ core/pictureobj.h \
+ core/planner.h \
+ core/divesite.h \
+ core/checkcloudconnection.h \
+ core/cochran.h \
+ core/color.h \
+ core/configuredivecomputer.h \
+ core/datatrak.h \
+ core/deco.h \
+ core/display.h \
+ core/divefilter.h \
+ core/filterconstraint.h \
+ core/filterpreset.h \
+ core/divelist.h \
+ core/divelogexportlogic.h \
+ core/divesitehelpers.h \
+ core/exif.h \
+ core/file.h \
+ core/fulltext.h \
+ core/gaspressures.h \
+ core/gettext.h \
+ core/gettextfromc.h \
+ core/membuffer.h \
+ core/metrics.h \
+ core/qt-gui.h \
+ core/sample.h \
+ core/selection.h \
+ core/sha1.h \
+ core/strndup.h \
+ core/subsurfacestartup.h \
+ core/subsurfacesysinfo.h \
+ core/taxonomy.h \
+ core/uemis.h \
+ core/webservice.h \
+ core/windowtitleupdate.h \
+ core/worldmap-options.h \
+ core/worldmap-save.h \
+ core/downloadfromdcthread.h \
+ core/btdiscovery.h \
+ core/connectionlistmodel.h \
+ core/qt-ble.h \
+ core/save-profiledata.h \
+ core/uploadDiveShare.h \
+ core/uploadDiveLogsDE.h \
+ core/xmlparams.h \
+ core/settings/qPref.h \
+ core/settings/qPrefCloudStorage.h \
+ core/settings/qPrefDisplay.h \
+ core/settings/qPrefDiveComputer.h \
+ core/settings/qPrefDivePlanner.h \
+ core/settings/qPrefGeneral.h \
+ core/settings/qPrefGeocoding.h \
+ core/settings/qPrefLanguage.h \
+ core/settings/qPrefLocationService.h \
+ core/settings/qPrefPartialPressureGas.h \
+ core/settings/qPrefPrivate.h \
+ core/settings/qPrefProxy.h \
+ core/settings/qPrefTechnicalDetails.h \
+ core/settings/qPrefUnit.h \
+ core/settings/qPrefEquipment.h \
+ core/settings/qPrefLog.h \
+ core/settings/qPrefMedia.h \
+ core/settings/qPrefUpdateManager.h \
+ core/subsurface-qt/cylinderobjecthelper.h \
+ core/subsurface-qt/diveobjecthelper.h \
+ core/subsurface-qt/divelistnotifier.h \
+ backend-shared/exportfuncs.h \
+ backend-shared/plannershared.h \
+ mobile-widgets/qmlinterface.h \
+ mobile-widgets/qmlmanager.h \
+ mobile-widgets/themeinterface.h \
+ map-widget/qmlmapwidgethelper.h \
+ qt-models/divesummarymodel.h \
+ qt-models/diveplotdatamodel.h \
+ qt-models/gpslistmodel.h \
+ qt-models/divelocationmodel.h \
+ qt-models/completionmodels.h \
+ qt-models/weightsysteminfomodel.h \
+ qt-models/maplocationmodel.h \
+ qt-models/diveimportedmodel.h \
+ qt-models/messagehandlermodel.h \
+ qt-models/diveplannermodel.h \
+ qt-models/divetripmodel.h \
+ qt-models/mobilelistmodel.h \
+ qt-models/cylindermodel.h \
+ qt-models/cleanertablemodel.h \
+ qt-models/tankinfomodel.h \
+ qt-models/models.h \
+ qt-models/weightsysteminfomodel.h \
+ qt-models/filterconstraintmodel.h \
+ qt-models/filterpresetmodel.h \
+ profile-widget/qmlprofile.h \
+ profile-widget/diveprofileitem.h \
+ profile-widget/profilewidget2.h \
+ profile-widget/ruleritem.h \
+ profile-widget/diveeventitem.h \
+ profile-widget/divetooltipitem.h \
+ profile-widget/tankitem.h \
+ profile-widget/animationfunctions.h \
+ profile-widget/divecartesianaxis.h \
+ profile-widget/divelineitem.h \
+ profile-widget/divepixmapitem.h \
+ profile-widget/diverectitem.h \
+ profile-widget/divetextitem.h
+
+include(mobile-widgets/qml/kirigami/kirigami.pri)
+
+android {
+ ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-mobile
+ ANDROID_VERSION_CODE = $$BUILD_NR
+ ANDROID_VERSION_NAME = $$BUILD_VERSION_NAME
+
+ DISTFILES += \
+ android-build/AndroidManifest.xml \
+ android-build/build.gradle \
+ android-build/res/values/libs.xml
+}
diff --git a/packaging/android/build.sh b/packaging/android/build.sh
index 718721b6a..53b22c7b8 100755
--- a/packaging/android/build.sh
+++ b/packaging/android/build.sh
@@ -1,5 +1,11 @@
#!/bin/bash
#
+# THIS IS OBSOLETE AN ONLY WORKS UP TO Qt 5.13
+# for now keeping it around for reference
+
+
+
+#
# Filesystem layout considerations...
# for this explanation I assume that your Subsurface sources are in
# ~/src/subsurface
diff --git a/packaging/android/qmake-build.sh b/packaging/android/qmake-build.sh
new file mode 100755
index 000000000..6b4321ad2
--- /dev/null
+++ b/packaging/android/qmake-build.sh
@@ -0,0 +1,369 @@
+#!/bin/bash
+#
+# build a multi architecture package for Android
+#
+# this requires Qt5.14 or newer with matching NDK
+#
+# the packaging/android/android-build-setup.sh sets up an environment that works for this
+
+set -eu
+
+exec 1> >(tee ./android-build.log) 2>&1
+
+# get the absolute path
+pushd "$(dirname "$0")/../../"
+export SUBSURFACE_SOURCE=$PWD
+cd ..
+export BUILDROOT=$PWD
+popd
+
+# Set build defaults
+# is this a release or debug build
+BUILD_TYPE=Debug
+
+# and now we need a monotonic build number...
+if [ ! -f ./buildnr.dat ] ; then
+ BUILDNR=0
+else
+ BUILDNR=$(cat ./buildnr.dat)
+fi
+BUILDNR=$((BUILDNR+1))
+echo "${BUILDNR}" > ./buildnr.dat
+
+# Read build variables
+source $SUBSURFACE_SOURCE/packaging/android/variables.sh
+
+# this assumes that the Subsurface source directory is in the same
+# directory hierarchy as the SDK and NDK
+export ANDROID_NDK_ROOT="$SUBSURFACE_SOURCE/../$ANDROID_NDK"
+export ANDROID_SDK_ROOT="$SUBSURFACE_SOURCE/.."
+
+QUICK=""
+ARCHITECTURES=""
+BUILD_ABIS=""
+versionOnly=""
+
+while [ "$#" -gt 0 ] ; do
+ case "$1" in
+ Release|release)
+ shift
+ BUILD_TYPE=Release
+ ;;
+ Debug|debug)
+ # this is the default - still need to eat the argument if given
+ BUILD_TYPE=Debug
+ shift
+ ;;
+ -buildnr)
+ shift
+ BUILDNR=$1
+ shift
+ ;;
+ -version)
+ # only update the version info without rebuilding
+ # this is useful when working with Xcode
+ versionOnly="1"
+ ;;
+ arm|arm64|x86|x86_64)
+ ARCHITECTURES=$1
+ shift
+ ;;
+ -quick)
+ QUICK="1"
+ shift
+ ;;
+ *)
+ echo "Unknown argument $1"
+ exit 1
+ ;;
+ esac
+done
+
+mkdir -p "$BUILDROOT"/subsurface-mobile-build
+pushd "$BUILDROOT"/subsurface-mobile-build
+
+# set up the Subsurface versions by hand
+GITVERSION=$(cd "$SUBSURFACE_SOURCE" ; git describe --abbrev=12)
+CANONICALVERSION=$(echo "$GITVERSION" | sed -e 's/-g.*$// ; s/^v//' | sed -e 's/-/./')
+MOBILEVERSION=$(grep MOBILE "$SUBSURFACE_SOURCE"/cmake/Modules/version.cmake | cut -d\" -f 2)
+echo "#define GIT_VERSION_STRING \"$GITVERSION\"" > ssrf-version.h
+echo "#define CANONICAL_VERSION_STRING \"$CANONICALVERSION\"" >> ssrf-version.h
+echo "#define MOBILE_VERSION_STRING \"$MOBILEVERSION\"" >> ssrf-version.h
+SUBSURFACE_MOBILE_VERSION="$MOBILEVERSION ($CANONICALVERSION)"
+popd
+
+if [ "$versionOnly" = "1" ] ; then
+ exit 0
+fi
+
+# pick the Qt setup and show the configuration info
+if [ -n "${QT5_ANDROID+X}" ] ; then
+ echo "Using Qt5 in $QT5_ANDROID"
+elif [ -d "$SUBSURFACE_SOURCE/../${LATEST_QT}" ] ; then
+ export QT5_ANDROID=$SUBSURFACE_SOURCE/../${LATEST_QT}
+else
+ echo "Cannot find Qt 5.12 or newer under $SUBSURFACE_SOURCE/.."
+ exit 1
+fi
+
+QMAKE=$QT5_ANDROID/android/bin/qmake
+echo $QMAKE
+$QMAKE -query
+
+
+# if we are just doing a quick rebuild, don't bother with any of the dependencies
+
+if [ "$QUICK" = "" ] ; then
+
+ # build google maps plugin
+ # this is the easy one as it uses qmake which ensures things get built for all platforms, etc
+ "${SUBSURFACE_SOURCE}"/scripts/get-dep-lib.sh singleAndroid . googlemaps
+ QT_PLUGINS_PATH=$($QMAKE -query QT_INSTALL_PLUGINS)
+ GOOGLEMAPS_BIN=libqtgeoservices_googlemaps.so
+ if [ ! -e "$QT_PLUGINS_PATH"/geoservices/$GOOGLEMAPS_BIN ] || [ googlemaps/.git/HEAD -nt "$QT_PLUGINS_PATH"/geoservices/$GOOGLEMAPS_BIN ] ; then
+ mkdir -p googlemaps-build
+ pushd googlemaps-build
+ $QMAKE ../googlemaps/googlemaps.pro
+ make -j4
+ # $QMAKE -install qinstall -exe $GOOGLEMAPS_BIN "$QT_PLUGINS_PATH"/geoservices/$GOOGLEMAPS_BIN
+ make install
+ popd
+ fi
+fi
+
+# autoconf based libraries are harder
+export TOOLCHAIN="$ANDROID_NDK_ROOT"/toolchains/llvm/prebuilt/linux-x86_64
+PATH=$TOOLCHAIN/bin:$PATH
+export ANDROID_NDK_HOME=$ANDROID_NDK_ROOT # redundant, but that's what openssl wants
+
+# build default architectures, or the given one?
+if [ "$ARCHITECTURES" = "" ] ; then
+ ARCHITECTURES="armv7a aarch64"
+fi
+
+for ARCH in $ARCHITECTURES ; do
+ echo "START building libraries for $ARCH"
+ echo "====================================="
+
+ # it would of course be too easy to use these terms consistently, so let's not
+ if [ "$ARCH" = "armv7a" ] ; then
+ EABI="eabi"
+ BINUTIL_ARCH="arm"
+ OPENSSL_ARCH="arm"
+ ANDROID_ABI="armeabi-v7a"
+ else
+ EABI=""
+ BINUTIL_ARCH="aarch64"
+ OPENSSL_ARCH="arm64"
+ ANDROID_ABI="arm64-v8a"
+ fi
+ BUILD_ABIS="$BUILD_ABIS $ANDROID_ABI"
+
+ export TARGET=$ARCH-linux-android
+
+ export AR=$TOOLCHAIN/bin/$BINUTIL_ARCH-linux-android$EABI-ar
+ export AS=$TOOLCHAIN/bin/$BINUTIL_ARCH-linux-android$EABI-as
+ export CC=$TOOLCHAIN/bin/$TARGET$EABI$ANDROID_PLATFORM_LEVEL-clang
+ export CXX=$TOOLCHAIN/bin/$TARGET$EABI$ANDROID_PLATFORM_LEVEL-clang++
+ export LD=$TOOLCHAIN/bin/$BINUTIL_ARCH-linux-android$EABI-ld
+ export RANLIB=$TOOLCHAIN/bin/$BINUTIL_ARCH-linux-android$EABI-ranlib
+ export STRIP=$TOOLCHAIN/bin/$BINUTIL_ARCH-linux-android$EABI-strip
+
+ # set up an install root and create part of the directory structure so the openssl
+ # manual install below doesn't fail
+ export PREFIX="$BUILDROOT"/install-root-"$ANDROID_ABI"
+ mkdir -p "$PREFIX"/include
+ mkdir -p "$PREFIX"/lib/pkgconfig
+ export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
+
+ if [ "$QUICK" = "" ] ; then
+ "${SUBSURFACE_SOURCE}"/scripts/get-dep-lib.sh singleAndroid . openssl
+ if [ ! -e "$PKG_CONFIG_PATH/libssl.pc" ] ; then
+ # openssl build fails with these set
+ export SYSROOT=""
+ export CFLAGS=""
+ export CPPFLAGS=""
+ export CXXFLAGS=""
+
+ mkdir -p openssl-build-"$ARCH"
+ cp -r openssl/* openssl-build-"$ARCH"
+ pushd openssl-build-"$ARCH"
+ perl -pi -e 's/-mandroid//g' Configure
+ ./Configure shared android-"$OPENSSL_ARCH" no-ssl2 no-ssl3 no-comp no-hw no-engine no-asm \
+ --prefix="$PREFIX" -DOPENSSL_NO_UI_CONSOLE -DOPENSSL_NO_STDIO \
+ -D__ANDROID_API__=$ANDROID_PLATFORM_LEVEL
+ make depend
+ # follow the suggestions here: https://doc.qt.io/qt-5/android-openssl-support.html
+ make SHLIB_VERSION_NUMBER= SHLIB_EXT=_1_1.so build_libs
+
+ cp -RL include/openssl $PREFIX/include/openssl
+ cp libcrypto.a $PREFIX/lib
+ cp libcrypto_1_1.so* $PREFIX/lib
+ cp libssl.a $PREFIX/lib
+ cp libssl_1_1.so* $PREFIX/lib
+ cp *.pc $PKG_CONFIG_PATH
+
+ popd
+ fi
+
+ fi
+
+ # autoconf seems to get lost without this -- but openssl fails if these are set
+ SYSROOT="$ANDROID_NDK_ROOT"/toolchains/llvm/prebuilt/linux-x86_64/sysroot
+ CFLAGS="--sysroot=${SYSROOT} -fPIC"
+ CPPFLAGS="--sysroot=${SYSROOT} -fPIC"
+ CXXFLAGS="--sysroot=${SYSROOT} -fPIC"
+
+ if [ "$QUICK" = "" ] ; then
+ "${SUBSURFACE_SOURCE}"/scripts/get-dep-lib.sh singleAndroid . sqlite
+ if [ ! -e "$PKG_CONFIG_PATH/sqlite3.pc" ] ; then
+ mkdir -p sqlite-build-"$ARCH"
+ pushd sqlite-build-"$ARCH"
+ ../sqlite/configure --host="$TARGET" --prefix="$PREFIX" --enable-static --disable-shared
+ make
+ make install
+ popd
+ fi
+
+ "${SUBSURFACE_SOURCE}"/scripts/get-dep-lib.sh singleAndroid . libxml2
+ if [ ! -e libxml2/configure ] ; then
+ pushd libxml2
+ autoreconf --install
+ popd
+ fi
+ if [ ! -e "$PKG_CONFIG_PATH/libxml-2.0.pc" ] ; then
+ mkdir -p libxml2-build-"$ARCH"
+ pushd libxml2-build-"$ARCH"
+ ../libxml2/configure --host="$TARGET" --prefix="$PREFIX" --without-python --without-iconv --enable-static --disable-shared
+ perl -pi -e 's/runtest\$\(EXEEXT\)//' Makefile
+ perl -pi -e 's/testrecurse\$\(EXEEXT\)//' Makefile
+ make
+ make install
+ popd
+ fi
+
+ "${SUBSURFACE_SOURCE}"/scripts/get-dep-lib.sh singleAndroid . libxslt
+ if [ ! -e libxslt/configure ] ; then
+ pushd libxslt
+ autoreconf --install
+ popd
+ fi
+ if [ ! -e "$PKG_CONFIG_PATH/libxslt.pc" ] ; then
+ mkdir -p libxslt-build-"$ARCH"
+ pushd libxslt-build-"$ARCH"
+ ../libxslt/configure --host="$TARGET" --prefix="$PREFIX" --with-libxml-prefix="$PREFIX" --without-python --without-crypto --enable-static --disable-shared
+ make
+ make install
+ popd
+ fi
+
+ "${SUBSURFACE_SOURCE}"/scripts/get-dep-lib.sh singleAndroid . libzip
+ if [ ! -e "$PKG_CONFIG_PATH/libzip.pc" ] ; then
+ # libzip expects a predefined macro that isn't there for our compiler
+ pushd libzip
+ git reset --hard
+ sed -i 's/SIZEOF_SIZE_T/__SIZEOF_SIZE_T__/g' lib/compat.h
+ # also, don't deal with manuals and bzip2
+ sed -i 's/ADD_SUBDIRECTORY(man)//' CMakeLists.txt
+ sed -i 's/^FIND_PACKAGE(ZLIB/#&/' CMakeLists.txt
+ popd
+ mkdir -p libzip-build-"$ARCH"
+ pushd libzip-build-"$ARCH"
+ cmake \
+ -DCMAKE_C_COMPILER="$CC" \
+ -DCMAKE_LINKER="$CC" \
+ -DCMAKE_INSTALL_PREFIX="$PREFIX" \
+ -DCMAKE_INSTALL_LIBDIR="lib" \
+ -DBUILD_SHARED_LIBS=OFF \
+ -DCMAKE_DISABLE_FIND_PACKAGE_BZip2=TRUE \
+ -DZLIB_VERSION_STRING=1.2.7 \
+ -DZLIB_LIBRARY=z \
+ ../libzip/
+ make
+ make install
+ popd
+ fi
+
+ "${SUBSURFACE_SOURCE}"/scripts/get-dep-lib.sh singleAndroid . libgit2
+ if [ ! -e "$PKG_CONFIG_PATH/libgit2.pc" ] ; then
+ # We don't want to find the HTTP_Parser package of the build host by mistake
+ mkdir -p libgit2-build-"$ARCH"
+ pushd libgit2-build-"$ARCH"
+ cmake \
+ -DCMAKE_C_COMPILER="$CC" \
+ -DCMAKE_LINKER="$CC" \
+ -DBUILD_CLAR=OFF -DBUILD_SHARED_LIBS=OFF \
+ -DCMAKE_INSTALL_PREFIX="$PREFIX" \
+ -DCURL=OFF \
+ -DUSE_SSH=OFF \
+ -DOPENSSL_SSL_LIBRARY="$PREFIX"/lib/libssl_1_1.so \
+ -DOPENSSL_CRYPTO_LIBRARY="$PREFIX"/lib/libcrypto_1_1.so \
+ -DOPENSSL_INCLUDE_DIR="$PREFIX"/include \
+ -D_OPENSSL_VERSION="${OPENSSL_VERSION}" \
+ -DCMAKE_DISABLE_FIND_PACKAGE_HTTP_Parser=TRUE \
+ ../libgit2/
+ make
+ make install
+ # Patch away pkg-config dependency to zlib, its there, i promise
+ perl -pi -e 's/^(Requires.private:.*)zlib(.*)$/$1 $2/' "$PKG_CONFIG_PATH"/libgit2.pc
+ popd
+ fi
+
+ fi # QUICK
+
+ CURRENT_SHA=$(cd "$SUBSURFACE_SOURCE"/libdivecomputer ; git describe)
+ PREVIOUS_SHA=$(cat "libdivecomputer-${ARCH}.SHA" 2>/dev/null || echo)
+ if [ ! "$CURRENT_SHA" = "$PREVIOUS_SHA" ] || [ ! -e "$PKG_CONFIG_PATH/libdivecomputer.pc" ] ; then
+ mkdir -p libdivecomputer-build-"$ARCH"
+ pushd libdivecomputer-build-"$ARCH"
+ "$SUBSURFACE_SOURCE"/libdivecomputer/configure --host="$TARGET" --prefix="$PREFIX" --enable-static --disable-shared --enable-examples=no
+ make
+ make install
+ popd
+ echo "$CURRENT_SHA" > "libdivecomputer-${ARCH}.SHA"
+ fi
+ echo "DONE building libraries for $ARCH"
+ echo "====================================="
+done # ARCH
+
+#"${SUBSURFACE_SOURCE}"/scripts/get-dep-lib.sh singleAndroid . qt-android-cmake
+# the Qt Android cmake addon runs androiddeployqt with '--verbose' which
+# is, err, rather verbose. Let's not do that.
+#sed -i -e 's/--verbose//' qt-android-cmake/AddQtAndroidApk.cmake
+
+# if this isn't just a quick rebuild, pull kirigami, icons, etc
+if [ "$QUICK" = "" ] ; then
+ pushd "$SUBSURFACE_SOURCE"
+ bash ./scripts/mobilecomponents.sh
+ popd
+fi
+
+# set up the final build
+pushd "$BUILDROOT"/subsurface-mobile-build
+rm -rf android-build
+mkdir android-build
+pushd "$SUBSURFACE_SOURCE"/android-mobile
+tar c . | (cd "$BUILDROOT"/subsurface-mobile-build/android-build ; tar x)
+popd
+
+# call qmake to set up the build
+echo "Run qmake to setup the Subsurface-mobile build for all architectures"
+$QMAKE BUILD_NR="$BUILDNR" BUILD_VERSION_NAME="$SUBSURFACE_MOBILE_VERSION" ANDROID_ABIS="$BUILD_ABIS" "$SUBSURFACE_SOURCE"/Subsurface-mobile-android.pro
+
+
+# if this isn't just a quick rebuild compile the translations
+if [ "$QUICK" = "" ] ; then
+ pushd "$SUBSURFACE_SOURCE"/translations
+ SRCS=$(ls ./*.ts | grep -v source)
+ popd
+ pushd "$SUBSURFACE_SOURCE"/packaging/android
+ mkdir -p translation-assets
+ for src in $SRCS; do
+ "$QT5_ANDROID"/android/bin/lrelease "$SUBSURFACE_SOURCE"/translations/"$src" -qm translation-assets/"${src/.ts/.qm}"
+ done
+ popd
+fi
+
+# now build the Subsurface aab
+make aab
+
diff --git a/packaging/android/translations.qrc b/packaging/android/translations.qrc
new file mode 100644
index 000000000..2bf25d0fc
--- /dev/null
+++ b/packaging/android/translations.qrc
@@ -0,0 +1,27 @@
+<RCC>
+ <qresource prefix="/">
+ <file alias="subsurface_bg_BG.qm">translation-assets/subsurface_bg_BG.qm</file>
+ <file alias="subsurface_cd.qm">translation-assets/subsurface_cs.qm</file>
+ <file alias="subsurface_da_DK.qm">translation-assets/subsurface_da_DK.qm</file>
+ <file alias="subsurface_de_CH">translation-assets/subsurface_de_CH.qm</file>
+ <file alias="subsurface_de_DE">translation-assets/subsurface_de_DE.qm</file>
+ <file alias="subsurface_en_GB">translation-assets/subsurface_en_GB.qm</file>
+ <file alias="subsurface_en_US">translation-assets/subsurface_en_US.qm</file>
+ <file alias="subsurface_es_ES">translation-assets/subsurface_es_ES.qm</file>
+ <file alias="subsurface_et_EE">translation-assets/subsurface_et_EE.qm</file>
+ <file alias="subsurface_fi_FI">translation-assets/subsurface_fi_FI.qm</file>
+ <file alias="subsurface_fr_FR">translation-assets/subsurface_fr_FR.qm</file>
+ <file alias="subsurface_he">translation-assets/subsurface_he.qm</file>
+ <file alias="subsurface_it_IT">translation-assets/subsurface_it_IT.qm</file>
+ <file alias="subsurface_nb_NO">translation-assets/subsurface_nb_NO.qm</file>
+ <file alias="subsurface_nl_NL">translation-assets/subsurface_nl_NL.qm</file>
+ <file alias="subsurface_pl_PL">translation-assets/subsurface_pl_PL.qm</file>
+ <file alias="subsurface_pt_BR">translation-assets/subsurface_pt_BR.qm</file>
+ <file alias="subsurface_pt_PT">translation-assets/subsurface_pt_PT.qm</file>
+ <file alias="subsurface_ro_RO">translation-assets/subsurface_ro_RO.qm</file>
+ <file alias="subsurface_ru_RU">translation-assets/subsurface_ru_RU.qm</file>
+ <file alias="subsurface_sk_SK">translation-assets/subsurface_sk_SK.qm</file>
+ <file alias="subsurface_sv_SE">translation-assets/subsurface_sv_SE.qm</file>
+ <file alias="subsurface_zh_TW">translation-assets/subsurface_zh_TW.qm</file>
+ </qresource>
+</RCC>