2012-06-13 18 views
136

Estoy buscando una manera de extraer el archivo APK de una aplicación de Android instalada SIN permiso de root.Obtener el APK de la aplicación instalada

Pensé que esto era imposible, porque todos los archivos APK para aplicaciones que no son del sistema se encuentran en/data/app, y para acceder a esta carpeta se necesita el permiso de root. Luego descubrí que hay numerosas aplicaciones en Google Play que parecen tener acceso a los archivos APK, incluso en dispositivos no rooteados.

¿Alguien me puede decir cómo es esto posible? ¿No hay aplicaciones de respaldo que respalden los archivos APK sin root?

+2

Creo que esta pregunta ya está respondida. Eche un vistazo a http://stackoverflow.com/a/12197924/1016544 –

+1

http://stackoverflow.com/questions/7632156/can-i-get-apk-file-in-phone-of-the-installed -aplicaciones – gliptak

+1

Posible duplicado de [¿Cómo obtengo un archivo apk de un dispositivo Android?] (http://stackoverflow.com/questions/4032960/how-do-i-get-an-apk-file-from-an -android-device) –

Respuesta

293

Acceso/datos/aplicación es posible sin permiso de root; los permisos en ese directorio son rwxrwx - x. Ejecutar permiso en un directorio significa que puede acceder a él, sin embargo, la falta de permiso de lectura significa que no puede obtener una lista de sus contenidos, por lo que para poder acceder debe conocer el nombre del archivo al que accederá. El administrador de paquetes de Android le dirá el nombre de la aplicación almacenada para un paquete determinado.

Para hacer esto desde la línea de comandos, use adb shell pm list packages para obtener la lista de paquetes instalados y encuentre el paquete deseado.

Con el nombre del paquete, podemos obtener el nombre real del archivo y la ubicación del APK usando adb shell pm path your-package-name.

Y conociendo el directorio completo, por fin podemos tirar de la ADB usando adb pull full/directory/of/the.apk

crédito a @tarn por señalar que bajo Lollipop, el camino será apk/data/app/tu-nombre-paquete-1 /base.apk

+29

Para hacer esto desde la línea de comando, use 'adb shell pm list packages' para obtener la lista de paquetes instalados, elija el paquete deseado, añádale '-1.apk' y extráigalo de'/data/app'. Ejemplo: si el nombre del paquete es 'org.mozilla.firefox', use' adb pull/data/app/org.mozilla.firefox-1.apk'. – sschuberth

+9

Para obtener el nombre de archivo real de la APK, utilice adb shell pm path your-package-name. Consulte esta pregunta para obtener una respuesta más detallada http://stackoverflow.com/questions/4032960/how-do-i-get-an-apk-file-from-an-android-device – Yojimbo

+0

Lo usé en el dispositivo. http://stackoverflow.com/a/5097838/1224741 – QED

5

Cuando se tiene Eclipse para Desarrollos Android instalado:

  • utilizar el dispositivo como dispositivo de depuración. En el teléfono: Ajustes> Aplicaciones> Desarrollo y habilitar la depuración USB, consulte http://developer.android.com/tools/device.html
  • En Eclipse, abierta DDMS-ventana: Ventana> Abrir perspectiva> Otros ...> DDMS, ver http://developer.android.com/tools/debugging/ddms.html
  • Si es posible 't ver su intento dispositivo (re) instalación de controlador USB para el dispositivo
  • En panel central seleccione la ficha 'Explorador de archivos' y vaya a sistema> aplicación
  • Ahora puede seleccionar uno o más archivos y luego haga clic en el "Extraiga un archivo del icono del dispositivo" en la parte superior (a la derecha de las pestañas)
  • Seleccione la carpeta de destino - tada!
+0

Solo hay aplicaciones de sistema (también conocidas como aplicaciones preinstaladas) en/system/app. –

0

O usted puede conseguir 'Bluetooth File Transfer' de Google Play y establecer la carpeta de inicio a /system/. Entonces, incluso puedes ir al /.

14

No necesita permisos ROOT para obtener la lista de aplicaciones instaladas.

Puede hacerlo con android PackageManager.

A continuación se muestra un pequeño fragmento de código.

final PackageManager pm = getPackageManager(); 
//get a list of installed apps. 
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); 

for (ApplicationInfo packageInfo : packages) { 
    Log.d(TAG, "Installed package :" + packageInfo.packageName); 
    Log.d(TAG, "Apk file path:" + packageInfo.sourceDir); 
} 
41

Android añade un número de secuencia al nombre del paquete para producir el nombre del archivo APK final (es posible que esto varía con la versión del sistema operativo Android). La siguiente secuencia de comandos funciona en un dispositivo no arraigada:

  1. obtener el nombre de ruta completo del archivo APK para el paquete deseado.

    adb shell pm path com.example.someapp 
    

    Esto da la salida como: package:/data/app/com.example.someapp-2.apk.

  2. Extraiga el archivo APK del dispositivo Android al cuadro de desarrollo.

    adb pull /data/app/com.example.someapp-2.apk 
    
+3

Puede confirmar que esta solución funcionó en un dispositivo no rooteado, ¡aunque requiere conocimiento del nombre del paquete antes del primer comando! Use 'adb shell pm list packages' para obtener una lista de todos los paquetes en el teléfono, en caso de que no esté seguro del nombre del paquete de su aplicación deseada – AndroidNoob

+1

@Yojimbo: respuesta perfecta thx –

+0

¿Qué carpeta en la máquina local del extractor hace el apk ¿entrar en? EDITAR: nvm, el directorio en el que estabas cuando hiciste la extracción de adb ... –

15

hay una aplicación en Google Play Store llamado "Apk extracter". Con esta aplicación, puedes obtener el archivo .apk de la aplicación instalada. ¡Obtén y disfruta!

+2

O cualquier otro APK Extractor aplicación Esta debería ser la respuesta aceptada, ya que es sin problemas. –

+2

También hay aplicaciones libres en F-Droid; APKShare (GPLv3 +) y Apk Extractor (MIT). – ZN13

6
  1. compruebe la lista de apk instalados (el siguiente comando también muestra la ruta donde está instalado y el nombre del paquete). paquetes lista cáscara pm adb -f
  2. uso ADB nombre de tirón/package_path/paquete/path_in_pc (ruta del paquete y el nombre del paquete que se puede obtener desde arriba de comandos 1.)
+0

Sin embargo, debe agregar 'su' para que funcione este comando. – Suncatcher

0

Lista PackageManager .getInstalledApplications() le dará una lista de las aplicaciones instaladas, y ApplicationInfo.sourceDir es la ruta al archivo .apk.

// in oncreate 
    PackageManager pm = getPackageManager(); 
    for (ApplicationInfo app : pm.getInstalledApplications(0)) { 
Log.d("PackageList", "package: " + app.packageName + ", sourceDir: " + app.sourceDir); 
} 

//output is something like 
D/PackageList(5010): package: com.example.xmlparse, sourceDir: /data/app /com.example.xmlparse-2.apk 
D/PackageList(5010): package: com.examples.android.calendar, sourceDir: /data/app/com.examples.android.calendar-2.apk 
D/PackageList(5010): package: com.facebook.katana, sourceDir: /data/app/com.facebook.katana-1.apk 
D/PackageList(5010): package: com.facebook.samples.profilepicture, sourceDir: /data/app/com.facebook.samples.profilepicture-1.apk 
D/PackageList(5010): package: com.facebook.samples.sessionlogin, sourceDir: /data/app/com.facebook.samples.sessionlogin-1.apk 
D/PackageList(5010): package: com.fitworld, sourceDir: /data/app/com.fitworld-2.apk 
D/PackageList(5010): package: com.flipkart.android, sourceDir: /data/app/com.flipkart.android-1.apk 
D/PackageList(5010): package: com.fmm.dm, sourceDir: /system/app/FmmDM.apk 
D/PackageList(5010): package: com.fmm.ds, sourceDir: /system/app/FmmDS.apk 
-1

Encontré una manera de obtener el nombre del paquete del APK en un dispositivo no root. no es tan elegante, pero funciona todo el tiempo.

Paso 1: en su dispositivo, abra el objetivo APK

Paso 2: en la ventana de cmd PC, escriba estos comandos:

adb shell dumpsys activity a > dump.txt 

debido a que la salida de este comando es numerosa , se recomienda redirigir a un archivo.

Paso 3: abra este archivo dump.txt con cualquier editor.

para el dispositivo se acaben Android 4.4:
el comienzo del archivo se veía así:

ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities) 
    Main stack: 
    * TaskRecord{41aa9ed0 #4 A com.tencent.mm U 0} 
    numActivities=1 rootWasReset=true userId=0 
    affinity=com.tencent.mm 
    intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10600000 cmp=com.tencent.mm/.ui.LauncherUI} 
    realActivity=com.tencent.mm/.ui.LauncherUI 
    askedCompatMode=false 
    lastThumbnail=null lastDescription=null 
    lastActiveTime=19915965 (inactive for 10s) 
    * Hist #9: ActivityRecord{41ba1a30 u0 com.tencent.mm/.ui.LauncherUI} 
     packageName=com.tencent.mm processName=com.tencent.mm 

el nombre del paquete se encuentra en la tercera línea, com.tencent.mm para este ejemplo.

para Android 4.4 y posterior:
la salida de Dumpsys ha cambiado un poco. intente buscar "Pila # 1", el nombre del paquete estaría muy cerca debajo de él.

Además, busque "baseDir", ¡encontrará la ruta completa del archivo apk!

0

Tengo una solución, Recientemente probé. pero encontré que cuando compartes aplicaciones con zapya, almacena extensiones .apk del mismo archivo en la carpeta de aplicaciones del directorio zapya en tu dispositivo donde puedes obtener el archivo apk de la aplicación instalada en tu dispositivo

4

On Nougat (7.0) La versión de Android ejecuta adb shell pm list packages para mostrar los paquetes instalados en el dispositivo. Luego ejecute adb shell pm path your-package-name para mostrar la ruta de la apk. Después de usar adb para copiar el paquete a Descargas adb shell cp /data/app/com.test-1/base.apk /storage/emulated/0/Download. Luego, extraiga la aplicación de Descargas a su máquina ejecutando adb pull /storage/emulated/0/Download/base.apk.

1

Abrir explorador ES -> presione el botón Menú en la esquina superior izquierda (tres franjas horizontales) -> en la sección Bibliotecas, seleccione APLICACIONES.

Por lo tanto, obtendrá la lista de todas las aplicaciones de usuario. Encuentra tu aplicación y selecciónela presionándola durante mucho tiempo. Luego presione "Más" en la esquina inferior derecha y elija "Enviar". Entonces puedes usar diferentes opciones, p. puede elegir "ES Guardar en" para guardar el archivo .apk en su directorio personal o en cualquier otro lugar.

Cuestiones relacionadas