Verschieben des Installationsorts auf einem nicht gerooteten Android 5 Lollipop-Gerät

Ich habe ein Moto G (2. Generation) mit Android 5.02 drauf. Die interne SD-Karte hat etwa 8 GB und ich habe eine externe SD-Karte mit 16 GB freiem Speicherplatz.

Wenn Sie die Anwendung aus dem Menü der Anwendung auf SDCARD verschieben, wird sie auf sdcard0 verschoben, die die interne SD-Karte ist.

Adb-Shell-Befehl:

pm get-install-location

gibt mir:

0[auto]

Ich habe versucht, den Installationsort festzulegen über:

pm set-install-location 2

Aber ich bekomme diesen Fehler:

Error: java.lang.SecurityException: Package android does not belong to 2000

Das heißt, ich beschwere mich über Root-Berechtigungen.

Und weil es sich um einen Produktions-Build-Versuch handelt:

adb root

gibt mir:

 adbd cannot run as root in production builds

Gibt es eine Möglichkeit, die Anwendungen so einzustellen, dass sie ihre Daten auf einer externen SD-Karte installieren?

PS: Ich möchte kein benutzerdefiniertes Rom installieren oder Software von Drittanbietern installieren, um das Telefon zu rooten.

Bearbeiten: Mir ist aufgefallen, dass Anwendungsdaten im Ordner gespeichert wurden /storage/sdcard0/Android, also dachte ich daran, diesen Ordner zu verschieben /storage/sdcard1/und stattdessen einen Symlink auf diese Weise zu erstellen:

ln -s /storage/sdcard1/Android /storage/sdcard0/Android

wird dies die Arbeit tun?

Danke dir.

Antworten (5)

Grundsätzlich gilt: Das geht nicht. Zumindest nicht ohne rooten .
Die Hauptgründe, warum Android Ihnen nicht erlaubt, eine Anwendung auf Ihrer externen SD-Karte zu installieren, sind:

  1. Sicherheit : Dies ist der Hauptgrund für diese Einschränkung. Grundlegende Dateisysteme wie NTFS oder FAT (jede Version davon) erlauben keine Unix-ähnliche Berechtigungsverwaltung.
    Das bedeutet: Jede Anwendung könnte in jede Datei auf diesem Speicher schreiben.
    Wenn sie an bösartige Apps denken, wären sie in der Lage, richtige Apps durch gefälschte/infizierte zu ersetzen, Ihr Telefon zu mauern und es unbrauchbar zu machen.

  2. Flüchtiger Speicher : Ihre externe SD-Karte kann nicht immer in Ihr Gerät eingelegt werden. Sie können sie jederzeit auswerfen, was Ihre SD-Karte zu keinem guten Kandidaten für eine dauerhafte Speicherung macht. Betrachten Sie Apps, die von Ihrer SD-Karte ausgeführt werden, und werfen Sie sie aus. Diese Apps stürzen einfach ab und alle anderen Apps, die auf Ihrer SD-Karte gespeichert sind, sind ebenfalls weg. Sie können sie zu diesem Zeitpunkt nicht verwenden und die Daten dieser App sind ebenfalls von Grund Nr. 1 betroffen.

Ich habe einen Linux-Hintergrund, also habe ich diesen Ansatz in Betracht gezogen: Ich habe bemerkt, dass die Menüoption "Auf SDCARD verschieben" der Anwendung einen Ordner namens Android auf sdcard0 (dem internen) mit Anwendungsdaten darauf erstellt hat; funktioniert das Erstellen eines Symlinks (in sdcard0) namens Android zu einem Ordner namens Android in sdcard1?
Das Problem ist: Android speichert nur Anwendungsdaten und obb in /sdcard/sdcard0/Android. Anwendungen werden in einem versteckten Ordner namens gespeichert, auf den .android_securenicht einmal rootZugriff besteht (ich habe es auf meinem Gerät getestet, Sie können nicht einmal cdauf diesen Ordner zugreifen).
Eigentlich brauche ich genau das! Das Hauptproblem, das mich dazu veranlasst, darüber nachzudenken, sind die Daten, insbesondere bei schweren Spielen. Die Hauptanwendungen sind im Vergleich zu den Daten, die sie später hinzufügen, nicht so groß. Du denkst also, es könnte funktionieren?
Wenn es nur Daten oder Obb sind , dann funktioniert es auf jeden Fall. Zumindest auf Android-Versionen, die nicht sdcard_rwzur rootGruppe gehören oder den Benutzer sdcard_rwüberhaupt enthalten. Aber mit ein paar Berechtigungsänderungen sollten Sie das in Ordnung bringen können.
Laufen ls -l /storage/sdcard0hat mir das gegeben lrwxrwxrwx root root 2015-04-20 15:59 sdcard0 -> /storage/emulated/legacyund Laufen ls -l /storage/sdcard0/hat mir das gegeben drwxrwx--x root sdcard_r 2014-12-20 18:16 Android.. Ist das eine gute oder schlechte Nachricht? Da ich kein Root bin, kann ich glaube ich keine Berechtigungen setzen.
Das erste Ergebnis war vorhersehbar, Ihre interne SD-Karte befindet sich tatsächlich bei /data/media, wo storage/emulated/legacyauf zeigt. Das andere Ergebnis ist eine "einfache Lösung": Zuerst müssen Sie den ursprünglichen AndroidOrdner an einen anderen Ort verschieben oder umbenennen, um Platz für den Symlink zu schaffen. Verlinken Sie dann /storage/sdcard1/Androidauf /storage/sdcard0/Androidund benennen Sie den Link Android. Endlich alle Berechtigungen reparieren (777). Dies ist nur theoretisch, aber ich stelle mir vor, dass es so funktionieren sollte.
Ich teste es gerade. cp -R /storage/sdcard0/Android /storage/sdcard1/(zu wackelig über das mvlol) dann rm -r /storage/sdcard0/Androiddann ln -s /storage/sdcard1/Android /storage/sdcard0/Android. Wenn dies funktioniert, geht die Gutschrift an Sie, sodass Sie Ihre Antwort aktualisieren können. Ich lasse es dich wissen! ;-)
Wenn Sie es nicht entfernen Android, werden alle laufenden Apps (oder zumindest die meisten von ihnen) beschädigt. Es ist nur ein theoretischer Ansatz aus meinem Kopf; nichts genau zu folgen. Wenn Sie schnell genug sind, können Sie möglicherweise Apps nach einem Absturz wiederherstellen, aber denken Sie daran, dass alle Aktionen nach dem nächsten Neustart rückgängig gemacht werden.
Ja! Es hat sich alles aufgelöst! lol Ich konnte keinen Symlink erstellen: Es gab mir den Fehler ln: /storage/sdcard0/Android: Operation not permitted. Die nächste Frage ist also, wie man einen Symlink erstellt. (Ich habe meine Änderungen rückgängig gemacht und alles ist in Ordnung. Zumindest denke ich das jetzt! lol)
Das Hauptproblem ist: Android verfolgt Dateizugriffe und wenn einer der AndroidOrdner fehlt, erstellt es ihn einen Moment später neu. Aus diesem Grund verknüpfen Anwendungen wie Link2SD auch die Ordner einzelner Apps und nicht den gesamten AndroidOrdner. Sie können das versuchen, aber ich kann keinen Erfolg versprechen.
Das ist ziemlich interessant, weil ich ein Problem mit nur einem Datenordner eines Spiels habe (das 2 GB belegt). Ich werde das versuchen und berichten. Danke dir. PS: Link2SD hat in meinem Fall nichts bewirkt.
So hat Link2SD das letzte Mal funktioniert, als ich es benutzt habe. Ich brauche es nicht mehr, da mein Speicherplatz ausreicht :)
Ich konnte keinen einzigen Symlink erstellen. ( Operation not permitted). Ich glaube, es liegt einfach daran, dass meine sdcard1Fat32-formatiert ist. Wie soll ich es formatieren (ich meine seine Hauptpartition)?
Sie können einen Symlink zu einem beliebigen Ort erstellen, das Ziel spielt keine Rolle (auch wenn fuseSie möglicherweise keinen Symlink zu Ihrer externen SD-Karte erstellen können). Versuchen Sie nach Möglichkeit, Ihre SD-Karte ext4so zu formatieren, dass Berechtigungen angewendet werden können, ohne fuseeinen zwischengeschalteten Berechtigungsmanager zu verwenden, der die meisten Lese- und Schreibversuche ohne ordnungsgemäße Paketberechtigung blockiert.
Ich konnte ext4 nicht verwenden, da mein Telefon es nicht erkannte und w95 fat32 LBA behielt (Kernel-Problem?!). Ich konnte aus vielen Gründen auch keine Symlinks erstellen: Nicht-Root (?!), Fat32-Problem.. Jetzt Ich glaube, ich werde Option B nehmen.. ^^
Kann nur rootSymlinks erstellen. Merk dir das.

Grundsätzlich darfst du! ;)

  • Rooten Sie zuerst Ihr Telefon!
  • Zweitens: Erstellen Sie eine sekundäre Partition auf Ihrer SD-Karte (Ext.4) >= 2 GB und legen Sie sie als primär fest.
  • Drittens, laden Sie die Link2sd-App aus dem Playstore herunter und installieren Sie sie. Öffnen Sie die App, und ich werde Sie bitten, einen Einhängepunkt für Ihre 2. Partition zu erstellen. Wählen Sie Ja aus. Neustart.

Nach dem Neustart wird JEDE App, die Sie installieren, automatisch auf die SD-Karte verschoben.

Wenn Sie nicht wissen, wie Sie eine Partitionssuche für eine Anleitung in Google erstellen, gibt es viele davon

Das versuche ich eigentlich zu vermeiden: die Installation von Software von Drittanbietern. :-)

Das war eine ziemliche Reise auf der Suche nach einer Antwort, die kein Rooten beinhaltete, aber am Ende kam ich zu folgendem:

  1. Meinen Bootloader entsperren

  2. Booten auf TWRP ohne es zu installieren:

    fastboot boot recovery.img
    
  3. Installation von Chainfires SuperSU mit TWRP.

  4. Vom Terminal-Emulator oder der Shell von adb :

    su
    pm set-install-location 2
    
  5. Aus dem Menü einer Anwendung bewegt es sich durch einfaches Settings > ApplicationsDrücken * - seine Daten und obb - auf die externe SDCARD.Move to SDCARD

  6. SuperSU entfernen......

Vollständig entrooten

Nein ... das habe ich nicht getan! 3:)

Gehen Sie zu dieser Adresse http://developer.android.com/tools/help/shell.html#shellcommands

Android 5 und höher unterstützt dies nichtpm get-install-location

Versuchen Sie, Ihre apk zu sichern und folgen Sie den unten stehenden Schritten

adb shell pm install -r -s <path of your apk>

Beispiel

adb shell pm install -r -s /storage/sdcard1/base.apk

-r bedeutet APK mit vorhandenen Daten neu installieren und -s bedeutet SD-Karte

Android 5 und höher unterstützt diesen pm-Get-Install-Speicherort nicht “ – woher weißt du das? Versuchen Sie Folgendes: android.googlesource.com/platform/frameworks/base/+/… . Es ist für Android 5.1.1. Ich habe Unterstützung für dieses Argument in meinem Android 5.0.2, 5.1.1 und 6.0.1!
Entschuldigung, aber -sdient zur Angabe, auf welchem ​​​​Gerät adb ausgeführt werden soll (" -s <serialNumber>").

Installieren Sie zuerst Adbd unsicher ( apk-Download von xda-developers ).

Sobald es auf Ihrem Gerät installiert ist, öffnen Sie es und markieren Sie das Kästchen: „Enable insecure adbd“.

Jetzt können Sie den Speicherort ändern, um Ihre Apps zu installieren.