Application, JNI und Dateien

Wanderer

Wanderer

Neues Mitglied
0
Hallo!

Ich habe folgendes Problem:

Ich habe eine Applikation geschrieben, die einige große (>10MB) Dateien benötigt, die bereits existieren.
Ich möchte die Dateien in einer Funktion öffnen, die ich als JNI eingebunden habe. Aber das klappt nicht.

Wie "packe" ich die zu der Applikation am besten dazu, wo kopiere ich sie hin?
Ich habe es als Resource versucht, unter "res/raw/meineDatei.dat". Dann versuche ich darauf zuzugreifen:

Code:
fopen("meineDatei.dat",...);
fopen("raw/meineDatei.dat",...);
fopen("/data/data/mypackage.name/files/meineDatei.dat",...);

Das oben klappt alles nicht. Was könnte ich falsch machen?
Den absoluten Pfad habe ich mir so besorgt:

Code:
this.getFileStreamPath("meineDatei.dat").getAbsolutePath();

Der Code als JNI kann nicht nach Java portiert werden, da zu umfangreich und zu speed-kritisch.

Danke für Hinweise!
 
ein kleiner tipp wäre, du lädst die datei beim ersten start von einem server runter auf die sd karte

* kleinere app selbst
* datei liegt dann auf der sd karte - die sind ja immer groß genug
 
Es geht mir weniger um die Dateigröße. Evtl. wird das natürlich später noch zum Problem, aber erstmal will ich es so hinbekommen. Es sind auch teilweise deutlich kleinere Dateien.
 
Bevor du versuchst krampfhaft Dateien mittels Funktionen über das JNI zu öffnen/bearbeiten, solltest du zumindest mal testweise probieren, wie schnell die Zugriffe unter Android direkt mit Java sind. U.u. nämlich schneller, da der Java-Bytecode für Android zusätzlich übersetzt wird, sodass es nativ kompilierten Programmen entspricht.

Gruß
Chris
 
Hi,

deine Dateien liegen nicht direkt im Filesystem (schau einfach mal mit dem DDMS File Explorer nach), sondern in der APK. Du kannst die APK aber leicht entpacken und dann auf die Dateien zugreifen.

Gruß
Stefan
 
@garak
Der Code als JNI kann nicht nach Java portiert werden. Er ist zu umfangreich.

@skrhgw
Hm, und wie könnte so ein Entpacken aussehen?

Dadurch würde ich aber die Daten vermutlich doppelt gespeichert halten.
Ich denke auf die SD Karte auszuweichen ist notwendig.
Allerdings sind Teile dieser Dateien als FileMapping eingebunden, da sie zu groß sind um ins RAM geladen zu werden.
Wäre der interne Speicher da deutlich schneller?
 
Wanderer schrieb:
@skrhgw
Hm, und wie könnte so ein Entpacken aussehen?

Naja zum entpacken würdest du sicher ne library wie MiniZip oder Zipios benötigen, die Position der APK ist ja bekannt im Filesystem.

Aber wenn du dich mit der SD Karte anfreunden kannst, ist das sicherlich die beste Variante so kannst du dein Programm klein halten und beim ersten starten benötigte Dateien aus dem Netzwerk laden. Sollte auch im Sinne der Nutzer sein (sofern es nicht nur für eigengebrauch ist) denn interner Speicher is ja bei den meisten Geräten knapp.

Ob der interne Speicher wesentlich schneller ist kann ich dir garnicht so sagen, wäre auch mal interessant zu wissen. Aber kann man auch nicht allgemein beantworten, es hängt auch von der verwendeten SD Karte ab.
 
Ich habe die Daten nun auf /sdcard/... gespeichert. Das funktioniert ganz gut.
nur scheint die interne SD Karte des Milestones recht langsam zu sein.

Danke für die Hilfe!
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
129
swa00
swa00
B
Antworten
4
Aufrufe
492
bb321
B
A
Antworten
10
Aufrufe
1.926
swa00
swa00
Zurück
Oben Unten