1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Application, JNI und Dateien

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Wanderer, 29.01.2010.

  1. Wanderer, 29.01.2010 #1
    Wanderer

    Wanderer Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    29.01.2010
    Phone:
    Motorola Milestone
    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!
     
  2. swordi, 29.01.2010 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    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
     
  3. Wanderer, 29.01.2010 #3
    Wanderer

    Wanderer Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    29.01.2010
    Phone:
    Motorola Milestone
    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.
     
  4. garak, 29.01.2010 #4
    garak

    garak Ehrenmitglied

    Beiträge:
    8,270
    Erhaltene Danke:
    4,795
    Registriert seit:
    12.12.2009
    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
     
  5. Melbar, 30.01.2010 #5
    Melbar

    Melbar Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    23
    Registriert seit:
    16.05.2009
    Phone:
    Samsung Galaxy S3
    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
     
  6. Wanderer, 01.02.2010 #6
    Wanderer

    Wanderer Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    29.01.2010
    Phone:
    Motorola Milestone
    @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?
     
  7. Melbar, 01.02.2010 #7
    Melbar

    Melbar Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    23
    Registriert seit:
    16.05.2009
    Phone:
    Samsung Galaxy S3
    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.
     
  8. Wanderer, 11.02.2010 #8
    Wanderer

    Wanderer Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    29.01.2010
    Phone:
    Motorola Milestone
    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!
     

Diese Seite empfehlen