Obtener APK de la aplicación instalada

Estoy buscando una manera de extraer el archivo APK de una aplicación Android instalado sin permiso de root.

Pensé que esto era imposible, porque todos los archivos APK para aplicaciones no pertenecientes al sistema se encuentran en / data / app, y acceder a esta carpeta requiere permiso de root. Entonces descubrí que hay numerosas aplicaciones en Google Play que parecen tener acceso a los archivos APK incluso en dispositivos no arraigados.

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

Acceso a / data / app 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 su contenido, por lo que para acceder a él debe conocer el nombre del archivo al que va a acceder. El administrador de paquetes de Android te dirá el nombre del apk guardado para un paquete determinado.

Para hacer esto desde la línea de comandos, utilice los adb shell pm list packages de la lista de la adb shell pm list packages para conseguir la lista de paquetes instalados y encontrar el paquete deseado.

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

Y conociendo el directorio completo, podemos finalmente tirar del adb usando adb pull full/directory/of/the.apk

Agradezco 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 enraizado :

  1. Obtenga el nombre completo de 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 desde el 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.

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

Hay una aplicación en Google Play Store llamada "Apk extracter". Por esta aplicación puede obtener el archivo .apk de la aplicación instalada. ¡Consiga y disfrute!

Cuando tenga instalado Eclipse para Android:

  • Utilice su dispositivo como dispositivo de depuración. En tu teléfono: Configuración> Aplicaciones> Desarrollo y habilita la depuración USB, consulta http://developer.android.com/tools/device.html.
  • En Eclipse, abra la ventana DDMS: Ventana> Perspectiva abierta> Otros …> DDMS, consulte 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 "File Explorer" y vaya al sistema> app
  • Ahora puede seleccionar uno o más archivos y luego hacer clic en el icono "Extraer un archivo desde el dispositivo" en la parte superior (a la derecha de las pestañas)
  • Seleccione carpeta de destino – tada!
  1. Compruebe la lista de los apk instalados (el siguiente comando también enumerará la ruta donde se instala y el nombre del paquete). Adb shell pm lista paquetes -f
  2. Use adb pull / package_path / nombre del paquete / path_in_pc (ruta del paquete y nombre del paquete que uno puede obtener del comando superior 1.)

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

Tengo una solución, recientemente he intentado. Pero he descubierto que cuando compartes aplicaciones con zapya, almacena las extensiones .apk del mismo archivo en la carpeta apps del directorio zapya en tu dispositivo donde puedes obtener el archivo apk de la aplicación instalada en tu dispositivo

Lista PackageManager.getInstalledApplications () le dará una lista de las aplicaciones instaladas, y ApplicationInfo.sourceDir es la ruta de acceso 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 APK en un dispositivo no root. No es tan elegante, pero funciona todo el tiempo.

Paso 1 : en el dispositivo, abra el APK de destino

Paso 2 : en la ventana PC cmd, escriba este comando:

  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 antes de Android 4.4:
El principio del archivo se parecería a esto:

 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 3ª 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 "Stack # 1", el nombre del paquete estaría muy cerca debajo de él.

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

  • Actividad de superusuario no encontrada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.