Hallo,
meine Antwort wird etwas länger, aber hoffentlich beantwortet sie die wesentlichen Fragen. 
Etwas experimentell, aber kein “safe mode”.
Wenn es nicht läuft, dann wird auf die Java-Implementierung umgeschaltet, das wäre dann die Rückfalleben oder der “safe mode”.
Das ist dann die Plus-Version.
Das war zumindest mal die Free-Version, also mit Download-Beschränkung.
master-nb und default-nb verwenden exakt den selben Code.
default war mal für ist die Free-Version gedacht (Plus- und Free-Version sind identisch, die Umschaltung erfolgt dann, bis auf die Icons und den App-Namen, zur Laufzeit anhand des App-Namens).
Für Experimente ist der “design”-build.
Die nightly-Builds sind übrigens alle Debug-Builds (soweit ich mich erinnere) und dementsprechend langsamer, als die Release-Builds.
Verwendet den neuen Qt-Kern (mit OpenGL und Qt).
default-nb ist die Free-Version mit Download-Beschränkung, gebaut mit assembleFreedevLegacyFatDebug, Name “OsmAnd Nightly”
master-nb ist die Plus-Version ohne Download-Beschränkung, gebaut mit assembleFullLegacyFatDebug, Name “OsmAnd~”
qt-nb = neuer Qt-Kern
“nb” bedeutet"nightly build", nicht native build, wie von abrensch vermutet.
Interessante Beobachtung.
Inzwischen ist die Version bei F-Droid auf 73 MB geschrumpft.
Habe die Free-Version von OsmAnd mit der Plus-Version von F-Droid (beide 3.0.4) verglichen, sind nur ca. 100kB Unterschied:
https://f-droid.org/repo/net.osmand.plus_304.apk
https://download.osmand.net/releases/net.osmand-3.0.4-304.apk
Evtl. leicht andere Parameter oder Versionen der Build-Umgebungen.
Java und C++ Versionen sind 1:1 “Übersetzungen”, also zu 99% gleich implementiert.
Google empfiehlt die Nutzung des NDK, wenn Java für die Aufgabe nicht performant genug ist.
Unklar, was du damit genau meinst.
Ein Unterschied ist, dass es mit JNI möglich ist nahezu unbegrenzt Speicher zu reservieren.
Bei der Android-JVM hingegen ist der Java-Heap je nach Gerät sehr beschränkt.
Als OsmAnd mit der nativen Bibliothek angefangen hat, waren das oft nur 16 oder 32 MB.
Inzwischen ist das deutlich mehr, auch dank “largeHeap”.
Eindeutig ein Gerätefehler, meistens irgendwelche schrottigen Treiber, die sonst was mit dem System anstellen…
Apps, welche zu viel Speicher beanspruchen (egal ob Java oder nativ), werden schlicht und einfach vom Betriebssystem beendet.
Es existieren mehrere Anleitungen, die nicht alle aktuell sind, das ist nicht gerade optimal.
Dem Server kann man dafür live zuschauen, wie er OsmAnd baut. 
https://builder.osmand.net:8080/view/OsmAnd%20Builds/
Nachdem das mit OSMfocus so gut funktioniert hat, hier eine kurze Anleitung, ist wirklich nicht schwer OsmAnd komplett, auch mit NDK zu bauen, mit Windows geht das aber nicht:
1.) Benötigte Daten herunterladen:
git clone https://github.com/osmandapp/Osmand.git android
git clone https://github.com/osmandapp/OsmAnd-resources.git resources
git clone https://github.com/osmandapp/osmandapp.github.io.git help
git clone https://github.com/osmandapp/OsmAnd-core.git core-legacy
OsmAnd empfiehlt dafür “repo” (gibt es irgendwo bei Google zum Herunterladen) zu verwenden (und verwendet das auch auf dem Server):
https://github.com/osmandapp/OsmAnd-manifest/blob/master/android_build.xml
Ich halte aber ein extra Programm wegen 5 Zeilen für etwas übertrieben.
2.) Auf den aktuell verwendeten nativen Kern umstellen (also nicht den neuen Qt-Kern verwenden):
cd core-legacy && git checkout legacy_core
3.) Die Pfade zu NDK (zzt. wird das aktuelle r17b verwendet) und SDK setzen:
export ANDROID_HOME=/path/to/Android/Sdk/ ANDROID_NDK=/path/to/Android/Sdk/ndk-bundle/
4.) In android/OsmAnd/build.gradle noch die “signingConfigs” anpassen, damit die Pakete mit den eigenen Signaturen signiert werden können.
5.) Dann OsmAnd bauen:
export LANG=en_US.utf8
cd ~/osmand/osmandapp/android/OsmAnd
../gradlew --info --no-daemon clean cleanNoTranslate assembleFullLegacyFatRelease
Anstatt Fat (enthält alle Versionen der nativen Bibliothek, wie Armv7, x86,…) kann z.B. auch nur Armv7 verwendet werden, für die Emulator-Beschleunigung ist aber auch X86 sehr zu empfehlen.
Anstatt Release ist entsprechend auch Debug möglich.
Anstatt Full auch Free oder Dev, Fulldev, Free, Freedev oder …
“export LANG=en_US.utf8” wird benötigt, damit der OpeningHoursParserTest nicht fehlschlägt.
Stimmt, wird zurzeit aber nur für die iOS-Version von OsmAnd verwendet.
Die Qt-Version verwendet OpenGL, schreibt das Ergebnis dann aber nur in eine Bitmap, welche dann angezeigt wird…
Da fehlt also noch etwas, damit das richtig schnell wird.
Außerdem werden Kacheln erzeugt, die dann nach und nach, sobald diese fertig sind, eingeblendet werden, das wirkt etwas gewöhnungsbedürftig.
Beim bisherigen Kern wird das Bild “live” aufgebaut, da kann man dann zusehen, wie die Schichten nach und nach gezeichnet werden, insofern das Gerät nicht zu schnell ist.
Die Qt-Version wird für Android noch nicht verwendet, hat einfach keine entscheidenden Vorteile, dafür aber Probleme mit fehlerhaften Grafiktreibern.
Z.B. bei einem meiner Android-Geräte hat der Grafiktreiber, wenn von einer App per OpenGL eine neue Textur erstellt wurde, immer mehrere MB Luft zwischen den Texturen gelassen, so dass der virtuelle Adressraum der App relativ schnell voll war und diese dann abstürzte (Fehler wurde inzwischen vom Gerätehersteller per Update behoben)…
Ich glaube die funktioniert sogar.
Ich hatte mal vergessen die native Bibliothek zu bauen, da lief dann nur die Java-Implementierung und es kam eine Meldung, die native Bibliothek würde nicht unterstützt.
Das Rendering war etwas langsamer und sah in einigen Details leicht anders aus, hat aber funktioniert.
Viele Grüße,
whb