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.
- Cómo iniciar servidor de adb sobre tcp mediante programación
- No se puede abrir el directorio de datos en el teléfono Android con raíz
- Android (get) variables ambientales en Java
- Android: Modificar las preferencias compartidas de otra aplicación
- Actividades no exportadas: lanzadas en emuladores; SecurityException en los teléfonos
¿Puede alguien decirme cómo esto es posible? ¿No hay aplicaciones de copia de seguridad que respalden los archivos APK sin root?
- ¿Cómo acceder a cadenas privadas del sistema operativo Android mediante programación?
- Establecer proxy WiFi sin rooting teléfono
- Ejecutar el servidor NodeJs en Android
- Genymotion: Editar / system / etc / hosts file
- Desarrollo de Android: desactivar "mostrar notificación" mediante programación con permiso de root?
- Ejecutar una aplicación con permiso de root en Android
- Alternar el GPS mediante programación Android 4.4
- Almacenamiento de credenciales en la aplicación de Android
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 :
-
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
. -
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!
- 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
- 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!
- ¿Cómo paso un objeto de una actividad a otra en Android?
- ¿Cómo crear un divisor simple en el nuevo NavigationView?