This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/YAPDroid/YAPDroid.md

2.6 KiB

YAPDroid

This file documents the YAPDroid application. This app was developed in order to test the YAP-Android interface. It provides a simple REPL with a query window and a text viewer.

Design

The YAP interface to Android is based on the SWIG interface generator. SWIG exports the YAP C++ classes as Java classes. In practice there exist two worlds, the native application and the Java application:

  • YAP runs in Android as a native application in a Linux environment. Android does not support glibc. Instead, Android libraries are provided by the Android NDK, and are somewhat limited, i.e., the NDK misses in-memory streams and a glob predicate. Moreover, read-only data is kept in a zipped archive that is made to appear as a directory, ~/assets

  • SWIG generates the glue code: JNI classes that act as Java classes. Callbacks are possible.

  • Java code operates as usual.

Compiling YAPDroid

The current version was compiled using the recent Android Studio cmake support. Android Studio uses gradle as the build system. gradle orchestrates compilation of all Java code. External code is delegated to cmake or the Android NDK own builder. The idea fits nicely with YAP; unfortunately, the process currently crashes in middle.

To install, navigate through these steps:

  1. Obtain gmp for Android. YAP has used the Rupan repo; place the repo next to the yap-6.3 top directory.

  2. Install swig

  3. Obtain Android Studio. This work used Android Studio 2.2 Beta 3. The IDE includes most everything else you need: the ADK, the NDK, cmake, the ninja build system, and the debugger.

  4. Set YAPDroid as your directory.

  5. Adapt the build.gradle files to your configuration.

  • It may be a good idea to first generate an empty configuration and compare.
  • In the lib directory, please verify wich targets you are generating for.
  1. Build the system, either from the GUI or from a terminal, say as:
./gradlew assembleDebug

or

./gradlew :lib:assembleDebug

You should see cmake being executed, and after some time gradle crash.

  1. To actually install the binaries, use:
cd lib/build/intermediates/cmake/debug/json/armeabi-v7a
ninja install
  1. Comment the four lines in lib/build.gradle to avoid crashing in the cmake task.

  2. use the GUI commands to compile the app or set your directory bak to the YAPDroid top-directory and call gradle.

Enjoy!

Limitations and TODO

  • improve error handling.
  • support /assets: the code is written but not tested yet.
  • network access
  • sqlite testing and support