Sunday, May 22, 2016

How to build KStars Lite for Android

Intro

 If you want to test KStars Lite without building then download the pre-built .apk file here (API 14, armeabi-v7a). Please, give me the feedback about it if possible (did you manage to run it, was the performance good enough, etc.)

Required dependencies

  • Qt for Android - You can download it here. Later we will point CMake to the folder with Qt libraries compiled for Android.
  • Setup Android environment:
    • Follow the instructions provided here to setup the environment
      • Most probably you will find ant in you distros repositories.
      • I had problems with ant when using OpenJDK but no problems with the latest Oracle JDK (version 8)
  • KF5 for Android - You have to build it yourself using following instructions (you can also find instructions here):
     cd /opt/android  
     git clone git://anongit.kde.org/scratch/cordlandwehr/kdesrc-conf-android.git  
     mkdir -p extragear/kdesrc-build  
     git clone git://anongit.kde.org/kdesrc-build extragear/kdesrc-build  
     ln -s extragear/kdesrc-build/kdesrc-build kdesrc-build  
     ln -s kdesrc-conf-android/kdesrc-buildrc kdesrc-buildrc  
    
    Now open the kdesrc-buildrc file in any text editor and change the following lines:
    1. line 15: -DCMAKE_PREFIX_PATH= "path to Qt5 Android libraries. Example: /home/polaris/dev/Qt5.6.0/5.6/android_armv7"
    2. Line 42 "use-modules..." : If you want to save some time then comment it with # and add after it "use-modules kconfig ki18n kplotting". Thus only modules needed by KStars Lite will be built.

    Now set environment variables and run the script:
     export ANDROID_NDK="Your path to Android NDK folder"
     export ANDROID_SDK_ROOT="Your path to Android SDK folder"
     export Qt5_android="path to Qt5 Android libraries. Example: /home/polaris/dev/Qt5.6.0/5.6/android_armv7"
     export PATH=$ANDROID_SDK_ROOT/platform-tools/:$PATH
     export ANT="path to your ant installation (/usr/bin/ant on Ubuntu)"
     export JAVA_HOME="path to your JDK (choose from the folders at /usr/lib/jvm/ on Ubuntu)
     ./kdesrc-build libintl-lite extra-cmake-modules frameworks-android  
    

    Note: It is important to have libintl-lite as a first parameter. I spent some time on figuring out that it is not built if I don't specify it explicitly. It is a dependency of KI18n without which it won't be built!
    Note 2: All the environment variables set here will be used for compiling KStars Lite so please make sure that they are set before proceeding further.

Building instructions

  • Go to your KStars source folder and set the path to source directory:
     export kstars_DIR=`pwd`  
    
  • Create in a desired location 2 folders - build for final build and export for files that will be included in apk along with the code (textures, data, icons etc.). After that set env. variable for export
     cd export
     export kstars_PRODUCT_DIR=`pwd`
  • Now run CMake to configure make files:
    I use ccmake to see which parameters are missing
     ccmake "${kstars_DIR}" 
    /opt/android is a location where you downloaded and built KF5 for Android
     -DCMAKE_TOOLCHAIN_FILE=/opt/android/kde/install/share/ECM/toolchain/Android.cmake
     -DCMAKE_BUILD_TYPE=Release
     -DCMAKE_PREFIX_PATH="${Qt5_android}"
     -DCMAKE_INSTALL_PREFIX="${kstars_PRODUCT_DIR}" 
     -DQTANDROID_EXPORTED_TARGET=kstars
     -DANDROID_APK_DIR="${kstars_DIR}"/apk 
     -DBUILD_KSTARS_LITE=ON
     -DKF5Config_DIR=/opt/android/kde/install/lib/cmake/KF5Config/ 
     -DKF5Plotting_DIR=/opt/android/kde/install/lib/cmake/KF5Plotting/
     -DKF5I18n_DIR=/opt/android/kde/install/lib/cmake/KF5I18n
    Now this is important as you wont' be able to compile config file if you set this wrong. Use the path to KF5ConfigConfig.cmake on your system. This is needed to use host system kconfig_compiler rather than the Android version.
     -DKF5_HOST_TOOLING="Path to KF5Config cmake files e.g. /usr/lib/x86_64-linux-gnu/cmake/"
    Optional: Set Android API. By default is 14. Set if your want to compile for specific Android version (e.g. API level 9 for devices >= 2.3.1)
     -DANDROID_API_LEVEL=14
    Obviously cmake has to be executed in one line with all the parameters but without comments
  • Compile KStars Lite by executing:
     make
  • You think we are done? Not yet :) Now we have to create apk file and bundle all resources in it.

    Allow inclusion of all extra files in apk
     make install/strip
     make create-apk-kstars
  • Your apk is in "build/kstars_build_apk/bin/" with the name "QtApp-debug.apk"
  • If you want to install it to your device from your PC do the following:
    • Check that your device has USB debugging switched on and connect it via USB to your machine.
    • Make sure that adb is installed (or use one from android-sdk-linux/platform-tools/adb) and run:
       adb install -d kstars_build_apk/bin/QtApp-debug.apk
    Well, that's it! You now should have KStars Lite apk file. If you want to compile KStars Lite for desktops just pass -DBUILD_KSTARS_LITE=ON to cmake and enjoy it :)

    37 comments:

    1. Hi! Good to se that it's working for you!

      FWIW, I'd like to remind you that there's a kde-android@kde.org mailing list for whatever you might need:
      https://mail.kde.org/mailman/listinfo/kde-android

      Also note we also have a wiki, it would be good that you make sure that what is explained there matches your experience and if anything is missing feel free to extend it: https://community.kde.org/Android

      Keep up the good work and happy hacking!

      ReplyDelete
      Replies
      1. Thank you! I've already subscribed for this list.

        I also added a discussion to the wiki page about libintl-lite and KI18n (nothing serious just "would be nice to have" idea)

        Delete
    2. Excellent work Artem! Really excited to see KStars final on Android. Will try to build it soon myeslf!

      ReplyDelete
      Replies
      1. Thank you Jasem! Would be nice if you test it on your device.

        Delete
    3. Hi, you have done a brilliant job. Can you import the project in QtCreator?
      I have been trying to import an Android project using cmake but its not happening.
      Are you using QT creaator or some other ide for coding?
      Thanks

      ReplyDelete
      Replies
      1. Hi Ayush.

        Thank you for the kind words! Unfortunately there is no way now to compile CMake project for Android under QtCreator (at least I don't know any). You need cmake generator for Android like one that you use for compiling cmake project for your pc.
        You might find this links interesting:
        http://forum.qt.io/topic/35776/cmake-generator-for-ios-android-projects/12
        https://github.com/LaurentGomila/qt-android-cmake

        I use Qt Creator for working on project but have to compile Android build without it.

        Regards,
        Artem

        Delete
      2. Hi Artem,
        I didn't find that links very useful as it increases my work. Yeah even I thought so as I couldn't find any cmake generators for Android.

        Just to be clear when you say you use Qt Creator to work on project, you don't put any cmake arguments while importing the project in Qtcreator.
        Also any external library will be included since you have already linked them in CmakeLists right?

        Thanks,
        Ayush Shah

        Delete
      3. Hi Ayush,

        Sorry for late reply.

        I configure cmake project using Unix Generator with all arguments I need.

        If you link to your lib in CmakeLists and the corresponding to this library .cmake file is found then it will be linked. I don't think that in this case there is any difference between running cmake in terminal or in Qt Creator.

        Hope this helps.

        Regards, Artem

        Delete
    4. This comment has been removed by the author.

      ReplyDelete
    5. Hi Artem!

      "KStars Lite (22.05.16) API 14, armeabi-v7a" doesn't want to install.

      ReplyDelete
      Replies
      1. Hi OMI.

        Thank you for interesting in KStars Lite! What device do you have? What is exactly the problem?

        Regards, Artem

        Delete
    6. В начале установки, программа НЕ проходит верификацию: ошибка во время анализа пакета.
      Планшет Acer B1-730HD, версия Android 4.4.2

      ReplyDelete
      Replies
      1. Прошу прощения за то, что долго не отвечал. Как я понял, ваш планшет работает на x86 процессоре. Я пересоберу проект под x86 сегодня и загружу apk файл.

        Delete
      2. Не проблема :)
        Спасибо!
        Получается, что нужно учитывать тип процессора планшетов для будущих сборок KStars Lite.

        Delete
      3. Да, минус использования C++ на Android заключается в том, что для каждой архитектуры своя сборка. Я добавил небольшой виджет с ссылками на apk файлы для различных архитектур в верхнюю часть сайта. Вот для х86 https://drive.google.com/open?id=0B4b1uXgK0wdQZFZMM29GYzJnMVk

        Пожалуйста, напишите о результатах установки :) на устройствах с ARM процессором KStars Lite работает сейчас медленно т.к. очень много ресурсов съедает конвертация координат объектов. Эту проблему я начну решать чуть позже, но возможно на вашем девайсе все будет работать быстрее из-за х86-го процессора.

        Delete
    7. Установил и запустил.
      Вижу координатную сетку, границы созвездий, названия созвездий, планеты.
      Нет отображения звёзд и дипскаев :(

      Не работают кнопки на верхней панели меню.
      Не работает меню в боковых панелях.

      ReplyDelete
      Replies
      1. Так и должно быть) меню и кнопки сверху сейчас просто для демонстрации, а над звездами и дипскаями я начинаю работать.
        Не сильно ли тормозит все, когда начинаете вращать звездную карту?

        Delete
    8. Какова текущая точность координат небесных объектов?

      Хочу сказать, что скорость реагирования главного окошка програмы весьма высокая, т.е. не жалуюсь на подтормаживание.

      ReplyDelete
    9. Было бы очень хорошо, если бы KStars Lite поддерживала связь с INDI сервером...

      ReplyDelete
      Replies
      1. INDI будет, мы планируем скоро начать работать над этим.

        Точность точно такая же, как и в KStars десктопном. Какие-то проблемы? Таймер пока не был портирован и т.к. установщика настроек пока еще нет используются мои координаты (широта 49.233333333333334, долгота 7)

        Delete
    10. Проблема в том, что чем выше точность отображения /пересчёта координат, тем больше требуется вычислительных ресурсов.
      Поэтому я предлагаю внести в настройки пункт изменения точности координат.

      ReplyDelete
    11. Касательно координат места наблюдения, то их также можно снимать с GPS модуля планшета/смартфона.

      ReplyDelete
      Replies
      1. Определение координат по GPS модулю это одна из фишек, которую будет поддерживать KStars Lite :)

        За идею с точностью спасибо, но пока не знаю, как это можно реализовать. Большая часть нагрузки приходится на функции sin() cos() и я не знаю, будут ли корректными вообще координаты если чем-то пожертвовать.

        Пока я хочу сделать так, чтобы пересчитывались только координаты тех небесных тел, которые находятся в поле зрения небесной карты т.к. на данный момент координаты некоторых тел пересчитываются только для того, чтобы определить, что они не будут отображаться.

        Delete
    12. Пусть программа всегда считает экваториальные координаты центра карты, а во время движения карты пусть вообще отключает все объекты.

      ReplyDelete
      Replies
      1. Какие объекты отключать во время движения можно будет настроить в программе. На данный момент по-дефолту во время движения отключены границы созвездий.

        Считать координаты центра а потом смотреть, что входит в поле зрения? Это имеете в виду?

        Delete
    13. Replies
      1. На самом деле подобные вещи уже делаются в KStars, просто в некоторых местах нужно немного доработать, чтобы все заработало еще быстрее.

        Большое спасибо за ваши советы и тестирование программы!

        Delete
    14. Жду следующую сборку для теста.
      P.S. Живу в западном полушарии :)

      ReplyDelete
      Replies
      1. В следующей сборке уже будут звезды и дипскаи.
        А я сам из Казахстана но данный момент учусь в Германии :)

        Delete
    15. На максимальном поле зрения достаточно отображения 50-80 небесных объектов.

      ReplyDelete
      Replies
      1. Ок, приму к сведению. Скорее всего, сделаю настройку очень гибкой, чтобы каждый мог подобрать оптимальное соотношение производительность/качество.

        Delete
    16. Да, потому как мощность планшетов весьма разная.

      ReplyDelete
    17. This comment has been removed by the author.

      ReplyDelete
      Replies
      1. Здравствуйте. Смогли ли вы запустить KStars Lite?

        Delete
      2. Да, я запустил Latest update 22.06.2016 API 14, x86 на своём планшете Acer B1-730HD (версия Android 4.4.2).

        Delete
      3. Ок, все работает стабильно?

        Delete