discuss-gnustep
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]