michael_and
Fortgeschrittenes Mitglied
- 62
Alles über die verschiedenen Methoden, um internen Speicherplatz frei zu machen
== Überbegriff: "App to SD" ==
Dieser Artikel soll etwas Klarheit bringen in die Welt von "App to SD".
Nach Lesen in diversen Foren war ich zunächst irritiert, und habe mir dann nach und nach ein Bild vom Thema gemacht, das ich hiermit zusammenfassen und teilen möchte.
Fragen, die ich hier beantworten möchte:
Sollte ich irgendwo Fehler haben oder sollte es was zu ergänzen geben, sind Hinweise natürlich sehr willkommen. Ich werde dann versuchen, die Korrekturen in diesen Beitrag einzuarbeiten.
Also, eins nach dem anderen...
Wozu das Ganze / Wer braucht das?
Android Smartphones installieren Apps standardmäßig im internen Speicher (für's Datenblatt: Achte auch "interner Speicher (ROM), NICHT auf RAM). Der ist oft begrenzt, oft sind nur rund 100-200 MB frei, wenn man das App neu kauft. Wenn man viele Aps installiert (mit der Zeit können locker über 100 Apps zusammen kommen, oft auch über 200), ist der Speicher bald voll. Zwar brauchen Apps oft nur um die 200 kB Speicher, viele brauchen aber auch 1 MB, 3 MB, 6 MB oder manchmal auch 10 oder 20 oder mehr MBytes. Ist der Speicher voll, kann man keine weiteren Apps mehr installieren, oder muss erst wieder welche deinstallieren. Das ist schlecht! Android warnt meist, wenn nur noch ca. 20 MB frei sind, und dann gibt's auch schon oft Probleme, z.B. dass keine SMS mehr gespeichert werden kann.
Also haben sich die Androiden gedacht: Wie wäre es eigentlich, Apps auf der Speciherkarte zu installieren, die ist doch große genug! Genau!
Jetzt mehr Details:
Wenn ich eine App installiere und benutze, dann wird der folgende Speicher belegt, bei dem es sich um eine Partition im internen Telefonspeicher handelt:
(1) /data/app/<Dateiname>.apk
(2) /data/dalvik-cache/<Dateiname_der_App>.dex
(3) /data/data/<Verzeichnisname_der_App>/lib/<Dateiname>.so
(4) /data/data/<Verzeichnisname_der_App>/<sonstige Dateien und Verzeichnisse>
(Seitenbemerkung.: System Apps (im Gegensatz zu installierten Apps) befinden sich auf einer eigenen internen Partition unter /system/app/)
Was ist das alles genau? Nun:
Die Details
Es gibt unterschiedliche Methoden, WAS von (1), (2), (3) und (4) auf die SD-Karte verschoben wird, und WIE das passiert.
Generell gibt es drei Gruppen von Methoden:
Methode A (kurz: "natives App2SD von Google"):
(z.B. App 2 SD, Move 2 SD)
Man kann pro selbst installierter App entscheiden, ob man diese auf die SD-Karte verschieben möchte. Das geht auch nachträglich, und es geht "hin" und "zurück" nach Belieben. Was dann passiert ist, dass die *.apk Datei nach "/sdcard/.android-secure/" (="/mnt/secure/asec/") verschoben wird [evtl. irgendwie verschlüsselt?] (Bem.: Außerdem entsteht der mount point "/mnt/asec/<dateiname>/", wo sich die ausgelagerte apk Datei im Klartext befindet). Mit einem Datei-Browser wie z.B. Adao File Manager aus dem Market kann man das überprüfen (oder mit rootexplorer). Das Betriebssystem (ab 2.2) unterstützt dieses Feature nativ, darum ist diese Methode für Android 2.1 und früher nicht möglich.
Einschränkungen:
- Geht nur für einige Apps, die so programmiert sind, dass sie "App2SD" im Sinne dieser "Methode A" (Android 2.2+ native) unterstützen. Z.B. fallen wohl Widgets generell nicht darunter, aber auch viele andere Apps unerstützen dies nicht, wenn der Programmierer es nicht vorgesehen hat.
- Geht grundsätzlich nicht für System-Apps (also vorinstallierte und nicht de-installierbare Apps).
Diese Methode ist also Bestandteil des Betriebssystems, und es gibt verschiedene grafische Front-Ends, die einem die Arbeit für's Hin- und Herschieben erleichtern, z.B. die App "Move2SD" aus dem Android Market.
Methode B (kurz: Symbolic Links auf Verzeichniss(e) auf der SD-Karte):
(A2SD, A2SD+, DT A2SD, DT Apps2SD, ...):
...und oft auch mit "App2SD" bezeichnet (auch von App-Autoren), um die Verwechslung und Konfusion mit Methode A komplett zu machen.
Man muss das Feature in der Regel über Recovery (= Bootmenü, wie das BIOS, suche z.B. nach "Clockwork Recovery", "ClockworkMod Recovery", "CWM Recovery") einspielen. Bei den meisten Custom ROMS ist es schon drauf. Was dann passiert ist, dass nach Booten des Systems das Betriebssystem die zweite Partition der SD-Karte erkennt und ins Dateisystem einhängt (mountet), und zwar unter "/system/sd/".
Damit ist aber noch nichts passiert, die App-Dateien sind immer noch im internen Speicher. Aber jetzt kommt der schlaue Trick, Linux macht's möglich:
Wenn man nun über eine geeignete grafische Oberfläche das Verschieben der Apps von Intern nach SD-Karte veranlasst, dann passiert im Hinitergrund im System Folgendes:
Es werden die Daten von /data/app/ nach /system/sd/ verschoben, also physikalisch auf die SD-Karte verlagert. Dann wird ein symbolischer link erzeugt, der von /data/app/ nach /system/sd/app/ zeigt. Das ist alles. Auf diese Weise kann das Betriebssystem wie gewohnt auf "/data/app/<Dateiname>.apk" zugreifen und merkt gar nicht, dass diese Datei auf der SD-Karte liegt, bzw. es ist ihm "egal". Alle Betriebssystem-Operationen können also wie üblich ablaufen, die Änderung ist für das Betriebssystem völlig transparent, und darum geht es auch für Android 1.6 oder 2.1.
Auf die gleiche Weise kann man auch den dalvik-cache auf die SD-Karte "umleiten" (A2SD+, "Darktremor A2SD" (DT A2SD), "Darktremor App2SD", ...). Ein Beispiel eines grafischen User-Interfaces ist die App "A2SDGUI for Darktremor A2SD" (Google Market), womit man (1) (apk) oder (2) (dalvik-cache) von intern nach SD aktivieren und deaktivieren kann.
[Das Umbiegen von System-Apps geht GLAUBE ich nicht, oder nur mit speziellen Lösungen dann vielleicht doch, ist jetzt aber hier nicht der Schwerpunkt, weil für die allermeisten Fälle wirklich nicht relevant.]
[Bem. zu A2SDGUI: Diese App (in Verbindung mit "Darktremor Apps2SD") kann noch viel mehr als nur A2SD, nämlich System-Interna auf vielerlei Weise optimieren - aber das ist jetzt hier nicht das Thema]
Einschränkungen:
Diese Methode erlaubt es nicht, einzelne Apps auf die Sd-Karte zu verlagern, es geht nur für alle Apps oder für keine. Man kann nur wählen zwischen "nur *.apk files", "nur Dalvik-Cache", oder beides, oder nichts, aber diese Wahl betrifft dann halt alle (Nicht-System-)Apps.
Methode C (kurz: Symbolic Links auf Dateien auf der SD-Karte):
(Link2SD - kostenlose App aus dem Google Market)
Das Prinzip ist das gleiche wie bei Methode B insofern, dass hier auch mit symbolic Links auf Orte auf der SD-Karte (2. Partition) gearbeitet wird. Der Unterschied ist der, dass nicht wie in Methode B ein Symbolic Link für ein ganzes Verzeichnis angelegt wird (für alle *.apk oder alle dalvik-cache-Dateien), sondern dass pro App und pro Kategorie (1)/(2)/(3) entschieden werden kann, ob eine "Umleitung" zur SD-Karte per symbolic link stattfinden soll. Die grafische Benutzeroberfläche wie auch das back-end-Prozessing stellt die App "Link2SD" bereit.Man kann auch hier jederzeit eine App (bzw.: Teil (1), (2) oder (3) einer App) zwischen internem und externem Speicher hin- und her schieben.
Als Mountpunkt verwendet Link2SD übrigens "/data/sdext2/" für die zweite Partition der SD-Karte (laut Beschreibung des Autors selbst).
Vorteil:
Man kann viel flexibler das auf die SD-Karte verschieben, was am sinnvollsten ist.
Eine sinnvolle Vorgehensweise ist, folgende Teile auf die SD-Karte zu verschieben:
Kann man die Methoden miteinander kombinieren, und ist das sinnvoll?
Möglich ist es teilweise schon, sinnvoll aber eigentlich nie, wie im Folgenden erörtert:
Mischen von Methode A und B:
Mit Methode B werden alle *.apk-Dateien auf die SD-Karte (ext-Partition) verlagert.
Wenn wir jetzt noch Methode A ("2.2+ native") hinzunehmen, können wir uns einige Apps aussuchen, deren *.apk Files auf die erste Partition der SD-Karte nach "/sdcard/.android-secure/" verschoben werden. Das heißt, wir würden Apps (genauer: deren *.apk Files) zwischen SD-Karte Partition 2 (ext2/3/4) nach SD-Karte Partition 1 (FAT32) verschieben. Das bringt eigentlich genau gar nichts, außer in dem seltenen Fall, dass die eine Partition zu klein wird und wir es auf die andere verschieben müssen. Dann würden wir aber Methode A nicht dazu verwenden, den internen Telefonspeicher zu entlasten, sondern dazu, die zweite (offenbar zu klein bemessene) Partition der SD-Karte zu entlasten (auf kosten der FAT32-Datenpartition). In der Regel macht man aber die 2. Partition für die auszulagernden Dateien zwischen 500 und 1400 MB groß, und dann sollte dieser Platz immer dicke ausreichen, wenn man nicht gerade 100 speicherfressende Spiele installiert. Bem.: Nicht mehr als 1.4 GB, sonst kann's Probleme geben, wie mehrfach berichtet - aber soviel braucht man in der Regel eh nicht.
Mischen von Methode A und C:
Es gilt die gleiche Argumentation wie im vorigen Abschnitt.
Mischen von Methode B und C:
Einen Nutzen gibt es hier eigentlich überhautpt nicht, denn beide Methoden lagern die Dateien auf die selbe Partition der SD-Karte aus.
Ich denke, es könnte aber zu Konflikten führen, denn beide Methoden verwenden diese Partition der SD-Karte auf unterschiedliche Weise. Je nachdem, unter welchen Verzeichnissen und Unterverzeichnissen die Dateien abgelegt werden, kann es im besten Fallen (bei sich nicht überscheidenden Namen) zu keinen Konflikten kommen, aber das ist unsicher.
Ein weiterer Punkt ist das Mounting: Beide Methoden verwenden ein (eigenes) Script, das die 2. SD-card Partition ins Dateisystem einhängt (mountet). Je nachdem, wie intelligent diese Scripts geschrieben sind, merken sie, dass das Dateisystem schon eingehängt ist, oder die scripts "bocken". Also, es kann funktionieren, im besten Falle, aber kann auch hier zu Konflikten führen.
Wie auch immer, ein möglicher Nutzen ist sowieso nicht zu sehen.
ABER: Ein User hier hat hier berichtet, dass sein Link2SD (die benannte beta-Version) erfolgreich auf seinem Android 2.3 System läuft, auf einem System, wo App2SD (gemeint ist wohl die Methode B (?)) auch läuft. Eventuell hat hier die Methode B "für Link2SD" den Job übernommen, die SD-Partition zu mounten, und Link2SD hat darauf aufbauend dann eher "zufällig" gut funktioniert. Das würde ich aber nicht als die Regel ansehen, ich würde weiterhin sagen, das grundsätzlich Methode B und C nicht gemischt werden sollten weil sie sich nur gegenseitig stören könnten und es zu undefiniertem Verhalten kommen kann.
D.h., bei einem fehlerfrei funktionierenden Link2SD (d.h. Android 1.6-2.2, und hoffentlich auch bald 2.3) sollte man ein mögliches A2SD-Feature (Methode B) seines Systems eher deaktivieren, um auf Nummer sicher zu gehen und Konflikte/undefiniertes Verhalten in bestimmten Situationen zu vermeiden.
Zusammenfassung:
Die letzte Zeile aus obiger Tabelle wurde noch gar nicht diskutiert. Was damit gemeint ist:
Wenn man das Smartphone per USB an den Windows PC anschließt, wird die erste SD-Karten-Partition ungemountet. Das heißt, alle Apps, die nach Methode A ausgelagert sind, sind dann nicht mehr gemountet, wodurch z.B. App-Icons verschwinden können. Bei Methode B und C bleibt die zweite SD-Partition gemountet und der Betrieb wird nicht beeinträchtigt [könnte aber evtl. auch einen Impact haben, wenn es sich statt um einen Windows PC um einen Linux PC handelt...].
FAZIT:
So, das war's. Ich schaue noch mal auf die Liste der eingangs gestellten Fragen - ja, die sollten jetzt alle beantwortet sein.
Methode C (Link2SD) ist eindeutig die beste Variante, weil am flexibelsten. Hiermit kann man am besten den internen Speicher optimal freischaufeln und gleichzeitig den Impact (durch Verlangsamung aufgrund langsamer SD-Karte) minimieren, indem man seine Auswahl richtig trifft. Das ist also besonders dann gut, wenn der Speicherplatz wirklich knapp ist.
Außerdem ist Methode C (Link2SD) ähnlich einfach zu handhaben wie Methode A (native 2.2+), außer dem Erfordernis des zusätlichen Rootens (einmalige Sache, bei vielen Phones auch sehr einfach).
Methode B (A2SD(+), DT App2SD, ...), d.h. feste Umleitung aller *.apk files, ist auch ok, wenn damit der interne Speicher ausreichend geleert wird. Sollte das aber mal nicht mehr ausreichen, weil z.B. die dalvik-cache-Dateien zu sehr anwachsen, dann muss man gleich zum "Hammer" greifen, der darin besteht, auch ALLE dalvik-cache-Dateien auf die SD-Karte auszulagern. Diese undifferenzierte Lösung kann zu Performance-Einbußen führen! Besser wäre es, zumindest die dalvik-cache Dateien, die häufig vom System (oder vom Benutzer) gebraucht werden (z.B. für den Homescreen Manager, SMS-App, ...) im internen Speicher zu belassen, zumal das ja gar nicht unbeding die größten Speicherfresser sein müssen.
Außerdem ist diese Methode, vor allem wenn man die Variante "DarkTremor Apps2SD" (die leistungsfähigste) verwendet, eher etwas für Eingeweihte, die sich mit dem System auskennen und weniger etwas für End-User.
Methode A (Android 2.2+ native) ist die schlechsteste Methode (auch für Benutzer von Android 2.2+), denn man kann NUR die *.apk-Dateien nach SD-Karte verlagern, und dann noch nicht einmal alle. Damit schafft man nur sehr wenig internen Speicher frei und wird sein grundsätzliches Speicher-Problem nur aufschieben, aber wohl meist nicht dauerhaft lösen.
Ich erinnere nochmal daran, dass das verschieben von ALLEN *.apk-Dateien nach extern (wie nur mit Methode B oder C möglich) keine Perfomance-Einbußen im laufenden Betrieb mit sich bringt, weil Andoid im laufenden Betrieb auf diese Dateien gar nicht zugreift, sondern stattdessen die dalvik-cache-Dateien ausführt.
Schlussbemerkung zu Link2SD (Methode C):
Momentan (Anfang September 2011) scheint es Probleme mit Android 2.3 zu geben, hier funktioniert die Version im Market anscheinend nicht. Ich hab aber schon mit dem autor gemailt, und er ist dran, auch für 2.3 ein update zu bringen. Eine beta Version zum Testen hat er mir schon hier geschickt für willige beta-Tester (Rückmeldung an den Autor, was (nicht) geht und welches ROM ihr benutzt, ist natürlich sinnvoll)
Links:
Nachtrag vom user "[8]" bzgl Methode B mit dem Custom ROM "Cyanogenmod7" (vielen Dank im Namen aller):
== Überbegriff: "App to SD" ==
Dieser Artikel soll etwas Klarheit bringen in die Welt von "App to SD".
Nach Lesen in diversen Foren war ich zunächst irritiert, und habe mir dann nach und nach ein Bild vom Thema gemacht, das ich hiermit zusammenfassen und teilen möchte.
Fragen, die ich hier beantworten möchte:
- Wozu das Ganze / Wer braucht das?
- Was bedeuten Move2SD, App2SD, A2SD, A2SD+, DT A2SD, DT App2SD, Link2SD, ...?
- Was sind die Unterschiede/Gemeinsamkeiten der verschiedenen Methoden?
- Welche Methode geht für welche Android-Version?
- Für welche Methode muss ich ein "rooted" Smartphone haben?
- Für welche Methode brauche ich eine speziell partitionierte SD-Karte?
- Welche Methode geht für welche Apps?
- Kann man die Methoden miteinander kombinieren, und ist das sinnvoll?
- Warum wird der interne Speicher trotzdem immer voller, obwohl ich App2SD hab?
Sollte ich irgendwo Fehler haben oder sollte es was zu ergänzen geben, sind Hinweise natürlich sehr willkommen. Ich werde dann versuchen, die Korrekturen in diesen Beitrag einzuarbeiten.
Also, eins nach dem anderen...
Wozu das Ganze / Wer braucht das?
Android Smartphones installieren Apps standardmäßig im internen Speicher (für's Datenblatt: Achte auch "interner Speicher (ROM), NICHT auf RAM). Der ist oft begrenzt, oft sind nur rund 100-200 MB frei, wenn man das App neu kauft. Wenn man viele Aps installiert (mit der Zeit können locker über 100 Apps zusammen kommen, oft auch über 200), ist der Speicher bald voll. Zwar brauchen Apps oft nur um die 200 kB Speicher, viele brauchen aber auch 1 MB, 3 MB, 6 MB oder manchmal auch 10 oder 20 oder mehr MBytes. Ist der Speicher voll, kann man keine weiteren Apps mehr installieren, oder muss erst wieder welche deinstallieren. Das ist schlecht! Android warnt meist, wenn nur noch ca. 20 MB frei sind, und dann gibt's auch schon oft Probleme, z.B. dass keine SMS mehr gespeichert werden kann.
Also haben sich die Androiden gedacht: Wie wäre es eigentlich, Apps auf der Speciherkarte zu installieren, die ist doch große genug! Genau!
Jetzt mehr Details:
Wenn ich eine App installiere und benutze, dann wird der folgende Speicher belegt, bei dem es sich um eine Partition im internen Telefonspeicher handelt:
(1) /data/app/<Dateiname>.apk
(2) /data/dalvik-cache/<Dateiname_der_App>.dex
(3) /data/data/<Verzeichnisname_der_App>/lib/<Dateiname>.so
(4) /data/data/<Verzeichnisname_der_App>/<sonstige Dateien und Verzeichnisse>
(Seitenbemerkung.: System Apps (im Gegensatz zu installierten Apps) befinden sich auf einer eigenen internen Partition unter /system/app/)
Was ist das alles genau? Nun:
- (1)=Die heruntergeladene App
--> Größe: wird im Android Market angezeigt - (2)=Eine aus (1) vom Betriebssystem generierte ausführbare Datei. Bem.: Wenn sie gelöscht wird, stellt das Betriebssystem sie aus der *.apk-Datei (1) wieder her, ist also nicht schlimm, bringt aber auch nichts, außer man löscht eine dalvik-cache-Datei, zu der es gar keine *.apk-Datei mehr gibt, also "Datenmüll", den es bei sauberer De-Installation aber eigentlich nicht geben darf. Wenn man auf ein App-Symbol tippt um eine App zu starten, dann greift das Betriebssystem auf diese dalvik-Datei zu, und NICHT auf die *.apk-Datei aus "(1)".
--> Größe: ähnlich wie die *.apk Datei, in der Regel etwas kleiner, kann variieren - (3)=library Dateien, sind bei einigen (vielen) Apps gar nicht vorhanden, können manchmal aber auch ziemlich groß sein
- (4)=Sonstige App-spezifischen Daten. Datenmenge unterschiedlich, im Allgemeinen eher gering (Ausnahme z.B. Browser cache...)
Die Details
Es gibt unterschiedliche Methoden, WAS von (1), (2), (3) und (4) auf die SD-Karte verschoben wird, und WIE das passiert.
Generell gibt es drei Gruppen von Methoden:
Methode A (kurz: "natives App2SD von Google"):
(z.B. App 2 SD, Move 2 SD)
- ab Android 2.2=Froyo
- kein "root" benötigt
- keine zweite SD-Karten-Partition benötigt
- Auswahl auf "per App" Basis möglich
- Viele Apps lassen sich aber gar nicht verschieben mit dieser Methode
- Nur (1) wird verschoben (nur das *.apk file der jew. App)
Man kann pro selbst installierter App entscheiden, ob man diese auf die SD-Karte verschieben möchte. Das geht auch nachträglich, und es geht "hin" und "zurück" nach Belieben. Was dann passiert ist, dass die *.apk Datei nach "/sdcard/.android-secure/" (="/mnt/secure/asec/") verschoben wird [evtl. irgendwie verschlüsselt?] (Bem.: Außerdem entsteht der mount point "/mnt/asec/<dateiname>/", wo sich die ausgelagerte apk Datei im Klartext befindet). Mit einem Datei-Browser wie z.B. Adao File Manager aus dem Market kann man das überprüfen (oder mit rootexplorer). Das Betriebssystem (ab 2.2) unterstützt dieses Feature nativ, darum ist diese Methode für Android 2.1 und früher nicht möglich.
Einschränkungen:
- Geht nur für einige Apps, die so programmiert sind, dass sie "App2SD" im Sinne dieser "Methode A" (Android 2.2+ native) unterstützen. Z.B. fallen wohl Widgets generell nicht darunter, aber auch viele andere Apps unerstützen dies nicht, wenn der Programmierer es nicht vorgesehen hat.
- Geht grundsätzlich nicht für System-Apps (also vorinstallierte und nicht de-installierbare Apps).
Diese Methode ist also Bestandteil des Betriebssystems, und es gibt verschiedene grafische Front-Ends, die einem die Arbeit für's Hin- und Herschieben erleichtern, z.B. die App "Move2SD" aus dem Android Market.
Methode B (kurz: Symbolic Links auf Verzeichniss(e) auf der SD-Karte):
(A2SD, A2SD+, DT A2SD, DT Apps2SD, ...):
...und oft auch mit "App2SD" bezeichnet (auch von App-Autoren), um die Verwechslung und Konfusion mit Methode A komplett zu machen.
- ab Android 1.6 (oder sogar schon früher? - naja älteres Android hat hier eh niemand...)
- "root" benötigt!
- Zweite SD-Karten-Partition benötigt! (als zweite Partition nach der FAT32-Partition, aber auch als primary(!) Partition einrichten, und zwar als ext2/ext3/ext4 (ja nachdem, was dein Smartphone-System (ROM) unterstützt))
- Auswahl auf "per App" Basis NICHT möglich (nur für "alle oder keine" Apps [nicht-system-apps])
- Ob die zu verschiebende App ein "App2SD" gemäß "Methode A" unterstützt oder nicht, ist irrelevant.
- Bei A2SD wird nur (1) verschoben (nur das *.apk file), bei neueren Varianten wie A2SD+ oder "Dark Tremor Apps2SD" kann auch zusätzlich noch wahlweise der dalvik-cache (2) und auch (3)+(4) (letzteres nut gemenisam) auf die SD-Karte verschoben werden (aber nicht App-spezifisch).
Man muss das Feature in der Regel über Recovery (= Bootmenü, wie das BIOS, suche z.B. nach "Clockwork Recovery", "ClockworkMod Recovery", "CWM Recovery") einspielen. Bei den meisten Custom ROMS ist es schon drauf. Was dann passiert ist, dass nach Booten des Systems das Betriebssystem die zweite Partition der SD-Karte erkennt und ins Dateisystem einhängt (mountet), und zwar unter "/system/sd/".
Damit ist aber noch nichts passiert, die App-Dateien sind immer noch im internen Speicher. Aber jetzt kommt der schlaue Trick, Linux macht's möglich:
Wenn man nun über eine geeignete grafische Oberfläche das Verschieben der Apps von Intern nach SD-Karte veranlasst, dann passiert im Hinitergrund im System Folgendes:
Es werden die Daten von /data/app/ nach /system/sd/ verschoben, also physikalisch auf die SD-Karte verlagert. Dann wird ein symbolischer link erzeugt, der von /data/app/ nach /system/sd/app/ zeigt. Das ist alles. Auf diese Weise kann das Betriebssystem wie gewohnt auf "/data/app/<Dateiname>.apk" zugreifen und merkt gar nicht, dass diese Datei auf der SD-Karte liegt, bzw. es ist ihm "egal". Alle Betriebssystem-Operationen können also wie üblich ablaufen, die Änderung ist für das Betriebssystem völlig transparent, und darum geht es auch für Android 1.6 oder 2.1.
Auf die gleiche Weise kann man auch den dalvik-cache auf die SD-Karte "umleiten" (A2SD+, "Darktremor A2SD" (DT A2SD), "Darktremor App2SD", ...). Ein Beispiel eines grafischen User-Interfaces ist die App "A2SDGUI for Darktremor A2SD" (Google Market), womit man (1) (apk) oder (2) (dalvik-cache) von intern nach SD aktivieren und deaktivieren kann.
[Das Umbiegen von System-Apps geht GLAUBE ich nicht, oder nur mit speziellen Lösungen dann vielleicht doch, ist jetzt aber hier nicht der Schwerpunkt, weil für die allermeisten Fälle wirklich nicht relevant.]
[Bem. zu A2SDGUI: Diese App (in Verbindung mit "Darktremor Apps2SD") kann noch viel mehr als nur A2SD, nämlich System-Interna auf vielerlei Weise optimieren - aber das ist jetzt hier nicht das Thema]
Einschränkungen:
Diese Methode erlaubt es nicht, einzelne Apps auf die Sd-Karte zu verlagern, es geht nur für alle Apps oder für keine. Man kann nur wählen zwischen "nur *.apk files", "nur Dalvik-Cache", oder beides, oder nichts, aber diese Wahl betrifft dann halt alle (Nicht-System-)Apps.
Methode C (kurz: Symbolic Links auf Dateien auf der SD-Karte):
(Link2SD - kostenlose App aus dem Google Market)
- ab Android 1.6 (oder sogar schon früher? - naja älteres Android hat hier eh niemand...)
(momentan probleme mit Android 2.3, siehe Bemerkung ganz am ende des Postings) - "root" benötigt!
- Zweite SD-Karten-Partition benötigt! (als zweite Partition nach der FAT32-Partition, aber auch als primary(!) Partition einrichten, und zwar als ext2/ext3/ext4 (ja nachdem, was dein Smartphone-System (ROM) unterstützt), ODER auch FAT32 (angeblich))
- Auswahl auf "per App" Basis IST möglich (nur für Nicht-System-Apps)
- Ob die zu verschiebende App ein "App2SD" gemäß "Methode A" unterstützt oder nicht, ist irrelevant.
- Es kann (1), (2) und (3) verschoben werden (frei wählbar und kombinierbar pro App)
Das Prinzip ist das gleiche wie bei Methode B insofern, dass hier auch mit symbolic Links auf Orte auf der SD-Karte (2. Partition) gearbeitet wird. Der Unterschied ist der, dass nicht wie in Methode B ein Symbolic Link für ein ganzes Verzeichnis angelegt wird (für alle *.apk oder alle dalvik-cache-Dateien), sondern dass pro App und pro Kategorie (1)/(2)/(3) entschieden werden kann, ob eine "Umleitung" zur SD-Karte per symbolic link stattfinden soll. Die grafische Benutzeroberfläche wie auch das back-end-Prozessing stellt die App "Link2SD" bereit.Man kann auch hier jederzeit eine App (bzw.: Teil (1), (2) oder (3) einer App) zwischen internem und externem Speicher hin- und her schieben.
Als Mountpunkt verwendet Link2SD übrigens "/data/sdext2/" für die zweite Partition der SD-Karte (laut Beschreibung des Autors selbst).
Vorteil:
Man kann viel flexibler das auf die SD-Karte verschieben, was am sinnvollsten ist.
Eine sinnvolle Vorgehensweise ist, folgende Teile auf die SD-Karte zu verschieben:
- (1) Alle *.apk Files (weil diese im operativen Betrieb nicht verwendet werden, also keine Geschwindigkeitseinbuße bei langsamer externen Speicherkarte)
- (2) Dalvik-Cache: nur für die Apps, die eher selten verwendet werden und wo man ggf. geringe Geschwindigkeitseinbußen in Kauf nehmen kann, oder auch solche, die einen sehr großen dalvik-cache haben und wo es sich somit richtig lohnt.
- (3) Library Dateien: gleiche Vorgehensweise wie für (2)
Kann man die Methoden miteinander kombinieren, und ist das sinnvoll?
Möglich ist es teilweise schon, sinnvoll aber eigentlich nie, wie im Folgenden erörtert:
Mischen von Methode A und B:
Mit Methode B werden alle *.apk-Dateien auf die SD-Karte (ext-Partition) verlagert.
Wenn wir jetzt noch Methode A ("2.2+ native") hinzunehmen, können wir uns einige Apps aussuchen, deren *.apk Files auf die erste Partition der SD-Karte nach "/sdcard/.android-secure/" verschoben werden. Das heißt, wir würden Apps (genauer: deren *.apk Files) zwischen SD-Karte Partition 2 (ext2/3/4) nach SD-Karte Partition 1 (FAT32) verschieben. Das bringt eigentlich genau gar nichts, außer in dem seltenen Fall, dass die eine Partition zu klein wird und wir es auf die andere verschieben müssen. Dann würden wir aber Methode A nicht dazu verwenden, den internen Telefonspeicher zu entlasten, sondern dazu, die zweite (offenbar zu klein bemessene) Partition der SD-Karte zu entlasten (auf kosten der FAT32-Datenpartition). In der Regel macht man aber die 2. Partition für die auszulagernden Dateien zwischen 500 und 1400 MB groß, und dann sollte dieser Platz immer dicke ausreichen, wenn man nicht gerade 100 speicherfressende Spiele installiert. Bem.: Nicht mehr als 1.4 GB, sonst kann's Probleme geben, wie mehrfach berichtet - aber soviel braucht man in der Regel eh nicht.
Mischen von Methode A und C:
Es gilt die gleiche Argumentation wie im vorigen Abschnitt.
Mischen von Methode B und C:
Einen Nutzen gibt es hier eigentlich überhautpt nicht, denn beide Methoden lagern die Dateien auf die selbe Partition der SD-Karte aus.
Ich denke, es könnte aber zu Konflikten führen, denn beide Methoden verwenden diese Partition der SD-Karte auf unterschiedliche Weise. Je nachdem, unter welchen Verzeichnissen und Unterverzeichnissen die Dateien abgelegt werden, kann es im besten Fallen (bei sich nicht überscheidenden Namen) zu keinen Konflikten kommen, aber das ist unsicher.
Ein weiterer Punkt ist das Mounting: Beide Methoden verwenden ein (eigenes) Script, das die 2. SD-card Partition ins Dateisystem einhängt (mountet). Je nachdem, wie intelligent diese Scripts geschrieben sind, merken sie, dass das Dateisystem schon eingehängt ist, oder die scripts "bocken". Also, es kann funktionieren, im besten Falle, aber kann auch hier zu Konflikten führen.
Wie auch immer, ein möglicher Nutzen ist sowieso nicht zu sehen.
ABER: Ein User hier hat hier berichtet, dass sein Link2SD (die benannte beta-Version) erfolgreich auf seinem Android 2.3 System läuft, auf einem System, wo App2SD (gemeint ist wohl die Methode B (?)) auch läuft. Eventuell hat hier die Methode B "für Link2SD" den Job übernommen, die SD-Partition zu mounten, und Link2SD hat darauf aufbauend dann eher "zufällig" gut funktioniert. Das würde ich aber nicht als die Regel ansehen, ich würde weiterhin sagen, das grundsätzlich Methode B und C nicht gemischt werden sollten weil sie sich nur gegenseitig stören könnten und es zu undefiniertem Verhalten kommen kann.
D.h., bei einem fehlerfrei funktionierenden Link2SD (d.h. Android 1.6-2.2, und hoffentlich auch bald 2.3) sollte man ein mögliches A2SD-Feature (Methode B) seines Systems eher deaktivieren, um auf Nummer sicher zu gehen und Konflikte/undefiniertes Verhalten in bestimmten Situationen zu vermeiden.
Zusammenfassung:
Code:
| Method A | Method B | Method C |
| (Native 2.2+ App2SD) | (A2SD, DT Apps2SD) | (Link2SD) |
---------------------+-------------------------+-------------------------+-------------------------|
Android Version | 2.2+ | 1.6+ | 1.6+ (2.3:fix pending) |
---------------------+-------------------------+-------------------------+-------------------------|
Root needed? | No | Yes | Yes |
---------------------+-------------------------+-------------------------+-------------------------|
2nd SD partition | No | Yes | Yes |
needed? | | (ext2/3/4 acc. to ROM) | (ext2/3/4, or FAT32 |
---------------------+-------------------------+-------------------------+-------------------------|
All non-system apps | No | Yes | Yes |
can be moved? | (only eligible apps) | | |
---------------------+-------------------------+-------------------------+-------------------------|
Indididual Apps | No | No | Yes |
can be selected? | Move either all apps, | Move either all apps, | |
| or none. | or none. | |
---------------------+-------------------------+-------------------------+-------------------------|
What can be moved? | | | |
*.apk files | Yes | Yes | Yes |
*.dex (dalvik-cache) | No | Yes (for some solutions)| Yes |
*.so (libraries) | No | Yes ("DT Apps2SD") | Yes |
other user data | No | Yes ("DT Apps2SD") | No |
---------------------+-------------------------+-------------------------+-------------------------|
Handling | Almost Fool-Proof | Sometimes comlicated | Easy User interface, |
| | | nearly fool-proof |
---------------------+-------------------------+-------------------------+-------------------------|
Impact if connected | Yes | No | No |
to WindowsPC via USB?| | | |
Wenn man das Smartphone per USB an den Windows PC anschließt, wird die erste SD-Karten-Partition ungemountet. Das heißt, alle Apps, die nach Methode A ausgelagert sind, sind dann nicht mehr gemountet, wodurch z.B. App-Icons verschwinden können. Bei Methode B und C bleibt die zweite SD-Partition gemountet und der Betrieb wird nicht beeinträchtigt [könnte aber evtl. auch einen Impact haben, wenn es sich statt um einen Windows PC um einen Linux PC handelt...].
FAZIT:
So, das war's. Ich schaue noch mal auf die Liste der eingangs gestellten Fragen - ja, die sollten jetzt alle beantwortet sein.
Methode C (Link2SD) ist eindeutig die beste Variante, weil am flexibelsten. Hiermit kann man am besten den internen Speicher optimal freischaufeln und gleichzeitig den Impact (durch Verlangsamung aufgrund langsamer SD-Karte) minimieren, indem man seine Auswahl richtig trifft. Das ist also besonders dann gut, wenn der Speicherplatz wirklich knapp ist.
Außerdem ist Methode C (Link2SD) ähnlich einfach zu handhaben wie Methode A (native 2.2+), außer dem Erfordernis des zusätlichen Rootens (einmalige Sache, bei vielen Phones auch sehr einfach).
Methode B (A2SD(+), DT App2SD, ...), d.h. feste Umleitung aller *.apk files, ist auch ok, wenn damit der interne Speicher ausreichend geleert wird. Sollte das aber mal nicht mehr ausreichen, weil z.B. die dalvik-cache-Dateien zu sehr anwachsen, dann muss man gleich zum "Hammer" greifen, der darin besteht, auch ALLE dalvik-cache-Dateien auf die SD-Karte auszulagern. Diese undifferenzierte Lösung kann zu Performance-Einbußen führen! Besser wäre es, zumindest die dalvik-cache Dateien, die häufig vom System (oder vom Benutzer) gebraucht werden (z.B. für den Homescreen Manager, SMS-App, ...) im internen Speicher zu belassen, zumal das ja gar nicht unbeding die größten Speicherfresser sein müssen.
Außerdem ist diese Methode, vor allem wenn man die Variante "DarkTremor Apps2SD" (die leistungsfähigste) verwendet, eher etwas für Eingeweihte, die sich mit dem System auskennen und weniger etwas für End-User.
Methode A (Android 2.2+ native) ist die schlechsteste Methode (auch für Benutzer von Android 2.2+), denn man kann NUR die *.apk-Dateien nach SD-Karte verlagern, und dann noch nicht einmal alle. Damit schafft man nur sehr wenig internen Speicher frei und wird sein grundsätzliches Speicher-Problem nur aufschieben, aber wohl meist nicht dauerhaft lösen.
Ich erinnere nochmal daran, dass das verschieben von ALLEN *.apk-Dateien nach extern (wie nur mit Methode B oder C möglich) keine Perfomance-Einbußen im laufenden Betrieb mit sich bringt, weil Andoid im laufenden Betrieb auf diese Dateien gar nicht zugreift, sondern stattdessen die dalvik-cache-Dateien ausführt.
Schlussbemerkung zu Link2SD (Methode C):
Momentan (Anfang September 2011) scheint es Probleme mit Android 2.3 zu geben, hier funktioniert die Version im Market anscheinend nicht. Ich hab aber schon mit dem autor gemailt, und er ist dran, auch für 2.3 ein update zu bringen. Eine beta Version zum Testen hat er mir schon hier geschickt für willige beta-Tester (Rückmeldung an den Autor, was (nicht) geht und welches ROM ihr benutzt, ist natürlich sinnvoll)
Links:
Nachtrag vom user "[8]" bzgl Methode B mit dem Custom ROM "Cyanogenmod7" (vielen Dank im Namen aller):
(Leider lässt sich mein "reserviertes" Nachfolge-Posting nicht mehr editieren)[8] schrieb:[...]
dein Posting über A2SD ist wirklich klasse, das sollte sich jeder Android-User mit Speicherproblemen einmal komplett in Ruhe durchlesen.
Unter Cyanogenmod7 gibt es noch eine weitere Möglichkeit, um Methode B (umbiegen der Symlinks von Verzeichnissen) recht einfach einzurichten.
Wenn eine ext2/3/4-Partition auf der SD-Karte vorhanden ist, wird diese automatisch bei CM7 unter /sd-ext gemountet. Mit dem Tool S2E(simple2ext) https://market.android.com/details?id=ru.krikun.s2e können dann recht einfach die Symlinks zu /data/app, /data/dalvic-cache, /data/data, download-cache, und private apps umgebogen werden. Nur click & reboot.
Funktioniert bei mir bisher bestens mit einer 1024 MB ext4 als zweite Partition auf SD.
[...]