Architecture
Our aim is to take advantage of multiplatform features as much as possible, specially Compose Multiplatform. Platform specific modules will be limited to the minimum required to setup and launch the apps with a compose wrapper, besides platform-specific code that we can’t avoid, such as the loading our pre-compiled engine.
Principals
Main module structure
-
engine
the Oonimkall engine abstraction in kotlin -
probe
our Probe app codebackground
shared code ran on background tasksconfig
configurations for each platform (Android, iOS), organization (OONI, DW) and flavor (full, F-droid)di
dependency injectionshared
classes and methods shared across the whole appdata
data layer code (database, preferences, network…)ui
UI layer code, organized into features/screens