Sqlite3 unter Android mit C4droid?



  • Hallo Leute,

    kennt jemand eine Lösung, Ansatz um unter Android mit der IDE "C4droid" die sqlite3-Bibliothek zu nutzen?



  • Die Header-Files habe ich im Source-Verzeichnis eingefügt.
    Ich habe auch eine Arm64-kompatible libsqlite.so -Datei. (Diese gibt es bereits auf dem Android-Gerät unter: /system/lib64/)
    Aber wohin muss ich diese Lib kopieren damit diese über C4Droid nutzbar ist?
    Welche -I , oder ähnliche Anweisungen muss ich ergänzen?
    Geht das Ganze nur mit einem gerooteten Android-Gerät?
    Brauche ich echte Root-Rechte?

    ???



  • Ich habs hinbekommen und bin Happy!

    Dafür habe ich die aktuellen 2 Header-Dateien:
    sqlite3.h und sqlite3ext.h in das Quellverzeichnis meiner test_sql.cpp - Datei kopiert.

    Danach habe ich die libsqllite.so (mit Hilfe einer Root-Browser-App) aus dem Verzeichnis:
    system/lib64/ kopiert und in das Quellverzeichnis kopiert.

    Daraufhin bin ich in Preferences - Menü navigiert.
    Dort habe ich folgende Änderungen vollführt:
    G++ arguments:
    Vor: (c4droid:MODEARGS) -o
    habe ich nun folgende Anweisungen ergänzt:
    -L(c4droid:CURSRCDIR) -lsqlite

    Das wars!

    Und es kompiliert!!!!

    Juhu!



  • Irgendwas mache ich aber falsch.
    Wenn ich es wie beschrieben handhabe hängt sich das "SDL plugin for C4droid" ständig auf und ich kann keine FLTK-Anwendungen ausführen.

    Reine Konsolenanwendung wie diese:

    #include <iostream> 
    #include <sqlite3.h> 
      
    int main(int argc, char** argv) 
    { 
        sqlite3* DB; 
        int exit = 0; 
        exit = sqlite3_open("example.db", &DB); 
      
        if (exit) { 
            std::cerr << "Error open DB " << sqlite3_errmsg(DB) << std::endl; 
            return (-1); 
        } 
        else
            std::cout << "Opened Database Successfully!" << std::endl; 
        sqlite3_close(DB); 
        return (0); 
    } 
    

    lassen sich aber problemlos ausführen.

    Was mache ich falsch? Wie kann ich das Problem beheben?
    Es muss doch möglich sein FLTK/SDL - Anwendungen unter Android in Verbindung mit der sqlite-Lib zu erstellen (geht) und auszuführen (geht nicht).



  • ...
    Eigentlich muss ich nur noch herausfinden wo das Standard-Lib-Verzeichnis von "C4droid" ist.
    Also das Verzeichnis auf dem auch eine auszuführende App mit "SDL-Plugin" Zugriff hat.
    Es stürzt auch nur ab, weil es beim Ausführen die Lib nicht findet.

    Wenn ich bei "Export APK" in der letzen Eingabebox ("App custom APK overlay folder...") den korrekten Pfad zur Lib eingebe (Bsp: storage/emulated/0/C4droid_examples/extLibs) funktioniert die FLTK-App dann auch bei der Ausführung.



  • Ist denn SQLite auf allen Android Systemen als shared object verfügbar?



  • @hustbaer
    Ich denke ja.

    Viele Java-Apps greifen darauf zu.
    Unter Python und ist es eine Standard-Lib.
    Viele Linux-Distros (wahrscheinlich auch Android) haben diese Lib per Standard installiert.



  • @ccode_new

    Es stürzt auch nur ab, weil es beim Ausführen die Lib nicht findet.

    Ah, Moment: welche Lib? Vermutlich eine FLTK oder SDL Lib, right? Dann werden die wohl das Problem sein. Würde mich wundern wenn SDL und/oder FLTK mit Android mitkommen.
    (Und ja, SQLite kommt tatsächlich mit.)



  • @hustbaer
    Nein!
    Es geht nicht um eine SDL-Lib, oder die FLTK- Libs.
    Es geht um die korrekten Such/Systempfade und der korrekten Parameter/Anweisungen des C4droid-Kompiler/Linker-Systems (mit dem g++) unter Android in Verbindung mit einer Systemlib (hier: libsqlite(3)).



  • @ccode_new
    Ich weiss nicht wie der korrekte Weg ist das zu machen.
    Falls das SQLite .so auf allen Android Systemen unter /system/lib64 liegt, dann könnte ein RPATH auf /system/lib64/ helfen.

    Also entweder -rpath=/system/lib64 (wenn du es direkt beim Linker angibst) oder -Wl,-rpath=/system/lib64 (wenn du es beim Compiler angibst).



  • @ccode_new
    https://developer.android.com/about/versions/nougat/android-7.0-changes.html#ndk
    Da steht "If your app uses private platform libraries, you should update it to include its own copy of those libraries or use the public NDK APIs.".
    Und als public NDK API ist sqlite3 nicht gelistet: https://developer.android.com/ndk/guides/stable_apis

    Also wirst du deine eigene Kopie mit ins APK packen müssen wenn ich das richtig verstanden habe.



  • @hustbaer
    Danke für die Antworten.
    Es funktioniert.
    Man muss sich eben erst mehr mit dem Entwicklerwerkzeug (hier: c4droid) vertraut machen.
    In den Einstellung gibt es verschiedene Übersetzereinstellung (für Default, gcc, g++, SDL, FLTK, ...).
    Wenn man nun eine FLTK-App erstellen möchte erkennt dies das Kompilersystem schon an den eingebundenen Include-Dateien (Bsp.: FL/Fl.H, ...). Damit werden die Übersetzereinstellungen bei Default komplett ignoriert und es greifen die Einstellungen bei FLTK.
    Diese FLTK-Modus-Einstellungen müssen wie folgt geändert werden:

    -lfltk_images -lfltk_forms -lfltk -shared
    

    Das hier muss gelöscht werden:

    ,--no-undefined
    

    Dies ist die Fehlerquelle warum es nicht geht.


Anmelden zum Antworten