¿Cómo obtengo el APK de una aplicación instalada sin acceso de root?


196

Estoy tratando de extraer el archivo APK de una aplicación de Android instalada SIN permisos de root.

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

¿Alguien puede decirme 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 stackoverflow.com/a/12197924/1016544
Wahib Ul Haq




3
Mi lectura de esto es que @pinas estaba preguntando cómo codificar esto programáticamente, haciendo referencia a aplicaciones que lo hacen como si dijera "Estas aplicaciones lo hacen, pero ¿cómo?". La razón "en espera" aquí es incorrecta en mi opinión debido a eso.
Richard Le Mesurier

Respuestas:


380

El acceso a / data / app es posible sin permiso de root; los permisos en ese directorio son rwxrwx - x. El permiso de ejecución 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 su contenido, por lo que para acceder debe conocer el nombre del archivo al que accederá. El administrador de paquetes de Android le dirá el nombre de la apk almacenada para un paquete dado.

Para hacer esto desde la línea de comandos, use adb shell pm list packagespara obtener la lista de paquetes instalados y encontrar 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, finalmente podemos extraer el adb usando adb pull full/directory/of/the.apk

Gracias a @tarn por señalar que bajo Lollipop, la ruta apk será /data/app/your-package-name-1/base.apk


33
Para hacer esto desde la línea de comandos, use adb shell pm list packagespara obtener la lista de paquetes instalados, elija el paquete deseado, añádalo -1.apky extráigalo /data/app. Ejemplo: si el nombre del paquete es org.mozilla.firefox, use adb pull /data/app/org.mozilla.firefox-1.apk.
sschuberth

11
Para obtener el nombre de archivo real de la APK, use adb shell pm path your-package-name. Vea esta pregunta para obtener una respuesta más detallada stackoverflow.com/questions/4032960/…
Yojimbo

2
para lollipop la ruta apk será /data/app/your-package-name-1/base.apk
tarn

Esto no funciona para mi. Me sale el siguiente error:adb: error: remote object '/data/app/com.Slack-1/base.apk' does not exist
0xcaff

1
@ 0xcaff Android ha cambiado bastante en los 5 años desde que se proporcionó esta respuesta; Quizás este camino es uno de esos cambios. Debería poder iniciar sesión y ubicar el archivo manualmente para encontrar la ruta apropiada para su versión del sistema operativo.
mah

55

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

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

    adb shell pm path com.example.someapp

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

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

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

La ubicación de APK después de una extracción exitosa será en ../sdk/platform-tools/base.apk en su PC / computadora portátil.


44
Puede confirmar que esta solución funcionó en un dispositivo no rooteado, ¡aunque requiere el 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

¿En qué carpeta de la máquina local del extractor entra el apk? EDIT: NVM, cualquier directorio que se encontraba al hacer el tirón ADB ...
Adam Johns

@IgorGanapolsky intente usar adb pull /data/app/com.example.someapp-2/base.apk
Chris - Jr

@zelanix después de hacer adb pull, donde puedo c el archivo .apk. Gracias
Vijaya Varma Lanke

21

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

Puedes 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);
}

7
  1. verifique la lista de apk instalados (el siguiente comando también enumera la ruta donde está instalado y el nombre del paquete). adb shell pm list paquetes -f
  2. use adb pull / package_path / package name / path_in_pc (la ruta del paquete y el nombre del paquete se pueden obtener del comando anterior 1).

6

Cuando tenga instalado Eclipse para el desarrollo de Android:

  • Use su dispositivo como dispositivo de depuración. En su teléfono: Configuración> Aplicaciones> Desarrollo y habilite la depuración de USB, consulte http://developer.android.com/tools/device.html
  • En Eclipse, abra la ventana DDMS: Ventana> Abrir perspectiva> Otro ...> DDMS, vea http://developer.android.com/tools/debugging/ddms.html
  • Si no puede ver su dispositivo, intente (re) instalar el controlador USB para su dispositivo
  • En el panel central, seleccione la pestaña "Explorador de archivos" y vaya a sistema> aplicación
  • Ahora puede seleccionar uno o más archivos y luego hacer clic en el icono "Extraer un archivo del dispositivo" en la parte superior (derecho a las pestañas)
  • Seleccione la carpeta de destino - tada!

Solo hay aplicaciones del sistema (también conocidas como aplicaciones preinstaladas) en / system / app.
arne.jans

6

En Nougat (7.0), la versión de Android se ejecuta adb shell pm list packagespara enumerar los paquetes instalados en el dispositivo. Luego corre adb shell pm path your-package-namepara mostrar el camino 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, ejecute el apk de Descargas a su máquina adb pull /storage/emulated/0/Download/base.apk.


2

Conseguí 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)

0

List 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

0

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 tu dispositivo, abre el APK objetivo

Paso 2 : en la ventana de cmd de PC, escribe 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 dispositivos con Android 4.4:
el comienzo del archivo se verí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 está en la tercera línea, com.tencent.mm para este ejemplo.

para Android 4.4 y
versiones posteriores: 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!


-1

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

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


-2

O puede obtener 'Transferencia de archivos Bluetooth' desde Google Play y configurar la carpeta de inicio en /system/. Entonces incluso puedes ir a /.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.