This introduces code to use qt-android-cmake to produce a working apk.

Signed-off-by: Anton Lundin <[email protected]>
---
 CMakeLists.txt             | 21 +++++++++++++--------
 packaging/android/build.sh | 15 ++++++++++++++-
 2 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index a2e7dd5..1d002a0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -163,7 +163,7 @@ if(SUBSURFACE_MOBILE)
        set(QT_QUICK_PKG Quick)
        set(QT_QUICK_LIB Qt5::Quick)
 endif()
-if(CMAKE_SYSTEM_NAME STREQUAL "Android")
+if(ANDROID)
        set(ANDROID_PKG AndroidExtras)
        set(ANDROID_LIB Qt5::AndroidExtras)
        set(FBSUPPORT OFF)
@@ -235,9 +235,8 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
        # in some builds we appear to be missing libz for some strange reason...
        set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lz)
 endif()
-if(CMAKE_SYSTEM_NAME STREQUAL "Android")
+if(ANDROID)
        set(PLATFORM_SRC android.cpp)
-       # FIXME: Shouldn't cmake/Qt add this automatically somehow?
        add_definitions(-DQ_OS_ANDROID)
        set(SUBSURFACE_TARGET subsurface)
 endif()
@@ -448,7 +447,7 @@ target_link_libraries(subsurface_interface ${QT_LIBRARIES} 
${MARBLE_LIBRARIES})
 # add pthread to the end of the library list on Linux
 # this is only needed on Ubuntu (why do these idiots break everything?)
 # but shouldn't hurt on other Linux versions
-if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT ANDROID)
        set(SUBSURFACE_LINK_LIBRARIES ${SUBSURFACE_LINK_LIBRARIES} -lpthread)
 endif()
 
@@ -468,9 +467,9 @@ if(SUBSURFACE_MOBILE)
                subsurface_corelib
                ${SUBSURFACE_LINK_LIBRARIES})
 else()
-       if(CMAKE_SYSTEM_NAME STREQUAL "Android")
-               # FIXME: is this the right way to link somehting which
-               # androiddeployqt can work with?
+       if(ANDROID)
+               # Produce a shared-library instead of a program.
+               # Something that androiddeployqt can work with.
                add_library(${SUBSURFACE_TARGET} SHARED ${SUBSURFACE_PKG} 
${SUBSURFACE_APP} ${SUBSURFACE_RESOURCES})
        else()
                add_executable(${SUBSURFACE_TARGET} MACOSX_BUNDLE WIN32 
${SUBSURFACE_PKG} ${SUBSURFACE_APP} ${SUBSURFACE_RESOURCES})
@@ -714,9 +713,15 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
        )
 endif()
 
-if(CMAKE_SYSTEM_NAME STREQUAL "Android")
+if(ANDROID)
        # Android template directory
        set(ANDROID_PACKAGE_SOURCE_DIR, ${CMAKE_BINARY_DIR}/android)
+       include(${QT_ANDROID_CMAKE})
+       add_qt_android_apk(subsurface.apk ${SUBSURFACE_TARGET}
+               NAME "Subsurface"
+               PACKAGE_NAME "org.subsurfacedivelog"
+               PACKAGE_SOURCES ${CMAKE_CURRENT_LIST_DIR}/android
+               )
 endif()
 
 if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
diff --git a/packaging/android/build.sh b/packaging/android/build.sh
index b70704f..c569c74 100644
--- a/packaging/android/build.sh
+++ b/packaging/android/build.sh
@@ -16,6 +16,7 @@ export ANDROID_NDK_HOST=linux-x86
 SQLITE_VERSION=3081002
 LIBXML2_VERSION=2.9.2
 LIBXSLT_VERSION=1.1.28
+LIBZIP_VERSION=1.0.1
 LIBZIP_VERSION=0.11.2
 LIBGIT2_VERSION=0.23.0
 LIBUSB_VERSION=1.0.19
@@ -41,6 +42,9 @@ export PREFIX=${BUILDROOT}/ndk-$ARCH/sysroot/usr
 export PKG_CONFIG_LIBDIR=${PREFIX}/lib/pkgconfig
 export CC=${BUILDROOT}/ndk-$ARCH/bin/${BUILDCHAIN}-gcc
 export CXX=${BUILDROOT}/ndk-$ARCH/bin/${BUILDCHAIN}-g++
+# Junk needed for qt-android-cmake
+export ANDROID_STANDALONE_TOOLCHAIN=${BUILDROOT}/ndk-$ARCH
+export JAVA_HOME=/usr
 
 if [ ! -e sqlite-autoconf-${SQLITE_VERSION}.tar.gz ] ; then
        wget http://www.sqlite.org/2015/sqlite-autoconf-${SQLITE_VERSION}.tar.gz
@@ -156,9 +160,18 @@ if [ ! -e $PKG_CONFIG_LIBDIR/libdivecomputer.pc ] ; then
        popd
 fi
 
+if [ ! -e qt-android-cmake ] ; then
+       git clone git://github.com/LaurentGomila/qt-android-cmake.git
+else
+       pushd qt-android-cmake
+       git pull -u
+       popd
+fi
+
 mkdir -p subsurface-build-$ARCH
 cd subsurface-build-$ARCH
-cmake -DCMAKE_SYSTEM_NAME=Android -DFORCE_LIBSSH=OFF -DLIBDC_FROM_PKGCONFIG=ON 
-DLIBGIT2_FROM_PKGCONFIG=ON -DUSE_LIBGIT23_API=ON -DNO_MARBLE=ON 
-DNO_PRINTING=ON -DNO_USERMANUAL=ON 
-DCMAKE_PREFIX_PATH:UNINITIALIZED=${QT5_ANDROID}/android_${QT_ARCH}/lib/cmake 
$SUBSURFACE_SOURCE
+# somehting in the qt-android-cmake-thingies mangles your path, so thats why 
we need to hard-code ant and pkg-config here.
+cmake -DQT_ANDROID_ANT=/usr/bin/ant 
-DPKG_CONFIG_EXECUTABLE=/usr/bin/pkg-config 
-DQT_ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT -DQT_ANDROID_NDK_ROOT=$ANDROID_NDK_ROOT 
-DCMAKE_TOOLCHAIN_FILE=$BUILDROOT/qt-android-cmake/toolchain/android.toolchain.cmake
 -DQT_ANDROID_CMAKE=$BUILDROOT/qt-android-cmake/AddQtAndroidApk.cmake 
-DFORCE_LIBSSH=OFF -DLIBDC_FROM_PKGCONFIG=ON -DLIBGIT2_FROM_PKGCONFIG=ON 
-DUSE_LIBGIT23_API=ON -DNO_MARBLE=ON -DNO_PRINTING=ON -DNO_USERMANUAL=ON 
-DCMAKE_PREFIX_PATH:UNINITIALIZED=${QT5_ANDROID}/android_${QT_ARCH}/lib/cmake 
$SUBSURFACE_SOURCE
 make
 #make install INSTALL_ROOT=android_build
 # bug in androiddeployqt? why is it looking for something with the builddir in 
it?
-- 
2.1.4

_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to