Estou tentando extrair o arquivo APK de um aplicativo Android instalado SEM permissões de root.
Eu pensei que isso era impossível, porque todos os arquivos APK para aplicativos que não são do sistema estão localizados em / data / app e o acesso a essa pasta requer permissão de root. Descobri que existem vários aplicativos na loja do Google Play que parecem ter acesso aos arquivos APK, mesmo em dispositivos não-rooteados.
Alguém pode me dizer como isso é possível? Não existem aplicativos de backup que fazem backup dos arquivos APK sem raiz?
Respostas:
O acesso a / data / app é possível sem permissão de root; as permissões nesse diretório são rwxrwx - x. Executar permissão em um diretório significa que você pode acessá-lo; no entanto, a falta de permissão de leitura significa que você não pode obter uma lista de seu conteúdo - portanto, para acessá-lo, você deve saber o nome do arquivo que estará acessando. O gerenciador de pacotes do Android informará o nome do apk armazenado para um determinado pacote.
Para fazer isso na linha de comando, use
adb shell pm list packages
para obter a lista de pacotes instalados e encontrar o pacote desejado.Com o nome do pacote, podemos obter o nome do arquivo e a localização reais do APK usando
adb shell pm path your-package-name
.E, conhecendo o diretório completo, podemos finalmente obter o adb usando
adb pull full/directory/of/the.apk
Agradecemos a @tarn por apontar que, em Lollipop, o caminho do apk será
/data/app/your-package-name-1/base.apk
fonte
adb shell pm list packages
para obter a lista de pacotes instalados, escolha o pacote desejado, inclua-1.apk
-o e retire-o/data/app
. Exemplo: Se o nome do pacote fororg.mozilla.firefox
, useadb pull /data/app/org.mozilla.firefox-1.apk
.adb: error: remote object '/data/app/com.Slack-1/base.apk' does not exist
O Android anexa um número de sequência ao nome do pacote para produzir o nome do arquivo APK final (é possível que isso varie com a versão do sistema operacional Android). A seguinte sequência de comandos funciona em um dispositivo não raiz :
Obtenha o nome completo do caminho do arquivo APK para o pacote desejado.
Isto dá a saída como:
package:/data/app/com.example.someapp-2.apk
.Puxe o arquivo APK do dispositivo Android para a caixa de desenvolvimento.
A localização do APK após puxar com sucesso será em ../sdk/platform-tools/base.apk no seu PC / laptop.
fonte
Você não precisa de permissões de raiz para obter a lista de aplicativos instalados.
Você pode fazer isso com o PackageManager do Android.
Abaixo está um pequeno trecho de código.
fonte
fonte
Quando você tem o desenvolvimento do Eclipse para Android instalado:
fonte
No Nougat (7.0), a versão Android é executada
adb shell pm list packages
para listar os pacotes instalados no dispositivo. Em seguida, corraadb shell pm path your-package-name
para mostrar o caminho do apk. Depois de usar adb para copiar o pacote para downloadsadb shell cp /data/app/com.test-1/base.apk /storage/emulated/0/Download
. Em seguida, puxe o apk de Downloads para sua máquina executandoadb pull /storage/emulated/0/Download/base.apk
.fonte
eu tenho um
does not exist error
Aqui está como eu faço funcionar:
fonte
List PackageManager.getInstalledApplications () fornecerá uma lista dos aplicativos instalados, e ApplicationInfo.sourceDir é o caminho para o arquivo .apk.
fonte
Encontrei uma maneira de obter o nome do pacote do APK em um dispositivo não raiz. não é tão elegante, mas funciona o tempo todo.
Etapa 1 : no seu dispositivo, abra o APK de destino
Etapa 2 : na janela cmd do PC, digite estes comandos:
Como a saída desse comando é numerosa, é recomendado o redirecionamento para um arquivo.
Etapa 3 : abra este arquivo dump.txt com qualquer editor.
para o dispositivo antes do Android 4.4:
o início do arquivo seria assim:
o nome do pacote está na terceira linha, com.tencent.mm para este exemplo.
para Android 4.4 e posterior:
a saída do dumpsys mudou um pouco. tente pesquisar "Stack # 1", o nome do pacote estaria muito próximo abaixo dele.
Além disso, procure "baseDir", você encontrará o caminho completo do arquivo apk!
fonte
Abra o ES explorer -> pressione o botão Menu no canto superior esquerdo (três faixas horizontais) -> na seção Bibliotecas, escolha APPs.
Assim, você obtém a lista de todos os aplicativos do usuário. Encontre seu aplicativo e selecione-o pressionando-o por muito tempo. Em seguida, pressione "Mais" no canto inferior direito e escolha "Enviar". Então você pode usar opções diferentes, por exemplo, você pode escolher "ES Save To" para salvar o arquivo .apk no diretório inicial ou em qualquer outro lugar.
fonte
Ou você pode obter 'Bluetooth File Transfer' no Google Play e definir a pasta pessoal como
/system/
. Então você pode até ir para/
.fonte