Mitglieder surfen ohne Werbung: Jetzt kostenlos registrieren!

HOWTO Einzelne Anwendungen verschieben (root erforderlich)

  • 22 Antworten
  • Neuester Beitrag
Diskutiere HOWTO Einzelne Anwendungen verschieben (root erforderlich) im Tools im Bereich Android Apps und Spiele.
Autarkis

Autarkis

Experte
Hey Leute,

Ich habe ein Skript erstellt, mit welchem man einzelne Anwendungen auf die SD-Karte auslagern kann, da beim Auslagern aller Apps manchmal Probleme auftreten. So kann man für sich selber ausprobieren, bei welcher App diese Probleme entstehen.

Vorbereitungen:

* root
* ext2-Partition auf SD-Karte
* modifizierte init.rc und mountd.conf einspielen (Anhang), vorher sichern, gemäss "Apps on SD card"
* Telefon rebooten
* Verzeichnis /system/sd/app erstellen:
Code:
adb remount 
adb shell mkdir /system/sd/app
* zu verschiebende app ausfindig machen; ich hab für mich mit den umfangreichsten angefagen die nicht im Hintergrund laufen müssen. Ich habe den Verdacht, dass da die Probleme anfagen! Mit

Code:
adb shell ls -laS /data/app/
bekommt man eine nach Dateigrösse sortierte Liste der installierten Apps.

* nun kann man die ausgewählten Sünder (z.B das neue com.slovoed.vox.spanish_spanish.apk, das man wohl selten benötigen wird, aber mit 7.1MB zu Buche schlägt) mit Hilfe des Skripts verschieben:

Code:
mvapp.sh com.slovoed.vox.spanish_spanish.apk
Damit das funktioniert muss adb root-fähig sein, das war bei älteren JF-root-Flashes meines Wissens nicht immer der Fall. :)


Noch Fragen? :D


----

mvapp.sh
Code:
#!/bin/bash
adb remount
adb shell cp /data/app/$1 /system/sd/app/$1
adb shell rm /data/app/$1
adb shell ln -s /system/sd/app/$1 /data/app/$1
adb shell chown 1000:1000 /data/app/$1
 

Anhänge

  • mvapp.zip
    1,1 KB Aufrufe: 162
Zuletzt bearbeitet von einem Moderator:
zx128

zx128

Experte
Danke für die Anleitung!

Hätte ich root - würde ich es sofort ausprobieren. Bei dem Script habe ich aber keine Zweifel :)

Kleine Frage:

heißt bei JF-Builds der Ordner für SD-Mount sd? Oder ist es bei allen US-G1 so?
Fiel mir halt auf, weil es bei mit sdcard heißt
 
Autarkis

Autarkis

Experte
zx128 schrieb:
Danke für die Anleitung!

Hätte ich root - würde ich es sofort ausprobieren. Bei dem Script habe ich aber keine Zweifel :)

Kleine Frage:

heißt bei JF-Builds der Ordner für SD-Mount sd? Oder ist es bei allen US-G1 so?
Fiel mir halt auf, weil es bei mit sdcard heißt
Es sind zwei mountd.conf / init.rc - Kombinationen im Umlauf ( aus diesem oder jenem Thread). Je nachdem welche du verwendest, hast du den Mountpoint entweder auf /system/sd oder auf /sd . /sdcard hingegen ist der normale Mountpoint für die FAT32-Partition. Die ext2-Partition hat dort nichts zu suchen. :)

Ich bin der Meinung, /system/sd ist sowohl der neuere als auch der elegantere Mountpoint. :)
 
Zuletzt bearbeitet:
Autarkis

Autarkis

Experte
Okay, ich hab inzwischen weiter getüftelt. Das Skript oben funtkioniert. Ich habe jetzt ein besseres angefertigt, wobei auch direkt die Daten einer Anwendung auf die SD-Karte verschoben werden. Dabei arbeite ich mit cp -p, was die Rechte intakt lässt. Hätte ich schon von Anfang an tun sollen.

Das neue Skript nimmt als Parameter den Namen der Anwendung und nicht den Namen des Pakets. Das heisst, man ruft es mit

Code:
mvappndata.sh com.mobisystems.msdict.embedded.wireless.pons.ssd
auf. Das ".apk" am Schluss weglassen, das neue Skript fügt das selber hinzu wo nötig.

Getestet und funktioniert, zur Vorbereitung muss ein Verzeichniss /system/sd/data/ erstellt werden. :)

---

Code:
#!/bin/bash
# mvappndata.sh 1.1 by autarkis@gmx.net 
# GPL OpenSource
adb remount
adb shell cp -rp /data/app/$1.apk /system/sd/app/$1.apk
adb shell rm /data/app/$1.apk
adb shell ln -s /system/sd/app/$1.apk /data/app/$1.apk
adb shell cp -rp /data/data/$1 /system/sd/data/$1
adb shell rm -r /data/data/$1 
adb shell ln -s /system/sd/data/$1 /data/data/$1
 
H

Hendrik

Ambitioniertes Mitglied
Hi,
danke für die Anleitung, grundsätzlich scheint es zu funktionieren.
Die APK Dateien und die Datenverzeichnisse tauchen nach dem Ausführen des Skripts in /system/sd/app und /system/sd/data auf.

Aber irgendeinen Fehler scheine ich gemacht zu haben.
Nach dem Kopieren einer Anwendung, muss ich diese zunächst neu installieren, ansonsten ist sie einfach verschwunden.
Ist das richtig so?
Und sobald ich die Anwendung neu installiert habe, ist der Telefonspeicher wieder genauso voll wie vorher und die Anwendung funktioniert auch ohne SD-Karte.
Die Anwendung wurde also scheinbar wieder in den Telefonspeicher installiert.

Ich muss dazu sagen, dass ich das ganze unter Windows probiert habe, d.h. die sh Datei in eine bat umgeschrieben:

mvappndata.bat
Code:
adb remount
adb shell cp -rp /data/app/%1.apk /system/sd/app/%1.apk
adb shell rm /data/app/%1.apk
adb shell ln -s /system/sd/app/%1.apk /data/app/%1.apk
adb shell cp -rp /data/data/%1 /system/sd/data/%1
adb shell rm -r /data/data/%1 
adb shell ln -s /system/sd/data/%1 /data/data/%1
Aufruf dann beispielsweise mit "mvappndata.bat mobi.bbase.discover"

Läuft ohne Fehlermeldung durch, vielleicht funktioniert irgendein Befehl trotzdem nicht?
 
Autarkis

Autarkis

Experte
Hey Hendrik,

Schaut gut aus. Es kann nur daran liegen, dass die SD-Karte nicht richtig verlinkt ist.

Zur Vorbereitung auf die Verwendung dieses Skripts muss man wie gesagt die Verzeichnisse /system/sd/app und /system/sd/data/ erstellen, mit

Code:
adb shell mkdir /system/sd/app
adb shell mkdir /system/sd/data
Natürlich sollte die ext2-Partition auf /system/sd/ gemountet sein, aber ich gehe mal davon aus.
 
H

Hendrik

Ambitioniertes Mitglied
Ja das scheint alles soweit zu stimmen.

Habe im Terminalemulator mit
su
busybox df -h
nachgeschaut ob die ext2 Partition richtig gemountet ist.

Die Verzeichnisse existieren auch.

Wenn ich dein Skript für eine Anwendung ausführe, landet die APK Datei in
/system/sd/app

Danach ist die Anwendung allerdings nicht mehr installiert.
Stimmt das so?
 
Autarkis

Autarkis

Experte
Hendrik schrieb:
Ja das scheint alles soweit zu stimmen.

Habe im Terminalemulator mit
su
busybox df -h
nachgeschaut ob die ext2 Partition richtig gemountet ist.

Die Verzeichnisse existieren auch.

Wenn ich dein Skript für eine Anwendung ausführe, landet die APK Datei in
/system/sd/app

Danach ist die Anwendung allerdings nicht mehr installiert.
Stimmt das so?
Nein, die Anwendung sollte installiert bleiben, da ein Symlink erstellt wird.

Irgendwas stimmt nicht, kann das per Ferngeistheilung nicht lösen... guck mal nach ob die Symlinks richtig erstellt werden.
 
H

Hendrik

Ambitioniertes Mitglied
Okay, kannst du mir sagen an welcher Stelle der Anleitung die Symlinks erstellt werden?
Bin nicht so Linux bewandert;)

Dann kann ich die betreffenden Stellen nochmal überprüfen.
 
Autarkis

Autarkis

Experte
Die Symlinks müssten in /data/app/Anwendung.apk landen.

Dort sollten sie aber keinen Platz belegen, sondern auf /system/sd/app/Anwendung.apk verweisen.

Die Symlinks werden vom Skript erstellt.
 
J

Joker45

Fortgeschrittenes Mitglied
Autarkis schrieb:
Jepp ;)

Ich fürchte ich brauche ne Anleitung für Dummies.

Als Windooferfahrener bin ich in Sachen Linux schlichtweg doof :cool:

* root --- hab ich
* ext2-Partition auf SD-Karte -- hab ich nun auch
* modifizierte init.rc und mountd.conf einspielen (Anhang)
---wohin und vorhandene dateien nach dem Sichern einfach überschreiben?
, vorher sichern, gemäss "Apps on SD card"
- wo finde ich "Apps on SD card". Die Suche hat mir hier leider kein Ergebnis gebracht.

* Telefon rebooten
--- glaube das bekomme ich hin :D

* Verzeichnis /system/sd/app erstellen: Code:
adb remount
adb shell mkdir /system/sd/app
---wie funzt das? via telnet/ konsole oder kann ich einfach in einem Dateimanager einen Ordner anlegen. (z.B. FTP)

* zu verschiebende app ausfindig machen; ich hab für mich mit den umfangreichsten angefagen die nicht im Hintergrund laufen müssen. Ich habe den Verdacht, dass da die Probleme anfagen! Mit

Code:
adb shell ls -laS /data/app/
--- wieder ein Konsolenbefehl? Wie gesagt, bin Windoofversaut und muss das erst mit Linux lernen.

Weiter mag ich noch gar nicht fragen. Evtl erklärt es sich ja von selbst wenn ich die ersten Schritte und den Grundsätzlichen Umgang erstmal gesehen und verstanden habe.

Danke für die Geduld

Gruß

Joker
 
Autarkis

Autarkis

Experte
Joker45 schrieb:
Jepp ;)

Ich fürchte ich brauche ne Anleitung für Dummies.

Als Windooferfahrener bin ich in Sachen Linux schlichtweg doof :cool:
Schon gut. :)

Joker45 schrieb:
* root --- hab ich
* ext2-Partition auf SD-Karte -- hab ich nun auch
* modifizierte init.rc und mountd.conf einspielen (Anhang)
---wohin und vorhandene dateien nach dem Sichern einfach überschreiben?
, vorher sichern, gemäss "Apps on SD card"
- wo finde ich "Apps on SD card". Die Suche hat mir hier leider kein Ergebnis gebracht.
Oh, hier: http://forum.xda-developers.com/showthread.php?t=468959

In Kurzform für diese spezielle Anwendung, nur diese Schritte:

Code:
adb pull /system/etc/mountd.conf <dir on your desktop>
adb pull /system/init.rc <dir on your desktop>
.... zum Backup, und ...

Code:
adb push /<dir on your desktop of modified file>/mountd.conf /system/etc/mountd.conf
adb push /<dir on your desktop of modified file>/init.rc /system/init.rc
... zum Aufspielen der neuen Versionen.

Joker45 schrieb:
adb shell mkdir /system/sd/app
---wie funzt das? via telnet/ konsole oder kann ich einfach in einem Dateimanager einen Ordner anlegen. (z.B. FTP)
Nein, du must ADB verwenden, da du sonst die Systempartition nicht beschreibbar machen kannst.

Du benötigst adb von SDK. Von code.android.com herunterladen.

Joker45 schrieb:
* zu verschiebende app ausfindig machen; ich hab für mich mit den umfangreichsten angefagen die nicht im Hintergrund laufen müssen. Ich habe den Verdacht, dass da die Probleme anfagen! Mit

Code:
adb shell ls -laS /data/app/
--- wieder ein Konsolenbefehl? Wie gesagt, bin Windoofversaut und muss das erst mit Linux lernen.
Kurzfassung: SDK runterladen, am G1 USB Debugging einschalten, am USB anschliessen, adb aus dem SDK starten.

Joker45 schrieb:
Weiter mag ich noch gar nicht fragen. Evtl erklärt es sich ja von selbst wenn ich die ersten Schritte und den Grundsätzlichen Umgang erstmal gesehen und verstanden habe.

Danke für die Geduld
Kein Ding.
 
J

Joker45

Fortgeschrittenes Mitglied
Vielen Dank! Das werde ich morgen.. (oops ist schon 1 Uhr) nacher mal testen und ggf. erneut Fragen.
Die SDK habe ich mir vorhin mal angeschaut und so langsam kommt hier Licht ins Dunkel :D
 
J

Joker45

Fortgeschrittenes Mitglied
Na wer sagt es denn... Habs hinbekommen :)

Aber ich fürchte ich hab auch Mist gebaut. :o

Und zwar habe ich mich so eifrig an die Anleitung: http://forum.xda-developers.com/showthread.php?t=468959

gehalten dass ich nun natürlich alle apps verschoben habe.

Code:
busybox cp -a /data/app /system/sd
 rm -r /data/app
 ln -s /system/sd/app /data/app

 busybox cp -a /data/app-private /system/sd/app-private
 rm -r /data/app-private
 ln -s /system/sd/app-private /data/app-private
Jedenfalls sind nun 21 MB der ext2 Partition belegt.

Du hast geschrieben das es Apps gibt, welche damit Probleme machen. Welche sind denn da bekannt?

Hintergrund der Frage: Mache ich es Rückgängig und schiebe alles zurück auf den Telefonspeicher oder schiebe ich einfach nur die Problemfälle bei Bedarf zurück.
 
J

Joker45

Fortgeschrittenes Mitglied
Ich ziehe meine obige Frage zurück. Alle Apps zu verschieben ist absolut unsinnig und macht das G1 instabil.

Wenn ich nun App für App teste und feststelle das ein App auf der SD Karte nicht läuft, wie müsste dann der Code aussehen um das Verschieben rückgängig zu machen?

Vielen Dank!!

Joker
 
Autarkis

Autarkis

Experte
Joker45 schrieb:
Ich ziehe meine obige Frage zurück. Alle Apps zu verschieben ist absolut unsinnig und macht das G1 instabil.

Wenn ich nun App für App teste und feststelle das ein App auf der SD Karte nicht läuft, wie müsste dann der Code aussehen um das Verschieben rückgängig zu machen?
Einfachste Lösung - deinstallieren und neu installieren. :)

(Nur für meinen Code - um das Verschieben aller Apps rückgängig zu machen, musst du die Anleitung auf XDA-Devs bemühen die ich oben verlinkt habe.)
 
J

Joker45

Fortgeschrittenes Mitglied
Alles klar. Da hab ich mal wieder zu kompliziert gedacht ;)

Den Windows-usern kann ich schon einmal eine Kleinigkeit als Dank für die Super Hilfe hier zurück geben.

Diese Batch installiert die Dateien auf dem G1, legt die Sicherungen an und erstellt die notwendigen Ordner.
WICHTIG!!!.. Nur 1 Mal ausführen, da es sonst dazu kommen kann das die Mod Dateien vom G1 die Backupdateien überschreiben.

FirstInstall.bat
Code:
SET /P BK=Pfad zum Backupordner z.B. C:\backup =
SET /P MOD=Pfad zu Modscripts z.B. C:\mvapp\PARTIAL_APPS_ON_SDCARD\mod_scripts =
adb remount
adb pull /system/etc/mountd.conf %BK%
adb pull /system/init.rc %BK%
adb remount
adb shell mkdir /system/sd
adb shell ls /system
pause
adb shell mkdir /system/sd/app
adb shell mkdir /system/sd/data
adb shell ls /system/sd
pause
adb push %MOD%/mountd.conf /system/etc/mountd.conf
adb push %MOD%/init.rc /system/init.rc
pause
exit
Erklärung:

SET /P BK=Pfad zum Backupordner z.B. C:\backup = ###Backuppfad
SET /P MOD=Pfad zu Modscripts z.B. C:\mvapp\PARTIAL_APPS_ON_SDCARD\mod_scripts = ## Pfad zu den mod-scripts
adb remount
adb pull /system/etc/mountd.conf %BK%
adb pull /system/init.rc %BK%
adb remount
adb shell mkdir /system/sd
adb shell ls /system
pause ## überprüfen ob Ordner SD angelegt wurde
adb shell mkdir /system/sd/app
adb shell mkdir /system/sd/data
adb shell ls /system/sd
pause ## überprüfen ob Ordner app und data angelegt wurden
adb push %MOD%/mountd.conf /system/etc/mountd.conf
adb push %MOD%/init.rc /system/init.rc
pause
exit

Fortsetzung folgt :D


Gruß

Joker
 
J

Joker45

Fortgeschrittenes Mitglied
In diesem Script muss noch ein Fehler sein (wie schon auf der ersten Seite vermutet)

Code:
adb remount
adb shell busybox df -h
pause
adb shell mkdir /system/sd/app  ### zur Sicherheit
adb shell mkdir /system/sd/data ### zur Sicherheit
adb remount ### zur Sicherheit
adb shell ls -laS /data/app/
SET /P app=Appname eingeben. z.b.:com.glu.android.bgd.
adb shell cp -rp /data/app/%app%.apk /system/sd/app/%app%.apk
adb shell rm /data/app/%app%.apk
adb shell ln -s /system/sd/app/%app%.apk /data/app/%app%.apk
adb shell cp -rp /data/data/%app% /system/sd/data/%app%
adb shell rm -r /data/data/%app% 
adb shell ln -s /system/sd/data/%app% /data/data/%app%
pause
Läuft fehlerfrei durch:
Code:
C:\Users\Joker\Desktop\Neuer Ordner (6)>adb shell busybox df -h
Filesystem                Size      Used Available Use% Mounted on
tmpfs                    48.4M         0     48.4M   0% /dev
tmpfs                     4.0M         0      4.0M   0% /sqlite_stmt_journals
/dev/block/mtdblock3     67.5M     63.6M      3.9M  94% /system
/dev/block/loop0          1.5M      1.5M         0 100% /system/modules
/dev/block/loop1          3.1M      3.1M         0 100% /system/xbin
/dev/mmcblk0p2            1.2G    107.0K      1.1G   0% /system/sd
/dev/block/mtdblock5     74.8M     10.4M     64.4M  14% /data
/dev/block/mtdblock4     67.5M      1.1M     66.4M   2% /cache
/dev/block/mmcblk0p1      6.1G     57.3M      6.1G   1% /sdcard

C:\Users\Joker\Desktop\Neuer Ordner (6)>pause
Drücken Sie eine beliebige Taste . . .

C:\Users\Joker\Desktop\Neuer Ordner (6)>adb shell mkdir /system/sd/app
mkdir failed for /system/sd/app, File exists

C:\Users\Joker\Desktop\Neuer Ordner (6)>adb shell mkdir /system/sd/data
mkdir failed for /system/sd/data, File exists

C:\Users\Joker\Desktop\Neuer Ordner (6)>adb remount
remount succeeded

C:\Users\Joker\Desktop\Neuer Ordner (6)>adb shell ls -laS /data/app/
-rw-r--r--    1 1000     1000      6359142 Apr 22 23:55 com.glu.android.bgd.apk
-rw-r--r--    1 1000     1000        90767 Apr 23 00:23 mobi.androidtunes.apk
-rw-r--r--    1 1000     1000        32736 Apr 22 23:08 com.eoemobile.app_instal
l.apk
drwxrwx--x    1 1000     1000         2048 Apr 22 22:07 .
drwxrwx--x    1 1000     1000         2048 Apr 22 22:07 ..
lrwxrwxrwx    1 0        0              34 Apr 23 00:20 lutey.FTPServer.apk -> /
system/sd/app/lutey.FTPServer.apk

C:\Users\Joker\Desktop\Neuer Ordner (6)>SET /P app=Appname eingeben. z.b.:com.gl
u.android.bgd.
Appname eingeben. z.b.:com.glu.android.bgd.mobi.androidtunes

C:\Users\Joker\Desktop\Neuer Ordner (6)>adb shell cp -rp /data/app/mobi.androidt
unes.apk /system/sd/app/mobi.androidtunes.apk

C:\Users\Joker\Desktop\Neuer Ordner (6)>adb shell rm /data/app/mobi.androidtunes
.apk

C:\Users\Joker\Desktop\Neuer Ordner (6)>adb shell ln -s /system/sd/app/mobi.andr
oidtunes.apk /data/app/mobi.androidtunes.apk

C:\Users\Joker\Desktop\Neuer Ordner (6)>adb shell cp -rp /data/data/mobi.android
tunes /system/sd/data/mobi.androidtunes

C:\Users\Joker\Desktop\Neuer Ordner (6)>adb shell rm -r /data/data/mobi.androidt
unes

C:\Users\Joker\Desktop\Neuer Ordner (6)>adb shell ln -s /system/sd/data/mobi.and
roidtunes /data/data/mobi.androidtunes
Doch dann ist das app einfach weg. Also kein Starticon und auch kein Eintrag in den Aplikationen (zum deinstallieren)

Eine Idee wo hier der Fehler liegt?
 
J

Joker45

Fortgeschrittenes Mitglied
Also jeder meiner versuche ein App zu verschieben ist gescheitert.
Nach Eingabe der Befehler gibt es keine Fehlermeldungen. Danach ist jedoch das Programm einfach weg. Nachinstallieren endet mit Fehlern und uninstall ist nicht möglich, da das App nirgends auftaucht.

Ja, liet sich wie ein Doppelpost, doch dies meine ich nun unabhängig vom obigen Script. Also auch mit den Befehlen aus dem ersten Beitrag.

Wichtig: Ich versuche dies via Win.Vista.

Kann mir jemand mitteilen mit welchen Befehlszeilen er erfolgreich unter Windows die Apps verschiebt.

Vermute ich habe einen einfachen Fehler, den ich jedoch einfach nicht finde.

Danke für die Hilfe

Gruß

Joker
 
H

Hendrik

Ambitioniertes Mitglied
Hallo Joker45,
ah du hast den gleichen Fehler wie ich;)

Habe leider auch noch keine Lösung gefunden.
Die APK Datei wird verschoben, der Link wird anscheinend auch richtig gesetzt. (Taucht beim Befehl adb shell ls -laS /data/app/ ganz unten auf und verweist auch richtig auf das /system/sd/app Verzeichnis)
Aber das Programm ist danach einfach weg.