[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Android app using GNUstep
From: |
Frederik Seiffert |
Subject: |
Android app using GNUstep |
Date: |
Mon, 12 Oct 2020 14:35:04 +0200 |
Hi all,
I’m happy to share that we launched our app "djay" on Android using GNUstep:
https://play.google.com/store/apps/details?id=com.algoriddim.djay_free
It’s using the Android toolchain scripts to cross-compile GNUstep and its
dependencies for Android:
https://github.com/gnustep/tools-android
The basic setup is Clang with libobjc2 using the 2.0 runtime, GNUstep-Base and
libdispatch. Those components allow us to compile and run essentially all of
our existing non-UI / non-platform specific code for Android without changes,
which is multiple 100k LOC using ARC, on 4 ABIs (armeabi-v7a, arm64-v8a, x86,
x86_64). I’m still amazed how well it all works.
For the UI we went with Qt/QML, which turned out to be a great fit. Like ObjC,
Qt/QML is very dynamic at runtime, which enabled us to write some glue code
that lets us do two-way bindings between QML UI components and our ObjC model
using KVO/KVC. As the app is driven by Qt’s run loop, we’re driving NSRunLoop
and libdispatch from Qt, which is currently done by swizzling NSRunLoop on
launch.
We also wrote a Java-ObjC bridge that allows us to register ObjC blocks as
native callbacks from Java (using libffi via Mike Ash’s MABlockClosure). It
e.g. allows us to hook into the Android notification system and call ObjC
methods when the user triggers playback controls on the home screen.
It’s been a challenging but very rewarding project, and it’s also been great to
see how it improved our shared code base by forcing us to more strictly
separate platform-specific code. I’m also happy that we could make some
contributions to the GNUstep code base ourselves (67 PRs and counting ;)).
But most importantly we really could not have done it without the incredible
work and support from the GNUstep community, including Greg, David, Fred,
Richard, Niels, Ivan, and others. Thank you all for your help!
Frederik
- Android app using GNUstep,
Frederik Seiffert <=