Domanda

Come posso ottenere il file apk da un dispositivo android?O come faccio a trasferire il file apk dal dispositivo al sistema?

È stato utile?

Soluzione

adb . Con adb trazione è possibile copiare i file dal dispositivo al sistema, quando il dispositivo è collegato con USB.

Naturalmente è necessario anche i permessi giusti per accedere alla directory il file è in. In caso contrario, è necessario radice il primo dispositivo.


Se si scopre che molti dei APK sono denominati "base.apk" è anche possibile utilizzare questo comando una sola riga di tirare tutti i APK fuori un telefono è possibile accedere durante la ridenominazione di tutti i nomi "base.apk" per il nome del pacchetto . Questo risolve anche la directory non trovato problema per i percorsi APK con caratteri apparentemente casuali dopo il 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 si ottiene "adb: Errore: Impossibile stat oggetto remoto" che indica che non si dispone delle autorizzazioni necessarie. Ho eseguito questo su una Moto Z2 NON radicata e stato in grado di scaricare tutti i APK non ho disinstallazione (vedi sotto), tranne youtube.

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

(per gli utenti visualizzare eseguire adb utenti Lista pm shell) Questo è un modo per rimuovere / disinstallare (non dal telefono come si torna con reset di fabbrica) quasi ANY app senza applicazioni di sistema radice COMPRESO (suggerimento l'applicazione aggiornamento fastidioso che aggiorna la linea telefonica o no può essere trovato da grep per "CCC")

Altri suggerimenti

Nessuno di questi suggerimenti lavorato per me, perché Android è stato aggiungendo un numero di sequenza per il nome del pacchetto per produrre il nome del file APK finale. Nelle versioni più recenti di Android (Oreo e Pie), una stringa casuale imprevedibile viene aggiunto. La seguente sequenza di comandi è ciò che ha funzionato per me su un non radicata dispositivo :

1) Determinare il nome del pacchetto dell'app, ad esempio, "Com.example.someapp". Ignorare questo passaggio se si conosce già il nome del pacchetto.

adb shell pm list packages

Guardare attraverso l'elenco di nomi di pacchetti e cercare di trovare una corrispondenza tra l'applicazione in questione e il nome del pacchetto. Questo di solito è facile, ma è da notare che il nome del pacchetto può essere completamente estraneo al nome dell'applicazione. Se non è possibile riconoscere l'applicazione dalla lista di nomi di pacchetti, provare a trovare l'applicazione in Google Play utilizzando un browser. L'URL per un app in Google Play contiene il nome del pacchetto.

2) Ottenere il nome del percorso completo del file APK per il pacchetto desiderato.

adb shell pm path com.example.someapp

L'output sarà simile
    pacchetto: /data/app/com.example.someapp-2.apk
o
    pacchetto: /data/app/com.example.someapp-nfFSVxn_CTafgra3Fr_rXQ == / base.apk

3) Utilizzando il percorso completo dal punto 2, tirare il file APK dal dispositivo Android alla casella di sviluppo.

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

Non è richiesta alcuna radice:

Questo codice otterrà 3 ° percorso pacchetti di partito con il nome in modo da poter identificare facilmente il tuo APK

adb shell pm list packages -f -3

l'uscita sarà

  

pacchetto: /data/app/XX.XX.XX.apk=YY.YY.YY

ora tirare quel pacchetto utilizzando il codice qui sotto:

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

se si eseguisse sopra cmd nella C:>\, allora vi accorgerete che il pacchetto lì.

Ho visto che molte soluzioni a questo problema o si deve sradicare il telefono o è necessario installare un app. Poi, dopo molto googling ho ottenuto questo soluzione per i telefoni non radicati / radicate.

Per la lista le app che hai finora.

adb shell pm list packages

Quindi è possibile selezionare un app, per esempio Twitter

adb backup -apk com.twitter.android

Una cosa importante qui è di non impostare una password per crittografare il backup

Questo sta per creare un file denominato come backup.ap, ma ancora non è possibile aprirlo. Per questo devi estrarlo di nuovo, ma usando il comando dd.

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

Dopo questo tutto ciò che dovete fare è estrarre il contenuto di catrame ed è fatta.

La speranza che funziona per voi ragazzi

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)

Una nave di linea che funziona per tutte le versioni di Android:

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

Completamento risposta @Yojimbo 's, questo è quello che ho fatto (Linux / Mac solo, non funziona out of the box su Windows ... magari in shell bash di git):

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

Questa è brutto bash, ma funziona:)

EDIT: E non funziona più su AndroidM: tutti i file sono denominati "base.apk" sotto un altro dir. Dovrebbe essere "banale" per correzione.

Sui sistemi unix, si può provare questa funzione:

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\""
}
  • Esempio: android_pull_apk com.android.contacts
  • Nota:Per identificare il pacchetto: adb shell pm list packages

I passaggi per Scarica APK da dispositivo a Desktop

A) Assicurati che il tuo esecuzione (emulatore / dispositivo reale). Per controllare l'uso questo comando

adb devices

B) Seleziona tutto l'elenco dei pacchetti disponibili installata nel dispositivo. È possibile utilizzare il comando grep per selezionare il pacchetto specifico che si intende scaricare.

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

Output (Lista dei pacchetti disponibili)

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) Copiare il pacchetto (che ti piace per il download) dal link qui sopra. Formare nostro caso ho scelto questo pacchetto (com.example.myapplication)

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

Output

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

D) Infine, per scaricare APK dal vostro (emulatore / dispositivo vero e proprio)

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

Esempio: Cercando di tirare questo file CertInstaller.apk nel computer locale (Mac)

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

E) Conferma nella directory locale

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

Come detto in precedenza, è possibile ottenere l'apk utilizzando il comando di trazione in adb.

Dal momento che, si sta parlando le applicazioni installate, andare avanti e guardare a / data / app di directory del file system Android. Troverete l'APK non c'è.

Quindi utilizzare il comando adb - adb pull /data/data/appname.apk

Se si conosce (o se si può "indovinare") il percorso del .apk ( sembra di essere del formato /data/app/com.example.someapp-{1,2,..}.apk a, allora si può solo copiare da /data/app pure. Questo ha lavorato anche sul mio non radicata, fotografia telefono Android.

Basta usare un app Terminal Emulator (come questo uno ) ed eseguire:

# 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/

Poi si può passare dalla scheda SD a dove si vuole (o allegarlo a una e-mail, ecc). L'ultimo bit potrebbe essere tecnicamente facoltativo, ma rende la vita molto più facile quando si cerca di fare qualcosa con il file .apk.

Le procedure descritte qui non funzionano per Android 7 (Torrone) [e forse Android 6, ma sono in grado di verificare]. Non è possibile scaricare i file .apk direttamente sotto Torrone (a meno che in modalità root, ma che richiede un telefono radicata). Ma, è possibile copiare il .apk per un percorso alternativo (per esempio / sdcard / Download) al telefono utilizzando adb shell, allora si può fare un tiro adb dal percorso alternativo.

Prova questo comando bash uno di linea per il backup di tutte le tue applicazioni:

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

Questo comando è derivato da di Firelord sceneggiatura . Ho appena rinominato tutti gli APK ai loro nomi dei pacchetti per risolvere la questione con di elcuco sceneggiatura , vale a dire lo stesso file base.apk sovrascritte su Android 6.0 "Marshmallow" o superiore.

Si noti che questo comando esegue il backup solo applicazioni 3rd party, coz non vedo il punto di backup di applicazioni built-in. Ma se si vuole sistema di backup applicazioni troppo, basta omettere l'opzione -3.

Ecco come si fa:

Scarica e installa APK Extractor nel dispositivo. E 'gratuito, ed è compatibile in quasi tutti i dispositivi Android. Un altro punto a favore è che non ha nemmeno bisogno di root o nulla al lavoro. Dopo averlo installato, avviarlo. Vi si possono vedere un elenco di applicazioni che sono nel dispositivo, che comprendono le applicazioni installate in seguito, insieme con le applicazioni di sistema. Premere a lungo qualsiasi applicazione che si desidera estrarre (è possibile selezionare più o tutte le applicazioni in una sola volta), e fare clic sull'opzione estratto che vedete in alto. Avrete anche la possibilità di condividere via Bluetooth o messaggistica. Il gioco è fatto, potrete vedere le applicazioni estratte come AppName_AppPackage_AppVersionName_AppVersionCode.apk, che verranno salvati nel percorso / sdcard / ExtractedApks / per impostazione predefinita.

Per una descrizione dettagliata per come estrarre file apk in Android , visitare il sito: http://appslova.com/how-to -extract-APK-file-in-android /

Tutte queste risposte richiedono più passaggi per ogni file apk recuperato dal dispositivo. 1. Determinare il nome del pacchetto, 2. trovare il file, e 3. scaricarlo. Ho costruito un semplice apk_grabber Script Python di fare questo per qualsiasi applicazione corrispondente a un dato regex, e poi quelli decompila APK in file jar.

Non ho usato il codice per estrarre file .apk da cellulare, ma ho utilizzato il software per estrarre .apk file dal cellulare e software ho usato sono al di sotto con il link Google Play:

  1. ES File Explorer File Manager
  2. ASTRO File Manager Cloud & 3. software cavo dati

La speranza ti aiuta.

voglio molto, molto confortevole soluzione di 1 minuto?

solo voi questa applicazione https://play.google .com / negozio / apps / dettagli? id = com.cvinfo.filemanager (direttore di smart File dal gioco google).

tap "apps", scegliere uno e toccare "backup". finirà nel file system nella cartella app_backup;)

No Root e non strumenti ADB metodo richiesto. Installare MyAppSharer app dal Play Store.

Ho una does not exist error

Ecco come faccio funziona

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)

Ancora un altro script bash (cioè funziona per la maggior parte sistemi basati su UNIX). Sulla base la risposta da Pedro Rodrigues , ma è leggermente più facile da usare.

miglioramenti rispetto alla versione di Pedro:

  1. approccio originale non ha funzionato per me su Android 7: adb pull continuava a lamentarsi no such file or directory mentre adb shell potrebbe accedere al file. Quindi ho usato approccio diverso, con file temporaneo.
  2. Una volta lanciato senza argomenti, il mio script sarà solo elencare tutti i pacchetti disponibili. Quando viene fornito il nome del pacchetto parziale, cercherà di indovinare il nome completo del pacchetto. Si lamentano se ci sono diverse espansioni possibili.
  3. faccio percorso di destinazione non hardcode; invece APK vengono salvati nella directory di lavoro corrente.

Salva l'accaduto a un file eseguibile:

#!/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\""

più semplice è: Installare app "ShareIt" sul telefono. Ora installare ShareIt applicazione in PC o un altro telefono. Ora dal telefono, in cui è installato l'applicazione, ShareIt aperto e di invio. D'altro telefono o PC, ShareIt aperta e ricevere.

  1. Apri l'applicazione che si desidera estrarre l'apk dal telefono.
  2. Scarica l'applicazione attualmente aperta con:

    adb shell dumpsys activity activities | grep mFocusedActivity
    
  3. ottenere il percorso per il nome del pacchetto

    adb shell pm path <packagename.apk>
    

4.Copiare il percorso che hai nella directory sdcard

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

5.Estrarre l'apk

    adb pull /sdcard/base.apk

Mi è piaciuto molto tutte queste risposte. La maggior parte degli script di esportare e rinominare tutti loro sono stati scritti in Bash. Ho fatto un piccolo script Perl che fa lo stesso (che dovrebbe funzionare sia in Perl per Windows e Linux, testato solo su 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. Assicurati ADB (.exe) è nel tuo percorso o stessa directory
  2. Collegare il telefono
  3. Esegui download-apk.pl

L'output è qualcosa di simile 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.

Questo sarà di aiuto per chi è alla ricerca di un non tecnica risposta

Questo è semplice hack

Scaricare l'applicazione App Share/Send Pro dal google play store.Selezionare l'applicazione che si desidera inviare e metodo di invio di applicazione.

Io di solito uso il Bluetooth per inviare le domande per il mio pc o di un altro telefono.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top