¿Cómo obtengo el archivo apk de un dispositivo Android? ¿O cómo transfiero el archivo apk del dispositivo al sistema?
¿Cómo obtengo el archivo apk de un dispositivo Android? ¿O cómo transfiero el archivo apk del dispositivo al sistema?
Respuestas:
Use adb . Con adb pull puedes copiar archivos de tu dispositivo a tu sistema, cuando el dispositivo está conectado con USB.
Por supuesto, también necesita los permisos correctos para acceder al directorio en el que se encuentra su archivo. De lo contrario, primero deberá rootear el dispositivo.
Si encuentra que muchos de los APK se llaman "base.apk", también puede usar este comando de una línea para extraer todos los APK de un teléfono al que pueda acceder mientras cambia el nombre de cualquier nombre de "base.apk" por el nombre del paquete. Esto también corrige el problema de directorio no encontrado para las rutas APK con caracteres aparentemente aleatorios después del nombre:
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
Si obtiene "adb: error: error al registrar el objeto remoto", eso indica que no tiene los permisos necesarios. Ejecuté esto en un Moto Z2 NO rooteado y pude descargar TODOS los APK que no desinstalé (ver a continuación) excepto YouTube.
adb shell pm uninstall --user 0 com.android.cellbroadcastreceiver <--- kills presidential alert app!
(para ver a los usuarios ejecutar adb shell pm list users) Esta es una forma de eliminar / desinstalar (no desde el teléfono, ya que vuelve con el restablecimiento de fábrica) casi CUALQUIER aplicación SIN root incluyendo las aplicaciones del sistema (insinúa la molesta aplicación de actualización que actualiza tu teléfono alinearlo o no se puede encontrar grepping para "ccc")
adb shell pm list packages
y, adb shell pm path your.package.name
luego, la ruta completa desde su PC, puede simplementeadb pull /full/path/to/your.apk
Ninguna de estas sugerencias funcionó para mí, porque Android estaba agregando un número de secuencia al nombre del paquete para producir el nombre del archivo APK final. En versiones más recientes de Android (Oreo y Pie), se agrega una cadena aleatoria impredecible. La siguiente secuencia de comandos es lo que funcionó para mí en un dispositivo no rooteado :
1) Determine el nombre del paquete de la aplicación, por ejemplo, "com.example.someapp". Omita este paso si ya conoce el nombre del paquete.
adb shell pm list packages
Mire la lista de nombres de paquetes e intente encontrar una coincidencia entre la aplicación en cuestión y el nombre del paquete. Esto suele ser fácil, pero tenga en cuenta que el nombre del paquete puede no estar relacionado con el nombre de la aplicación. Si no puede reconocer la aplicación de la lista de nombres de paquetes, intente encontrar la aplicación en Google Play usando un navegador. La URL de una aplicación en Google Play contiene el nombre del paquete.
2) Obtenga el nombre completo de la ruta del archivo APK para el paquete deseado.
adb shell pm path com.example.someapp
La salida se verá como un
paquete: /data/app/com.example.someapp-2.apk
o
paquete: /data/app/com.example.someapp-nfFSVxn_CTafgra3Fr_rXQ == / base.apk
3) Utilizando el nombre completo de la ruta del Paso 2, extraiga el archivo APK del dispositivo Android al cuadro de desarrollo.
adb pull /data/app/com.example.someapp-2.apk path/to/desired/destination
pm list packages
admite la -f
bandera, que enumera la ubicación del .apk para usted, como package:/data/app/com.google.android.apps.maps-1.apk=com.google.android.apps.maps
. La ayuda incorporada de pm es inútil, pero pm también puede filtrar tipos de paquetes, consulte developer.android.com/studio/command-line/adb.html#pm para obtener más información. EDITAR: acabo de notar que la respuesta a continuación dice esto, pero esa respuesta no es tan votada como esta.
adb: error: remote object '/data/app/path.of.the.app-2/base.apk' does not exist
. Si examino estas carpetas con un explorador de archivos, las carpetas están vacías.
adb shell
y luego cp PathToApk /sdcard/
y luego se copia de la tarjeta sd.
No se requiere root:
Este código obtendrá la ruta de los paquetes de terceros con el nombre para que pueda identificar fácilmente su APK
adb shell pm list packages -f -3
la salida será
paquete: /data/app/XX.XX.XX.apk=YY.YY.YY
ahora extraiga ese paquete usando el siguiente código:
adb pull /data/app/XX.XX.XX.apk
si ejecutó por encima de cmd C:>\
, entonces encontrará ese paquete allí.
-f -s
lugar de-f -3
He visto muchas soluciones a este problema, ya sea que tienes que rootear tu teléfono o tienes que instalar una aplicación. Luego, después de mucho googlear, obtuve esta solución para teléfonos no rooteados / rooteados.
Para enumerar qué aplicaciones tienes hasta ahora.
adb shell pm list packages
Luego puede seleccionar una aplicación, por ejemplo twitter
adb backup -apk com.twitter.android
Una cosa importante aquí es no configurar una contraseña para cifrar su copia de seguridad
Esto va a crear un archivo llamado backup.ap, pero aún no puede abrirlo. Para esto, debes extraerlo nuevamente pero usando el comando dd.
dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar
Después de esto, todo lo que tiene que hacer es extraer el contenido de alquitrán y listo.
Espero que funcione para ustedes
Pasos para descargar APK del dispositivo al escritorio
A) Asegúrese de que su funcionamiento (emulador / dispositivo real). Para verificar use este comando
adb devices
B) Seleccione toda la lista de paquetes disponibles instalada en su dispositivo. Puede usar el comando grep para seleccionar el paquete específico que desea descargar.
adb shell pm list packages
adb shell pm list packages -f -3
Salida (Lista de paquetes disponibles)
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 el paquete (que desea descargar) del enlace anterior. Formule nuestro caso Elijo este paquete (com.example.myapplication)
Syntax : adb shell pm path [your_package_name]
Command: adb shell pm path com.example.myapplication
Salida
package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk
D) Finalmente, para descargar APK desde su (emulador / dispositivo real)
Syntax : 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
Ejemplo: Intentar extraer este archivo CertInstaller.apk en su máquina local (Mac)
adb pull /system/app/CertInstaller/CertInstaller.apk /Users/$(whoami)/Documents/APK/download_apk/
E) Confirme en su directorio local
ls -la /Users/$(whoami)/Documents/
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)
One liner que funciona para todas las versiones de Android:
adb shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk
Completando la respuesta de @Yojimbo, esto es lo que hice (solo Linux / Mac, no funcionará de fábrica en Windows ... tal vez en el shell bash de git):
for i in $(adb shell pm list packages -f -3 | cut -d= -f 1 | cut -d ":" -f 2); do adb pull $i; done
Esto es feo, pero funciona :)
EDITAR: ya no funciona en AndroidM: todos los archivos se denominan "base.apk" en otro directorio. Debe ser "trivial" para arreglar.
En sistemas unix, puede probar esta función:
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\""
}
android_pull_apk com.android.contacts
adb shell pm list packages
Como se dijo anteriormente, puede obtener el apk utilizando el comando pull en adb.
Ya que está hablando de sus aplicaciones instaladas, continúe y busque en el directorio / data / app de su sistema de archivos Android. Encontrarás los APK allí.
Luego use el comando adb - adb pull /data/data/appname.apk
Pruebe este comando one liner bash para hacer una copia de seguridad de todas sus aplicaciones:
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 se deriva de la secuencia de comandos de Firelord . Acabo de cambiar el nombre de todas las aplicaciones a sus nombres de paquete para resolver el problema con el script de elcuco , es decir, el mismo base.apk
archivo se sobrescribe en Android 6.0 "Marshmallow" y superior.
Tenga en cuenta que este comando solo hace una copia de seguridad de aplicaciones de terceros, porque no veo el punto de hacer una copia de seguridad de las aplicaciones integradas. Pero si también desea hacer una copia de seguridad de las aplicaciones del sistema, simplemente omita la -3
opción.
Si conoce (o si puede "adivinar") la ruta de acceso .apk
( parece ser que tiene el formato /data/app/com.example.someapp-{1,2,..}.apk
, entonces también puede copiarla /data/app
también. Esto funcionó incluso en mi teléfono Android no rooteado y almacenado).
Simplemente use una aplicación Terminal Emulator (como esta ) y ejecute:
# 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/
Luego puede moverlo desde la tarjeta SD a donde desee (o adjuntarlo a un correo electrónico, etc.). El último bit puede ser técnicamente opcional, pero hace que su vida sea mucho más fácil cuando intenta hacer algo con el .apk
archivo.
Los procedimientos descritos aquí no funcionan para Android 7 (Nougat) [y posiblemente Android 6, pero no puedo verificarlo]. No puede extraer los archivos .apk directamente bajo Nougat (a menos que esté en modo raíz, pero eso requiere un teléfono rooteado). Pero, puede copiar el .apk a una ruta alternativa (digamos / sdcard / Download) en el teléfono usando adb shell, luego puede hacer una extracción de adb desde la ruta alternativa.
adb shell
comandos del comentario de @Isa A) funcionó bien para mí en Android 7.1.1, no rooteado.
Obtenga la aplicación actualmente abierta con:
adb shell dumpsys activity activities | grep mFocusedActivity
Obtenga la ruta al nombre del paquete
adb shell pm path <packagename.apk>
4.Copie la ruta que obtuvo al directorio sdcard
adb shell cp /data/app/<packagename.apk> /sdcard
5. Tire del apk
adb pull /sdcard/base.apk
Editar
Si el paso no 2 no funciona, use esto:
adb shell dumpsys window windows | grep mCurrentFocus
Así es como lo haces:
Descargue e instale APK Extractor en su dispositivo. Es gratis y es compatible en casi todos los dispositivos Android. Otro punto a favor es que ni siquiera requiere root ni nada para funcionar. Después de que lo tenga instalado, ejecútelo. Allí verá una lista de aplicaciones que están en su dispositivo, que incluyen las aplicaciones que instaló más adelante, junto con las aplicaciones del sistema. Mantenga presionada cualquier aplicación que desee extraer (puede seleccionar varias o todas las aplicaciones a la vez) y haga clic en la opción de extracción que ve en la parte superior. También tendrá la opción de compartir a través de Bluetooth o mensajes. Ya ha terminado, verá las aplicaciones extraídas como AppName_AppPackage_AppVersionName_AppVersionCode.apk, que se guardarán en la ruta / sdcard / ExtractedApks / de forma predeterminada.
Para obtener una descripción detallada de cómo extraer archivos apk en Android , visite: http://appslova.com/how-to-extract-apk-files-in-android/
Todas estas respuestas requieren múltiples pasos para cada archivo apk recuperado del dispositivo. 1. determine el nombre del paquete, 2. encuentre el archivo y 3. descárguelo. Creé un apk_grabber
script de Python simple para hacer esto para cualquier aplicación que coincida con una expresión regular dada, y luego descompila esas aplicaciones en archivos jar.
No he usado el código para extraer el archivo .apk desde el dispositivo móvil, pero he estado usando un software para extraer el archivo .apk desde el dispositivo móvil y el software que he utilizado se encuentra a continuación con el enlace de Google Play:
Espero que te ayude.
¿Quieres una solución de 1 minuto muy, muy cómoda?
solo esta aplicación https://play.google.com/store/apps/details?id=com.cvinfo.filemanager (administrador de archivos inteligente de google play).
toca "aplicaciones", elige una y toca "copia de seguridad". terminará en su sistema de archivos en la app_backup
carpeta;)
No se requiere ningún método Root ni herramientas ADB. Instala la aplicación MyAppSharer desde Play Store.
Recibí una does not exist error
Así es como lo hago funcionar
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)
Otra secuencia de comandos bash (es decir, funcionará para la mayoría de los sistemas basados en Unix). Basado en la respuesta de Pedro Rodrigues , pero es un poco más fácil de usar.
Mejoras sobre la versión de Pedro:
adb pull
seguía quejándome no such file or directory
mientras adb shell
podía acceder al archivo. Por lo tanto, utilicé un enfoque diferente, con un archivo temporal.Guarde esto en un archivo ejecutable:
#!/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\""
Realmente me gustaron todas estas respuestas. La mayoría de los scripts para exportar y renombrarlos se escribieron en Bash. Hice un pequeño script de Perl que hace lo mismo (que debería funcionar tanto en Perl para Windows como para Linux, solo probado en 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;
}
El resultado es algo similar 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.
Esto ayudará a alguien que esté buscando una respuesta no técnica.
Este es un simple truco
Descargue la aplicación App Share/Send Pro
desde Google Play Store. Seleccione la aplicación que desea enviar y la aplicación de envío de método.
Usualmente uso Bluetooth para enviar aplicaciones a mi PC u otro teléfono.