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


Estoy tratando de extraer el archivo APK de una aplicación 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 acceder a esta carpeta requiere permiso de root. Luego descubrí que hay numerosas aplicaciones en Google Play Store que parecen tener acceso a los archivos APK incluso en dispositivos no arraigados.

¿Puede alguien decirme cómo es posible? ¿No hay aplicaciones de copia de seguridad que respaldan la Archivos APK sin root?

Author: TylerH, 2012-06-13

10 answers

Acceder a /data/app es posible sin permiso de root; los permisos en ese directorio son rwxrwx x 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 su contenido so por lo que para acceder a él debe saber el nombre del archivo al que accederá. El gestor de paquetes de Android te dirá el nombre del apk almacenado para un paquete determinado.

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

Con el nombre del paquete, podemos obtener el nombre de archivo real 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

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

 331
Author: mah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-30 15:31:23

Android añade 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 da la salida como: package:/data/app/com.example.someapp-2.apk.

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

    adb pull /data/app/com.example.someapp-2.apk
    
 45
Author: Yojimbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-19 14:23:50

No necesita permisos de 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);
}
 16
Author: Sagar Waghmare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-22 14:37:41

Cuando tienes Eclipse para Android developement instalado:

  • Utilice su dispositivo como dispositivo de depuración. En tu teléfono: Ajustes > Aplicaciones > Desarrollo y habilitar la depuración USB, consulte http://developer.android.com/tools/device.html
  • En Eclipse, abra DDMS-window: Window > Open Perspective > Other... > DDMS, véase 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 " Extraer un archivo desde el icono del dispositivo " en la parte superior (a la derecha de las pestañas)
  • Seleccione la carpeta de destino-tada!
 6
Author: anon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-03 12:43:42
  1. compruebe la lista de apk instalados (el siguiente comando también muestra la ruta donde está instalado y el nombre del paquete). adb shell pm list packages-f
  2. use adb pull/package_path /package name / path_in_pc (la ruta del paquete y el nombre del paquete se pueden obtener desde el comando 1 anterior.)
 6
Author: goldy021,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-14 10:40:20

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

 5
Author: Buhiire Keneth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-07 21:05:27

List PackageManager.getInstalledApplications () le dará una lista de las aplicaciones instaladas, y ApplicationInfo.sourceDir es el camino a la .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
Author: Pankaj Arora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-14 10:54:30

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 destino APK

Paso 2: en la ventana PC cmd, 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 volcado.archivo txt con cualquier editor.

Para el dispositivo befor 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 3ra línea, com.tencent.mm para este ejemplo.

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

También, buscar "baseDir", se encuentra la ruta completa del archivo apk!

 0
Author: Swing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-22 02:17:22

Abra ES explorer -> presione el botón de menú en la esquina superior izquierda (tres rayas horizontales) -> en la sección Bibliotecas, elija Aplicaciones.

Por lo tanto, se obtiene la lista de todas las aplicaciones de usuario. Encuentra tu aplicación y selecciónala con un empujón largo. Luego presione " Más "en la esquina baja derecha y elija"Enviar". A continuación, puede utilizar diferentes opciones, por ejemplo, puede elegir "ES Guardar en" con el fin de guardar el .archivo apk a su directorio personal o en cualquier otro lugar.

 -1
Author: JenyaKh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-04 14:26:26

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

 -2
Author: AJD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-01 17:14:16