Mover la ubicación de instalación en un dispositivo Android 5 Lollipop no rooteado

12

Tengo un Moto G (2da generación) con Android 5.02. La tarjeta SD interna es de aproximadamente 8 Gb y tengo una tarjeta SD externa con 16 Gb de espacio libre.

Mover la aplicación a SDCARD desde el menú de la aplicación la mueve a sdcard0, que es la tarjeta SD interna.

Comando de shell Adb:

pm get-install-location

me da

0[auto]

Traté de establecer la ubicación de instalación a través de:

pm set-install-location 2

Pero recibo este error:

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

Es decir, creo quejarse de los permisos de root.

Y porque es una construcción de producción que intenta:

adb root

me da

 adbd cannot run as root in production builds

¿Hay alguna forma de configurar las aplicaciones para instalar sus datos en una tarjeta SD externa?

PD: No quiero instalar una rom personalizada o instalar software de terceros para rootear el teléfono.

Editar: He notado que los datos de las aplicaciones se almacenaron en la carpeta /storage/sdcard0/Android, así que pensé en mover esta carpeta /storage/sdcard1/y crear un enlace simbólico de esta manera:

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

¿hará esto el trabajo?

Gracias.

pr.nizar
fuente

Respuestas:

10

Básicamente hablando: no puedes. Al menos no sin enraizamiento .
Las principales razones por las que Android no le permite instalar una aplicación en su tarjeta SD externa son:

  1. Seguridad : es la razón principal de esa restricción. Los sistemas de archivos básicos como NTFS o FAT (cualquier versión del mismo) no permiten la administración de permisos tipo Unix.
    Esto significa: cualquier aplicación podría escribir en cualquier archivo en ese almacenamiento.
    Pensando en aplicaciones maliciosas, podrían reemplazar las aplicaciones adecuadas con aplicaciones falsas / infectadas, bloqueando su teléfono y dejándolo inutilizable.

  2. Almacenamiento volátil : su tarjeta SD externa no es segura para ser insertada en su dispositivo todo el tiempo. Puede expulsarlo en cualquier momento, lo que hace que su tarjeta SD no sea un buen candidato para un almacenamiento permanente. Considere las aplicaciones que se ejecutan en su tarjeta SD y la expulsa. Esas aplicaciones simplemente se bloquearán y todas las demás aplicaciones guardadas en su tarjeta SD también desaparecerán. No puede usarlos en ese momento y los datos de esas aplicaciones también se ven afectados por la razón # 1.

Árbol Gigante
fuente
Tengo un fondo de Linux, así que he considerado este enfoque: me he dado cuenta de que la opción de menú de la aplicación "Mover a SDCARD" creó una carpeta llamada Android en sdcard0 (la interna) con datos de aplicaciones; ¿Funcionará la creación de un enlace simbólico (en sdcard0) llamado Android a una carpeta llamada Android en sdcard1?
pr.nizar
El problema es: Android almacena solo datos de aplicaciones y obb en /sdcard/sdcard0/Android. Las aplicaciones se almacenan en una carpeta oculta llamada .android_securedonde ni siquiera roottiene acceso (lo probé en mi dispositivo, ni siquiera puedes acceder cda esa carpeta).
GiantTree
¡En realidad eso es precisamente lo que necesito! El principal problema que me hace pensar en esto son los datos, especialmente con los juegos pesados. Las aplicaciones principales no son tan grandes en comparación con los datos que agregan más tarde. ¿Entonces crees que podría funcionar?
pr.nizar
Si solo se trata de datos u obb, entonces ciertamente funciona. Al menos en las versiones de Android que no hacen que sdcard_rwpertenezcan al rootgrupo o que no presenten al usuario sdcard_rwen absoluto. Pero con un poco de cambios de permiso, debería poder resolverlo.
GiantTree
Correr ls -l /storage/sdcard0me dio esto lrwxrwxrwx root root 2015-04-20 15:59 sdcard0 -> /storage/emulated/legacyy correr ls -l /storage/sdcard0/me dio esto drwxrwx--x root sdcard_r 2014-12-20 18:16 Android.. ¿Es una buena o mala noticia? Como no soy root, creo que no puedo establecer permisos.
pr.nizar
6

Básicamente puedes! ;)

  • Primero, ¡ Rootea tu teléfono!
  • Segundo, cree una partición secundaria en su tarjeta SD (Ext.4)> = 2GB y configúrela como primaria.
  • Tercero, descargue e instale la aplicación Link2sd desde la tienda de juegos. Abra la aplicación y le pediré que cree un punto de montaje para su segunda partición. Seleccione Sí Reiniciar.

Después de reiniciar, CADA aplicación que instales irá automáticamente a la tarjeta SD.

Si no sabe cómo crear una partición, busque una guía en Google, hay muchas

Kanellis
fuente
De hecho, eso es lo que estoy tratando de evitar: instalar software de terceros. :-)
pr.nizar
4

Ese fue un gran viaje en busca de una respuesta que no involucrara el enraizamiento, pero terminé:

  1. Desbloqueo de mi gestor de arranque

  2. Arrancar en TWRP sin instalarlo:

    fastboot boot recovery.img
    
  3. Instalación de SuperSU de Chainfire con TWRP.

  4. Desde el emulador de terminal o el shell de adb :

    su
    pm set-install-location 2
    
  5. Desde el menú de una aplicación con Settings > Applicationssolo presionarla, se Move to SDCARDmueve *, sus datos y obb, a la SDCARD externa.

  6. Eliminando SuperSU ......

Desrootear por completo

Nah ... no hice eso! 3 :)

pr.nizar
fuente
0

Vaya a esta dirección http://developer.android.com/tools/help/shell.html#shellcommands

Android 5 y superior no es compatible con esto pm get-install-location

Intente hacer una copia de seguridad de su apk y siga los pasos a continuación

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

Ejemplo

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

-r significa reinstalar apk con los datos existentes y -s significa tarjeta sd

Akash Sarkar
fuente
" Android 5 y superior no son compatibles con esta ubicación get-install-pm ": ¿cómo lo sabe? Pruebe esto: android.googlesource.com/platform/frameworks/base/+/… . Es para Android 5.1.1. ¡Tengo soporte para este argumento en mi Android 5.0.2, 5.1.1 y 6.0.1!
Señor del Fuego
Lo sentimos, pero -ses para especificar en qué dispositivo debe funcionar adb (" -s <serialNumber>").
Krzysztof Bociurko
-1

Primero instale Adbd insecure ( descarga de apk de xda-developers ).

Una vez instalado en su dispositivo, ábralo y marque la casilla: "Habilitar adbd inseguro".

Ahora puede cambiar la ubicación para instalar sus aplicaciones.

Jherome
fuente