Pergunta

Como faço para obter o arquivo APK de um dispositivo Android? Ou como faço para transferir o arquivo APK do dispositivo para o sistema?

Foi útil?

Solução

Usar adb. Com Pull adb Você pode copiar arquivos do seu dispositivo para o seu sistema, quando o dispositivo estiver conectado ao USB.

Obviamente, você também precisa das permissões corretas para acessar o diretório em que seu arquivo está. Caso contrário, precisará fazer o root no dispositivo primeiro.


Se você achar que muitos dos APKs são nomeados "base.apk", você também pode usar este comando de uma linha para retirar todos os APKs de um telefone, você pode acessar enquanto renomeia qualquer nome "base.apk" no nome do pacote. Isso também corrige o problema não encontrado para os caminhos APK com caracteres aparentemente aleatórios após o nome:

for i in $(adb shell pm list packages | awk -F':' '{print $2}'); do adb pull "$(adb shell pm path $i | awk -F':' '{print $2}')"; mv base.apk $i.apk 2&> /dev/null ;done

Se você obtiver "Adb: Erro: Falha ao Stat Remote Object" que indica que você não possui as permissões necessárias. Eu corri isso em um Moto Z2 sem raízes e pude baixar todos os APKs que não desinstalei (veja abaixo), exceto o YouTube.

adb shell pm uninstall --user 0 com.android.cellbroadcastreceiver   <--- kills presidential alert app!

(Para visualizar os usuários, executando os usuários do adb shell pm list), essa é uma maneira de remover/desinstalar (não do telefone, pois volta com redefinição de fábrica) quase ALGUM App sem root, incluindo aplicativos do sistema (sugere o aplicativo de atualização irritante que atualiza sua linha telefônica ou não pode ser encontrada com Grepping para "CCC")

Outras dicas

Nenhuma dessas sugestões funcionou para mim, porque o Android estava anexando um número de sequência ao nome do pacote para produzir o nome final do arquivo APK. Em versões mais recentes do Android (Oreo e Pie), uma sequência aleatória imprevisível é anexada. A seguinte sequência de comandos é o que funcionou para mim em um dispositivo não enraizado:

1) Determine o nome do pacote do aplicativo, por exemplo, "com.example.someApp". Pule esta etapa se você já conhece o nome do pacote.

adb shell pm list packages

Veja a lista de nomes de pacotes e tente encontrar uma correspondência entre o aplicativo em questão e o nome do pacote. Isso geralmente é fácil, mas observe que o nome do pacote pode estar completamente relacionado ao nome do aplicativo. Se você não conseguir reconhecer o aplicativo da lista de nomes de pacotes, tente encontrar o aplicativo no Google Play usando um navegador. O URL para um aplicativo no Google Play contém o nome do pacote.

2) Obtenha o nome do caminho completo do arquivo APK para o pacote desejado.

adb shell pm path com.example.someapp

A saída vai parecer algo como
pacote: /data/app/com.example.someApp-2.apk
ou
pacote: /data/app/com.example.someapp-nffsvxn_ctafgra3fr_rxq ==/base.apk

3) Usando o nome do caminho completo da etapa 2, puxe o arquivo APK do dispositivo Android para a caixa de desenvolvimento.

adb pull /data/app/com.example.someapp-2.apk path/to/desired/destination

Nenhuma raiz é necessária:

Este código ficará no caminho dos pacotes de terceiros com o nome para que você possa identificar facilmente seu apk

adb shell pm list packages -f -3

A saída será

pacote: /data/app/xx.xx.xx.apk=yy.yy.yy

Agora puxe esse pacote usando o código abaixo:

adb pull /data/app/XX.XX.XX.apk

Se você executou acima do CMD em C:>\ , então você encontrará esse pacote lá.

Eu já vi muitas soluções para esse problema, você precisa fazer o root no seu telefone ou precisa instalar um aplicativo. Então, depois de muito pesquisando no Google, entendi isso Solução para telefones não enraizados/enraizados.

Para listar quais aplicativos você conseguiu até agora.

adb shell pm list packages

Então você pode selecionar um aplicativo, por exemplo, Twitter

adb backup -apk com.twitter.android

Uma coisa importante aqui é não configurar uma senha para criptografar seu backup

Isso criará um arquivo chamado como backup.ap, mas você ainda não pode abri -lo. Para isso, você precisa extraí -lo novamente, mas usando o comando dd.

dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar

Depois disso, tudo o que você precisa fazer é extrair o teor de alcatrão e está feito.

Espero que funcione para vocês

C:\Users\xyz>adb shell pm list packages -f | findstr whatsapp
package:/data/app/com.whatsapp-1/base.apk=com.whatsapp

C:\Users\xyz>adb pull /data/app/com.whatsapp-1/base.apk Desktop
/data/app/com.whatsapp-1/base.apk: 1 f.... 13.8 MB/s (32803925 bytes in 
2.269s)

Um revestimento que funciona para todas as versões do Android:

adb shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk

Completando a resposta do @yojimbo, foi o que eu fiz (apenas Linux/Mac, não funcionará fora da caixa no Windows ... talvez no Bash Shell do Git):

for i in $(adb shell pm list packages -f -3 | cut -d= -f 1 | cut -d ":" -f 2); do adb pull $i; done

Esta é uma festa feia, mas funciona :)

EDIT: ele não funciona mais no Androidm: Todos os arquivos são nomeados "base.apk" sob outro dir. Deve ser "trivial" para consertar.

Nos sistemas Unix, você pode tentar esta função:

function android_pull_apk() {
    if [ -z "$1" ]; then
        echo "You must pass a package to this function!"
        echo "Ex.: android_pull_apk \"com.android.contacts\""
        return 1
    fi

    if [ -z "$(adb shell pm list packages | grep $1)" ]; then
        echo "You are typed a invalid package!"
        return 1
    fi

    apk_path="`adb shell pm path $1 | sed -e 's/package://g' | tr '\n' ' ' | tr -d '[:space:]'`"
    apk_name="`adb shell basename ${apk_path} | tr '\n' ' ' | tr -d '[:space:]'`"

    destination="$HOME/Documents/Android/APKs"
    mkdir -p "$destination"

    adb pull ${apk_path} ${destination}
    echo -e "\nAPK saved in \"$destination/$apk_name\""
}
  • Exemplo: android_pull_apk com.android.contacts
  • Observação: Para identificar o pacote: adb shell pm list packages

Etapas para baixar APK de dispositivo para desktop

A) Verifique se você está em execução (emulador/dispositivo real). Para verificar use este comando

adb devices

B) Selecione toda a lista de pacotes disponíveis instalada no seu dispositivo. Você pode usar o comando Grep para selecionar o pacote específico que pretende fazer o download.

adb shell pm list packages
adb shell pm list packages -f -3

Saída (lista de pacotes disponíveis)

package:/data/app/com.example.mytestapplication-sOzKi5USzfbYLPNDmaaK6g==/base.apk=com.example.mytestapplication
package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk=com.example.myapplication

C) Copie o pacote (que você gosta de baixar) no link acima. FORMA NOSSO CASO Eu escolho este pacote (com.example.myApplication)

Syntex: adb shell pm path [your_package_name]
Command: adb shell pm path com.example.myapplication

Resultado

package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk

D) Finalmente, para baixar o APK do seu (emulador/dispositivo real)

Syntex: adb pull /data/app/[your_package_name]-1/base.apk  [your_destination_path]
Command: adb pull /data/app/com.example.myapplication-3j4CVk0Tb2gysElgjz5O6A==/base.apk /Users/$(whoami)/Documents/your_apk.apk

Exemplo: Tentando puxar este arquivo certInstaller.apk em sua máquina local (MAC)

adb pull /system/app/CertInstaller/CertInstaller.apk /Users/$(whoami)/Documents/APK/download_apk/

E) Confirme no seu diretório local

ls -la /Users/$(whoami)/Documents/

Como dito acima, você pode obter o APK usando o comando pull no ADB.

Desde então, você está falando sobre seus aplicativos instalados, vá em frente e olhe no /dados/aplicativo diretório do seu sistema de arquivos Android. Você encontrará o APK está lá.

Em seguida, use o comando adb - adb pull /data/data/appname.apk

Se você sabe (ou ou pode "adivinhar") o caminho para o .apk (isto parece ser do formato /data/app/com.example.someapp-{1,2,..}.apk para, então você pode simplesmente copiá -lo de /data/app também. Isso funcionou mesmo no meu telefone Android não enraizado.

Basta usar um aplicativo emulador de terminal (como Este) e corra:

# step 1: confirm path
ls /data/app/com.example.someapp-1.apk
# if it doesn't show up, try -2, -3. Note that globbing (using *) doesn't work here.
# step 2: copy (make sure you adapt the path to match what you discovered above)
cp /data/app/com.example.someapp-1.apk /mnt/sdcard/

Em seguida, você pode movê-lo do cartão SD para onde quiser (ou anexá-lo a um email etc.). O último bit pode ser tecnicamente opcional, mas torna sua vida muito mais fácil ao tentar fazer algo com o .apk Arquivo.

Os procedimentos descritos aqui não funcionam para o Android 7 (Nougat) [e possivelmente o Android 6, mas não consigo verificar]. Você não pode puxar os arquivos .apk diretamente em Nougat (a menos que no modo raiz, mas isso requer um telefone enraizado). Porém, você pode copiar o .apk para um caminho alternativo (digamos /sdcard /download) no telefone usando shell adb, então você pode fazer uma tração do ADB no caminho alternativo.

Experimente este comando Bash de um liner para fazer backup de todos os seus aplicativos:

for package in $(adb shell pm list packages -3 | tr -d '\r' | sed 's/package://g'); do apk=$(adb shell pm path $package | tr -d '\r' | sed 's/package://g'); echo "Pulling $apk"; adb pull -p $apk "$package".apk; done

Este comando é derivado de Script do Firelord. Eu apenas renomeei todos os APKs para seus nomes de pacotes para resolver o problema com O roteiro de Elcuco, ou seja, o mesmo base.apk Arquivo sendo substituído no Android 6.0 "marshmallow" e acima.

Observe que este comando backup apenas de aplicativos de terceiros, porque não vejo o ponto de fazer backup de aplicativos internos. Mas se você quiser fazer backup de aplicativos do sistema, apenas omite o -3 opção.

Veja como você faz isso:

Faça o download e instale o extrator APK no seu dispositivo. É gratuito e é compatível em quase todos os dispositivos Android. Outro ponto positivo é que ele nem requer root ou qualquer coisa para funcionar. Depois de instalá -lo, inicie -o. Lá você verá uma lista de aplicativos que estão no seu dispositivo, que incluem os aplicativos que você instalou posteriormente, juntamente com os aplicativos do sistema. Pressione por muito tempo qualquer aplicativo que você deseja extrair (você pode selecionar vários aplicativos ou todos os aplicativos de uma só vez) e clique na opção Extrair que você vê na parte superior. Você também terá a opção de compartilhar via Bluetooth ou mensagens. Você terminou, verá os aplicativos extraídos como AppName_Apppackage_AppVersionName_AppVersionCode.apk, que será salvo no caminho/sdcard/extrairedapks/por padrão.

Para descrição detalhada para Como extrair arquivos APK no Android, Visita: http://appslova.com/how-to-extract-apk-files-in-android/

Todas essas respostas requerem várias etapas para cada arquivo APK recuperado do dispositivo. 1. Determine o nome do pacote, 2. Encontre o arquivo e 3. Faça o download. Eu construí um simples apk_grabber Script Python Para fazer isso para qualquer aplicativo que corresponda a um determinado regex e, em seguida, descompila esses APKs em arquivos JAR.

Não usei código para puxar o arquivo .apk do celular, mas tenho usado o software para extrair o arquivo .apk do celular e software que usei estão abaixo com o link do Google Play:

  1. S Manager de Arquivos de Arquivos do ES
  2. Astro Cloud & File Manager 3.Cabo de dados de software

Espero que ajude você.

Quer muito, muito confortável 1 minuto de solução?

Só você este aplicativo https://play.google.com/store/apps/details?id=com.cvinfo.filemanager (gerenciador de arquivos inteligente do Google Play).

Toque em "Apps", escolha um e toque em "Backup". Ele acabará no seu sistema de arquivos em app_backup pasta ;)

Sem ferramentas de raiz e nenhuma ferramenta necessária do ADB. Instalar MyAppsharer App da Play Store.

eu tenho um does not exist error

Aqui está como eu faço isso funciona

adb shell pm list packages -f | findstr zalo
package:/data/app/com.zing.zalo-1/base.apk=com.zing.zalo

adb shell
mido:/ $ cp /data/app/com.zing.zalo-1/base.apk /sdcard/zalo.apk
mido:/ $ exit


adb pull /sdcard/zalo.apk Desktop

/sdcard/zalo.apk: 1 file pulled. 7.7 MB/s (41895394 bytes in 5.200s)

Outro script bash (ou seja, funcionará para a maioria dos sistemas baseados em UNIX). Baseado em A resposta de Pedro Rodrigues, mas é um pouco mais fácil de usar.

Melhorias sobre a versão de Pedro:

  1. A abordagem original não funcionou para mim no Android 7: adb pull continuou reclamando no such file or directory enquanto adb shell poderia acessar o arquivo. Por isso, usei uma abordagem diferente, com arquivo temporário.
  2. Quando lançado sem argumentos, meu script listará todos os pacotes disponíveis. Quando o nome parcial do pacote for fornecido, ele tentará adivinhar o nome completo do pacote. Ele reclamará se houver várias expansões possíveis.
  3. Eu não o caminho de destino de codificação de codificação; Em vez disso, os APKs são salvos no diretório de trabalho atual.

Salve isso em um arquivo executável:

#!/bin/bash
# Obtain APK file for given package from the device connected over ADB

if [ -z "$1" ]; then
    echo "Available packages: "
    adb shell pm list packages | sed 's/^package://'
    echo "You must pass a package to this function!"
    echo "Ex.: android_pull_apk \"com.android.contacts\""
    exit 1
fi

fullname=$(adb shell pm list packages | sed 's/^package://' | grep $1)
if [ -z "$fullname" ]; then
    echo "Could not find package matching $1"
    exit 1
fi
if [ $(echo "$fullname" | wc -l) -ne 1 ]; then
    echo "Too many packages matched:"
    echo "$fullname"
    exit 1
fi
echo "Will fetch APK for package $fullname"

apk_path="`adb shell pm path $fullname | sed -e 's/package://g' | tr '\n' ' ' | tr -d '[:space:]'`"
apk_name="`basename ${apk_path} | tr '\n' ' ' | tr -d '[:space:]'`"

destination="${fullname}.apk"

tmp=$(mktemp --dry-run --tmpdir=/sdcard --suffix=.apk)
adb shell cp "${apk_path}" "$tmp"
adb pull "$tmp" "$destination"
adb shell rm "$tmp"

[ $? -eq 0 ] && echo -e "\nAPK saved in \"$destination\""

O mais simples é: instale o aplicativo "compartilhe" no telefone. Agora instale o aplicativo Shareit no PC ou outro telefone. Agora, do telefone, onde o aplicativo está instalado, abra o compartilhamento e envie. Em outro telefone ou PC, abra o compartilhamento e receba.

  1. Abra o aplicativo que você deseja extrair o APK do seu telefone.
  2. Obtenha o aplicativo atualmente aberto com:

    adb shell dumpsys activity activities | grep mFocusedActivity
    
  3. Pegue o caminho para o nome do pacote

    adb shell pm path <packagename.apk>
    

4.Copy o caminho que você ganhou para o diretório SDCARD

    adb shell cp /data/app/<packagename.apk> /sdcard

5. Pull o apk

    adb pull /sdcard/base.apk

Eu realmente gostei de todas essas respostas. A maioria dos scripts para exportar e renomear todos eles foram escritos em Bash. Fiz um pequeno script Perl que faz o mesmo (que deve funcionar no Perl para Windows e Linux, testado apenas no Ubuntu).

Download-apk.pl

#!/usr/bin/perl -w
# Automatically export all available installed APK's using adb
use strict;
print "Connect your device...\n";
system("adb", "wait-for-device");
open(my $OUT, '-|', 'adb', 'shell', 'pm', 'list', 'package', '-f');
my @list = split(/\s*/, `adb shell pm list packages -f`);
my $count = 0;
while(my $line = <$OUT>) {
        $line =~ s/^\s*|\s*$//g;
        my ($type, $path, $package) = $line =~ /^(.*?):(.*)=(.*)$/ ? ($1,$2,$3) : die('invalid line: '.$line);
        my $category = $path =~ /^\/(.*?)\// ? $1 : 'unknown';
        my $baseFile = $path =~ /\/([^\/]*)$/ ? $1 : die('Unknown basefile in path: '.$path);
        my $targetFile = "$category-$package.apk";
        print "$type $category $path $package $baseFile >> $targetFile\n";
        system("adb", "pull", $path);
        rename $baseFile, $targetFile;
}
  1. Verifique se o ADB (.exe) está no seu caminho ou no mesmo diretório
  2. Conecte seu telefone
  3. Execute download-apk.pl

A saída é algo semelhante a:

# ./download-apk.pl
Connect your device...
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
package system /system/app/YouTube/YouTube.apk com.google.android.youtube YouTube.apk >> system-com.google.android.youtube.apk
5054 KB/s (11149871 bytes in 2.154s)
package data /data/app/com.ghostsq.commander-1/base.apk com.ghostsq.commander base.apk >> data-com.ghostsq.commander.apk
3834 KB/s (1091570 bytes in 0.278s)
package data /data/app/de.blinkt.openvpn-2/base.apk de.blinkt.openvpn base.apk >> data-de.blinkt.openvpn.apk
5608 KB/s (16739178 bytes in 2.914s)
etc.

Isso ajudará para alguém que está procurando um não técnico responda

Isso é simples Hack

Baixe o aplicativo App Share/Send Pro da loja do Google Play. Selecione o aplicativo que você deseja enviar e o método, envie o aplicativo.

Normalmente, uso o Bluetooth para enviar aplicativos para o meu PC ou outro telefone.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top