Movendo o local da instalação no dispositivo Android 5 Lollipop não raiz

12

Eu tenho um Moto G (2ª geração) com Android 5.02. O cartão SD interno tem cerca de 8 GB e eu tenho um cartão SD externo com 16 GB de espaço livre.

Mover o aplicativo para SDCARD no menu do aplicativo o move para sdcard0, que é o cartão SD interno.

Comando shell ADB:

pm get-install-location

me dá:

0[auto]

Tentei definir o local da instalação através de:

pm set-install-location 2

Mas estou recebendo este erro:

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

Acredito que esteja reclamando das permissões de root.

E porque é uma construção de produção tentando:

adb root

me dá:

 adbd cannot run as root in production builds

Existe alguma maneira de definir os aplicativos para instalar seus dados no cartão SD externo?

PS: Não quero instalar uma ROM personalizada ou instalar software de terceiros para fazer root no telefone.

Editar: notei que os dados dos aplicativos foram armazenados na pasta /storage/sdcard0/Android, então pensei em mover essa pasta para /storage/sdcard1/e criar um link simbólico dessa maneira:

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

isso fará o trabalho?

Obrigado.

pr.nizar
fonte

Respostas:

10

Basicamente falando: você não pode. Pelo menos não sem torcer .
Os principais motivos pelos quais o Android não permite a instalação de um aplicativo no seu cartão SD externo são:

  1. Segurança : é o principal motivo dessa restrição. Sistemas de arquivos básicos como NTFS ou FAT (qualquer versão dele) não permitem o gerenciamento de permissões do tipo Unix.
    Isso significa: qualquer aplicativo poderá gravar em qualquer arquivo desse armazenamento.
    Pensando em aplicativos mal-intencionados, eles poderiam substituir aplicativos adequados por falsos / infectados, bloquear o telefone e inutilizá-lo.

  2. Armazenamento volátil : seu cartão SD externo não é seguro para ser inserido no seu dispositivo o tempo todo. Você é capaz de ejetar a qualquer momento o que faz com que seu cartão SD não seja um bom candidato para um armazenamento permanente. Considere os aplicativos que executam fora do seu cartão SD e você o ejeta. Esses aplicativos travam e todos os outros aplicativos salvos no cartão SD também desaparecem. Você não pode usá-los naquele momento e os dados desse aplicativo também são afetados pelo motivo 1.

GiantTree
fonte
Eu tenho um background linux, então considerei essa abordagem: notei que a opção de menu do aplicativo "Mover para SDCARD" criou uma pasta chamada Android no sdcard0 (o interno) com os dados dos aplicativos; criar um link simbólico (em sdcard0) chamado Android para uma pasta chamada Android em sdcard1 funcionará?
precisa saber é o seguinte
A questão é: só armazena Android aplicações de dados e OBB em /sdcard/sdcard0/Android. Os aplicativos são armazenados em uma pasta oculta chamada .android_secureonde nem sequer roottem acesso (eu testei no meu dispositivo, você não pode nem mesmo cdnessa pasta).
GiantTree
Na verdade, é exatamente disso que eu preciso! O principal problema para me fazer pensar nisso são os dados, especialmente em jogos pesados. Os aplicativos principais não são tão grandes em comparação com os dados que eles adicionam posteriormente. Então você acha que pode funcionar?
precisa saber é o seguinte
Se são apenas dados ou obb , certamente funciona. Pelo menos nas versões do Android que não sdcard_rwpertencem ao rootgrupo ou que apresentam o usuário sdcard_rw. Porém, com algumas alterações de permissão, você poderá resolver isso.
GiantTree
Correr ls -l /storage/sdcard0me deu isso lrwxrwxrwx root root 2015-04-20 15:59 sdcard0 -> /storage/emulated/legacye correr ls -l /storage/sdcard0/me deu isso drwxrwx--x root sdcard_r 2014-12-20 18:16 Android. Essa é uma notícia boa ou ruim? Como não sou root, acredito que não posso definir permissões.
precisa saber é o seguinte
6

Basicamente você pode! ;)

  • Primeiro, faça root no seu telefone!
  • Segundo, crie uma partição secundária no seu cartão SD (Ext.4)> = 2 GB e defina-a como principal.
  • Terceiro, baixe e instale o aplicativo Link2sd do playstore. Abra o aplicativo e pedirei que você crie um ponto de montagem na sua 2ª partição. Selecione Sim. Reinicie.

Após a reinicialização, TODOS os aplicativos que você instalar irão automaticamente para o cartão SD.

Se você não sabe como criar uma pesquisa de partições para um guia no Google, existem muitas

Kanellis
fonte
Na verdade, é isso que estou tentando evitar: instalar software de terceiros. :-)
pr.nizar
4

Foi uma jornada e tanto, procurando uma resposta que não envolvesse enraizamento, mas acabei:

  1. Desbloqueando meu gerenciador de inicialização

  2. Inicializando no TWRP sem instalá-lo:

    fastboot boot recovery.img
    
  3. Instalando o SuperSU da Chainfire com TWRP.

  4. No Emulador de Terminal ou no shell do adb :

    su
    pm set-install-location 2
    
  5. Do menu de um aplicativo, Settings > Applicationsbasta pressionar o botão Move to SDCARD* - seus dados e obb - para o SDCARD externo.

  6. Removendo o SuperSU ......

Raiz completa

Nah ... eu não fiz isso! 3 :)

pr.nizar
fonte
0

Vá para este endereço http://developer.android.com/tools/help/shell.html#shellcommands

O Android 5 e superior não suportam isso pm get-install-location

Tente fazer backup do seu apk e siga as etapas abaixo

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

Exemplo

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

-r significa reinstalar apk com dados existentes e -s significa sdcard

Akash Sarkar
fonte
"O Android 5 e superior não suportam este pm get-install-location " - como você sabe? Tente isto: android.googlesource.com/platform/frameworks/base/+/… . É para o Android 5.1.1. Eu tenho suporte para esse argumento no meu Android 5.0.2, 5.1.1 e 6.0.1!
Firelord
Desculpe, mas -sé para especificar em qual dispositivo o adb deve operar (" -s <serialNumber>").
Krzysztof Bociurko
-1

Primeiro instale Adbd inseguro ( apk baixar de xda-developers ).

Depois de instalado no seu dispositivo, abra-o e marque a caixa: "Ativar adbd inseguro".

Agora você pode alterar o local para instalar seus aplicativos.

Jherome
fonte