¿Cómo obtengo el APK de una aplicación instalada sin acceso a la raíz?

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 sean 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 la tienda de Google Play que parecen tener acceso a los archivos APK, incluso en dispositivos no rooteados.

¿Puede alguien decirme cómo es esto posible? ¿No hay aplicaciones de respaldo que respalden los archivos APK sin root?

El 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 comando, use los adb shell pm list packages de la lista adb shell pm list packages para 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 archivo APK utilizando 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

Android agrega un número de secuencia al nombre del paquete para producir el nombre del archivo APK final (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 la ruta completa del archivo APK para el paquete deseado.

     adb shell pm path com.example.someapp 

    Esto da el resultado 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 

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

Cuando tienes instalado Eclipse para Android development:

  • 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 DDMS-window: Ventana> Abrir perspectiva> Otro …> DDMS, consulte http://developer.android.com/tools/debugging/ddms.html
  • Si no puedes ver tu dispositivo, intenta (re) instalar el controlador USB para tu 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 (a la derecha de las tabs)
  • Seleccione la carpeta de destino – tada!
  1. verifique 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. utilice adb pull / package_path / package name / path_in_pc (ruta del paquete y nombre del paquete que se puede obtener desde el comando 1 anterior).

En la versión Android de Nougat (7.0), ejecute adb shell pm list packages para enumerar 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, copie el paquete en 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 .

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 

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

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 redireccionar a un archivo.

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

para dispositivo antes de 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 versiones posteriores:
la producción de Dumpsys ha cambiado un poco. Intente buscar “Pila n. ° 1”, el nombre del paquete estaría muy cerca debajo de él.

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

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

Por lo tanto, obtienes 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”. Luego puede usar diferentes opciones, por ejemplo, puede elegir “ES Guardar en” para guardar el archivo .apk en su directorio personal o en cualquier otro lugar.

O puede obtener ‘Bluetooth File Transfer’ de Google Play y configurar la carpeta de inicio en /system/ . Entonces puedes incluso ir a / .