Die Sache mit Assets ist, dass Sie nicht direkt als Dateien auf sie zugreifen können. Dies liegt daran, dass die Assets direkt vom APK gelesen werden. Sie werden bei der Installation nicht in einen bestimmten Ordner entpackt.
Ab Android 2.3 gibt es eine C-API für den Zugriff auf Assets. Sehen Sie sich <android/asset_manager.h>
und das assetManager
-Feld in <android/native_activity.h>
an. Ich habe dies jedoch noch nie verwendet und bin mir nicht sicher, ob Sie diese Asset-Manager-API verwenden können, wenn Sie sich nicht auf eine native Aktivität verlassen. Und das funktioniert unter Android 2.2 und niedriger sowieso nicht.
So sehe ich drei Optionen:
InputStream
-Objekt zu lesen, das von AssetManager.open()
zurückgegeben wird. Es braucht ein wenig Code, aber es funktioniert großartig. Wenn Sie die AssetManager C-API nicht verwenden können, weil Sie eine C / C ++ - Bibliothek aufrufen müssen, die einen Dateinamen erfordert, kann stattdessen eine unformatierte Ressource verwendet werden.
Der einzige Nachteil ist, dass er zur Laufzeit in das Datenverzeichnis (app) Ihrer App kopiert werden muss.
Platzieren Sie die Datei, die Sie lesen möchten, aus dem systemeigenen Code in res/raw
dir.
Kopieren Sie zur Laufzeit die Datei von res/raw/myfile.xml
in das data
Verzeichnis:
Nun ist der Dateiname, der an Ihren nativen Code übergeben werden soll, myFile.getAbsolutePath()