Déplacement de l'emplacement d'installation sur un appareil Android 5 Lollipop non rooté


12

J'ai un Moto G (2e génération) avec Android 5.02 dessus. La carte SD interne est d'environ 8 Go et j'ai une carte SD externe avec 16 Go d'espace libre.

Déplacer l'application vers SDCARD à partir du menu de l'application la déplace vers sdcard0 qui est la carte SD interne.

Commande shell adb:

pm get-install-location

Donne moi:

0[auto]

J'ai essayé de définir l'emplacement d'installation via:

pm set-install-location 2

Mais je reçois cette erreur:

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

C'est, je crois, se plaindre des autorisations root.

Et parce que c'est une construction de production qui essaie:

adb root

Donne moi:

 adbd cannot run as root in production builds

Existe-t-il un moyen de configurer les applications pour installer leurs données sur une carte SD externe?

PS: je ne veux pas installer une rom personnalisée ou installer un logiciel tiers pour rooter le téléphone.

Edit: j'ai remarqué que les données des applications étaient stockées dans le dossier /storage/sdcard0/Android, j'ai donc pensé à déplacer ce dossier vers /storage/sdcard1/et à créer un lien symbolique de cette façon à la place:

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

est-ce que cela fera l'affaire?

Je vous remercie.

Réponses:


10

Fondamentalement, vous ne pouvez pas. Du moins pas sans enracinement .
Les principales raisons pour lesquelles Android ne vous permet pas d'installer une application sur votre carte SD externe sont:

  1. Sécurité : C'est la principale raison de cette restriction. Les systèmes de fichiers de base comme NTFS ou FAT (toute version de celui-ci) ne permettent pas la gestion des autorisations de type Unix.
    Cela signifie que n'importe quelle application pourrait écrire dans n'importe quel fichier de ce stockage.
    En pensant aux applications malveillantes, ils pourraient remplacer les applications appropriées par de fausses / infectées, brickant votre téléphone et le rendant inutilisable.

  2. Stockage volatil : votre carte SD externe n'est pas sûre d'être insérée dans votre appareil tout le temps. Vous pouvez l'éjecter à tout moment, ce qui fait de votre carte SD un mauvais candidat pour un stockage permanent. Considérez les applications qui s'exécutent sur votre carte SD et vous l'éjectez. Ces applications se bloqueront et toutes les autres applications enregistrées sur votre carte SD auront également disparu. Vous ne pouvez pas les utiliser à ce moment-là et les données de ces applications sont également affectées par la raison n ° 1.


J'ai un arrière-plan Linux, j'ai donc envisagé cette approche: j'ai remarqué que l'option de menu de l'application "Déplacer vers SDCARD" a créé un dossier appelé Android sur sdcard0 (celui interne) avec des données d'application; la création d'un lien symbolique (dans sdcard0) appelé Android vers un dossier appelé Android dans sdcard1 fonctionnera-t-elle?
pr.nizar

La question est: Android stocke seulement l' application des données et OBB dans /sdcard/sdcard0/Android. Les applications sont stockées dans un dossier caché appelé .android_secureoù il n'a même pas rootaccès (je l'ai testé sur mon appareil, vous ne pouvez même pas accéder cdà ce dossier).
GiantTree

En fait, c'est précisément ce dont j'ai besoin! Le principal problème qui me fait penser à cela, ce sont les données, en particulier avec les jeux lourds. Les principales applications ne sont pas si grandes par rapport aux données qu'elles ajoutent plus tard. Vous pensez donc que cela pourrait fonctionner?
pr.nizar

S'il ne s'agit que de données ou d'obb, cela fonctionne certainement. Au moins sur les versions Android qui ne font pas sdcard_rwpartie du rootgroupe ou ne présentent pas du sdcard_rwtout l'utilisateur . Mais avec un peu de changements de permission, vous devriez pouvoir faire le tri.
GiantTree du

La course ls -l /storage/sdcard0m'a donné ceci lrwxrwxrwx root root 2015-04-20 15:59 sdcard0 -> /storage/emulated/legacyet la course ls -l /storage/sdcard0/m'a donné ceci drwxrwx--x root sdcard_r 2014-12-20 18:16 Android. Est-ce une bonne ou une mauvaise nouvelle? Comme je ne suis pas root, je pense que je ne peux pas définir d'autorisations.
pr.nizar

6

Fondamentalement, vous le pouvez! ;)

  • Tout d'abord, rootez votre téléphone!
  • Deuxièmement, créez une partition secondaire dans votre carte SD (Ext.4)> = 2 Go et définissez-la comme principale.
  • Troisièmement, téléchargez et installez l'application Link2sd à partir de Playstore. Ouvrez l'application et je vous demanderai de créer un point de montage sur votre 2ème partition. Sélectionnez Oui. Redémarrez.

Après le redémarrage, CHAQUE application que vous installez ira automatiquement sur la carte SD.

Si vous ne savez pas comment créer une recherche de partition pour un guide dans Google, il y en a beaucoup


C'est en fait ce que j'essaie d'éviter: l'installation de logiciels tiers. :-)
pr.nizar

4

Ce fut tout un voyage à la recherche d'une réponse n'impliquant pas l'enracinement, mais j'ai fini par:

  1. Déverrouiller mon chargeur de démarrage

  2. Démarrage sur TWRP sans l'installer:

    fastboot boot recovery.img
    
  3. Installation du SuperSU de Chainfire avec TWRP .

  4. Depuis l' émulateur de terminal ou le shell d' Adb :

    su
    pm set-install-location 2
    
  5. À partir du menu d'une application, il Settings > Applicationssuffit de la Move to SDCARDdéplacer * - ses données et son obb - vers la carte SDC externe.

  6. Suppression de SuperSU ......

Racine complète

Non ... je n'ai pas fait ça! 3 :)


0

Accédez à cette adresse http://developer.android.com/tools/help/shell.html#shellcommands

Android 5 et supérieur ne prend pas en charge cette fonctionnalité pm get-install-location

Essayez de sauvegarder votre apk et suivez les étapes ci-dessous

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

Exemple

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

-r signifie réinstaller apk avec les données existantes et -s signifie sdcard


" Android 5 et supérieur ne prend pas en charge cet emplacement get-install-pm " - comment le savez-vous? Essayez ceci: android.googlesource.com/platform/frameworks/base/+/… . C'est pour Android 5.1.1. J'ai un support pour cet argument dans mon Android 5.0.2, 5.1.1 et 6.0.1!
Firelord

Désolé, mais -ssert à spécifier sur quel appareil doit fonctionner adb (" -s <serialNumber>").
Krzysztof Bociurko

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.