1. Möchtest Du unser Team im Android OS-Bereich unterstützen? Details dazu findest du hier!
  2. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

HOWTO Einzelne Anwendungen verschieben (root erforderlich)

Dieses Thema im Forum "Tools" wurde erstellt von Autarkis, 07.03.2009.

  1. Autarkis, 07.03.2009 #1
    Autarkis

    Autarkis Threadstarter Android-Lexikon

    Beiträge:
    1,016
    Erhaltene Danke:
    49
    Registriert seit:
    28.02.2009
    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
      Dateigröße:
      1.1 KB
      Aufrufe:
      100
    Zuletzt von einem Moderator bearbeitet: 21.03.2009
  2. zx128, 07.03.2009 #2
    zx128

    zx128 Android-Lexikon

    Beiträge:
    1,179
    Erhaltene Danke:
    143
    Registriert seit:
    23.01.2009
    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
     
  3. Autarkis, 07.03.2009 #3
    Autarkis

    Autarkis Threadstarter Android-Lexikon

    Beiträge:
    1,016
    Erhaltene Danke:
    49
    Registriert seit:
    28.02.2009
    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: 07.03.2009
  4. Autarkis, 08.03.2009 #4
    Autarkis

    Autarkis Threadstarter Android-Lexikon

    Beiträge:
    1,016
    Erhaltene Danke:
    49
    Registriert seit:
    28.02.2009
    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
    
     
  5. Hendrik, 19.04.2009 #5
    Hendrik

    Hendrik Android-Hilfe.de Mitglied

    Beiträge:
    56
    Erhaltene Danke:
    20
    Registriert seit:
    19.04.2009
    Phone:
    Motorola Milestone
    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?
     
  6. Autarkis, 19.04.2009 #6
    Autarkis

    Autarkis Threadstarter Android-Lexikon

    Beiträge:
    1,016
    Erhaltene Danke:
    49
    Registriert seit:
    28.02.2009
    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.
     
  7. Hendrik, 20.04.2009 #7
    Hendrik

    Hendrik Android-Hilfe.de Mitglied

    Beiträge:
    56
    Erhaltene Danke:
    20
    Registriert seit:
    19.04.2009
    Phone:
    Motorola Milestone
    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?
     
  8. Autarkis, 20.04.2009 #8
    Autarkis

    Autarkis Threadstarter Android-Lexikon

    Beiträge:
    1,016
    Erhaltene Danke:
    49
    Registriert seit:
    28.02.2009
    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.
     
  9. Hendrik, 20.04.2009 #9
    Hendrik

    Hendrik Android-Hilfe.de Mitglied

    Beiträge:
    56
    Erhaltene Danke:
    20
    Registriert seit:
    19.04.2009
    Phone:
    Motorola Milestone
    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.
     
  10. Autarkis, 20.04.2009 #10
    Autarkis

    Autarkis Threadstarter Android-Lexikon

    Beiträge:
    1,016
    Erhaltene Danke:
    49
    Registriert seit:
    28.02.2009
    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.
     
  11. Joker45, 21.04.2009 #11
    Joker45

    Joker45 Android-Hilfe.de Mitglied

    Beiträge:
    123
    Erhaltene Danke:
    1
    Registriert seit:
    12.04.2009
    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
     
  12. Autarkis, 21.04.2009 #12
    Autarkis

    Autarkis Threadstarter Android-Lexikon

    Beiträge:
    1,016
    Erhaltene Danke:
    49
    Registriert seit:
    28.02.2009
    Schon gut. :)

    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.

    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.

    Kurzfassung: SDK runterladen, am G1 USB Debugging einschalten, am USB anschliessen, adb aus dem SDK starten.

    Kein Ding.
     
  13. Joker45, 22.04.2009 #13
    Joker45

    Joker45 Android-Hilfe.de Mitglied

    Beiträge:
    123
    Erhaltene Danke:
    1
    Registriert seit:
    12.04.2009
    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
     
  14. Joker45, 22.04.2009 #14
    Joker45

    Joker45 Android-Hilfe.de Mitglied

    Beiträge:
    123
    Erhaltene Danke:
    1
    Registriert seit:
    12.04.2009
    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.
     
  15. Joker45, 22.04.2009 #15
    Joker45

    Joker45 Android-Hilfe.de Mitglied

    Beiträge:
    123
    Erhaltene Danke:
    1
    Registriert seit:
    12.04.2009
    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
     
  16. Autarkis, 22.04.2009 #16
    Autarkis

    Autarkis Threadstarter Android-Lexikon

    Beiträge:
    1,016
    Erhaltene Danke:
    49
    Registriert seit:
    28.02.2009
    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.)
     
  17. Joker45, 23.04.2009 #17
    Joker45

    Joker45 Android-Hilfe.de Mitglied

    Beiträge:
    123
    Erhaltene Danke:
    1
    Registriert seit:
    12.04.2009
    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
     
  18. Joker45, 23.04.2009 #18
    Joker45

    Joker45 Android-Hilfe.de Mitglied

    Beiträge:
    123
    Erhaltene Danke:
    1
    Registriert seit:
    12.04.2009
    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?
     
  19. Joker45, 23.04.2009 #19
    Joker45

    Joker45 Android-Hilfe.de Mitglied

    Beiträge:
    123
    Erhaltene Danke:
    1
    Registriert seit:
    12.04.2009
    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
     
  20. Hendrik, 23.04.2009 #20
    Hendrik

    Hendrik Android-Hilfe.de Mitglied

    Beiträge:
    56
    Erhaltene Danke:
    20
    Registriert seit:
    19.04.2009
    Phone:
    Motorola Milestone
    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.
     

Diese Seite empfehlen