Come posso ottenere un file apk da un dispositivo Android?
Domanda
Come posso ottenere il file apk da un dispositivo android?O come faccio a trasferire il file apk dal dispositivo al sistema?
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:
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:
- approccio originale non ha funzionato per me su Android 7:
adb pull
continuava a lamentarsino such file or directory
mentreadb shell
potrebbe accedere al file. Quindi ho usato approccio diverso, con file temporaneo. - 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.
- 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.
- Apri l'applicazione che si desidera estrarre l'apk dal telefono.
-
Scarica l'applicazione attualmente aperta con:
adb shell dumpsys activity activities | grep mFocusedActivity
-
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;
}
- Assicurati ADB (.exe) è nel tuo percorso o stessa directory
- Collegare il telefono
- 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.