¿Android mantiene los archivos .apk? ¿si es así, donde?

187

Después de que Android instala una aplicación desde Marketplace, ¿mantiene el archivo .apk?

¿Existe una ubicación estándar donde Android guardaría dichos archivos?

Gubatron
fuente

Respuestas:

125

Las aplicaciones preinstaladas están en la /system/appcarpeta. Las aplicaciones instaladas por el usuario están en /data/app. Supongo que no puedes acceder a menos que tengas un teléfono rooteado. No tengo un teléfono rooteado aquí, pero prueba este código:

public class Testing extends Activity {
    private static final String TAG = "TEST";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        File appsDir = new File("/data/app");

        String[] files = appsDir.list();

        for (int i = 0 ; i < files.length ; i++ ) {
            Log.d(TAG, "File: "+files[i]);

        }
    }

Enumera los apks en mi magia htc rooteada y en el emu.

Macarse
fuente
Esto funcionó como un encanto en Motorola Droid y también en Nexus One, ambos no rooteados.
Gubatron
Ok, nunca dijiste para qué los querías :)
Macarse
Quiero poder leerlos y hacer cosas con ellos. Por suerte son legibles.
Gubatron
3
Lo bueno es que no solo los archivos son "listables", también son legibles, por lo que se adaptarán a mi propósito.
Gubatron
He leído en otra parte que los APK en / data / app solo corresponden a aplicaciones descargadas de Play store. ¿Es correcto o incluye algo que haya instalado el usuario?
Christian
135

Puede usar el administrador de paquetes ( pm) adb shellpara enumerar los paquetes:

adb shell pm list packages | sort

y para mostrar dónde está el .apkarchivo:

adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk

Y adb pullpara descargar el apk.

adb pull data/app/com.king.candycrushsaga-1/base.apk
Mariusz Jamro
fuente
2
cada aplicación tiene una carpeta con el mismo nombre que el paquete pero '-1' o '-2' al final, ¿Alguna idea de por qué?
shadygoneinsane
Para especificar la ruta o el nombre del archivo de destino,adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
manikanta
95

Si solo desea obtener un archivo APK de algo que instaló anteriormente, haga lo siguiente:

  1. Obtén AirDroid de Google Play
  2. Acceda a su teléfono usando AirDroid desde el navegador web de su PC
  3. Vaya a Aplicaciones y seleccione la aplicación instalada
  4. Haga clic en el botón "descargar" para descargar la versión APK de esta aplicación desde su teléfono

No necesita rootear su teléfono, usar adbo escribir nada.

Jan Przybylo
fuente
2
Votado en contra porque esto realmente no responde la pregunta. ¿Qué pasaría si el OP quisiera usar ADB, para que pueda usarse en dispositivos donde la depuración está autorizada, pero la contraseña se olvidó o la pantalla se rompió?
Hack5
Una forma más fácil de obtener el archivo apk para un dispositivo sin raíz.
fahmi hammadi
Gracias Votado porque responde a la pregunta diciendo de alguna manera: "Los mantiene en / datos, pero solo si realiza el procedimiento X"
ntg
26

No hay una ubicación estándar, sin embargo, puede usar PackageManager para obtener información sobre los paquetes y la clase ApplicationInfo que puede obtener desde allí tiene información diversa sobre un paquete en particular: la ruta a su .apk, la ruta a su directorio de datos, la ruta a un .apk de solo recursos (para aplicaciones bloqueadas hacia adelante), etc. Tenga en cuenta que puede o no tener permiso para leer estos directorios dependiendo de su relación con la otra aplicación; sin embargo, todas las aplicaciones pueden leer el recurso .apk (que también es el .apk real para la aplicación sin bloqueo de reenvío).

Si solo está hurgando en el shell, las aplicaciones actualmente sin bloqueo de reenvío se encuentran en /data/app/.apk. El usuario de shell puede leer un .apk específico, aunque no puede enumerar el directorio. En una versión futura, la convención de nomenclatura cambiará ligeramente, así que no cuente con que siga siendo la misma, pero si obtiene la ruta del archivo .apk desde el administrador de paquetes, puede usarlo en el shell.

hackbod
fuente
2
¿Qué es una "aplicación bloqueada hacia adelante"?
Tony Chan
1
Es un antiguo mecanismo de protección de copia que instaló el .apk con permisos que solo permitían que la aplicación lo leyera.
Hackbod
18

Las aplicaciones preinstaladas generalmente están en / system / app y las aplicaciones instaladas por el usuario están en / data / app.

Puede usar "adb pull", pero necesita conocer la ruta completa del archivo APK. En el emulador, puede obtener un listado de directorio usando "adb shell" + "ls". Pero en un dispositivo Android, no podrá hacerlo en la carpeta "/ data" por razones de seguridad. Entonces, ¿cómo averiguar la ruta completa del archivo APK?

Puede obtener una lista completa de todas las aplicaciones instaladas escribiendo un programa que consulte el PackageManager. Fragmento de código corto a continuación:

PackageManager  pm = getPackageManager();
List<PackageInfo> pkginfo_list = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
List<ApplicationInfo> appinfo_list = pm.getInstalledApplications(0);
for (int x=0; x < pkginfo_list.size(); x++){             
  PackageInfo pkginfo = pkginfo_list.get(x);
  pkg_path[x] = appinfo_list.get(x).publicSourceDir;  //store package path in array
}

También puede encontrar aplicaciones que brinden dicha información. Hay muchos de ellos. Prueba este (AppSender).

xmaslatte
fuente
9

Si está buscando la ruta de una aplicación específica, una solución rápida y sucia es simplemente obtener el informe de errores:

$ adb bugreport | grep 'dir=/data/app' 

No sé si esto proporcionará una lista exhaustiva, por lo que puede ser útil ejecutar primero la aplicación.

tomwhipple
fuente
9

Instalar desde el mercado

Es el comportamiento del mercado si mantener la apk después de la instalación. Google Play no mantiene la apk después de la instalación. Otros mercados de terceros pueden tener comportamientos diferentes.

Instalar desde la herramienta de desarrollo / depuración (adb, eclipse, android studio)

Cuando instalamos el apk desde la herramienta de depuración, invocamos directamente adb installo desde eclipse / android studio, el apk se transferirá ( adb push) a un directorio público de lectura y escritura, por lo general /data/local/tmp/. Después de eso, la herramienta usará el pmcomando para instalar, eliminará el apk temporal /data/local/tmp/después de la instalación exitosa.

Podríamos obtener esta información de la salida de depuración como la siguiente.

$ adb install bin/TestApplication.apk 
3155 KB/s (843375 bytes in 0.260s)
    pkg: /data/local/tmp/TestApplication.apk
Success

Cómo el sistema mantiene el apk

Por supuesto, el sistema tiene que almacenar todas las aplicaciones en algún lugar. Hay tres lugares para que el sistema mantenga las aplicaciones basadas en los diferentes tipos de aplicaciones:

  1. para la aplicación de stock

    Por lo general, estos se envían en el dispositivo por fabricación, incluida la aplicación principal para el sistema en ejecución y el servicio de Google, puede encontrarlos en el directorio /system/appy /system/priv-app.

  2. aplicación instalada por el usuario

    La mayoría de los apks entran en esta categoría. Por lo general, estos usuarios los instalan desde el mercado o adb installsin -sopción. Puede encontrarlos en el directorio /data/appde un dispositivo rooteado.

  3. aplicación en tarjeta sd

    Si el apk habilita su ubicación de instalación en sdcard con android:installLocation="auto"su manifiesto, la aplicación se puede mover a sdcard desde el menú del administrador de aplicaciones del sistema. Estas aplicaciones generalmente se encuentran en la carpeta segura de sdcard/mnt/sdcard/asec .

    Otra forma de forzar la ubicación de instalación a sdcard es usar el comando adb install -s apk-to-install.apk.

Como nota, los archivos para la aplicación preinstalada ya no están en un solo .apkarchivo. Hay una carpeta que contiene archivos para cada aplicación preinstalada en el directorio /system/appo /system/priv-apppara la versión más reciente de Android.

alijandro
fuente
8

Puede extraer aplicaciones con ADB. Están en / data / App /, creo.

adb pull (location on device) (where to save)

Tenga en cuenta que debe rootear su teléfono para extraer aplicaciones protegidas contra copia.

Bryan Denny
fuente
5

En / data / app pero para protección de copia no creo que puedas acceder a él.

Estanque Robby
fuente
2
Entonces, ¿cómo funciona exactamente una aplicación que permite compartir APK a través de Bluetooth? ¿Cómo lo hicieron?
Un usuario de SO
5

Si está rooteado, descargue la aplicación Root Explorer. El mejor administrador de archivos para usuarios rooteados. De todos modos, Sistema / aplicación tiene todas las aplicaciones predeterminadas que vienen con el teléfono, y datos / apk tiene todas las aplicaciones de las aplicaciones que ha instalado. Simplemente mantenga presionada la apk que desee (mientras está en Root Explorer), acceda a su carpeta / sdcard y simplemente pegue.

Tanzer
fuente
4

Use esto para enumerar todos los .apks en / data / app /

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
gilm
fuente
4
  • datos / aplicación
  • sistema / aplicación
  • system / priv-app
  • mnt / asec (cuando está instalado en la tarjeta sd)

Puede extraer los .apks de cualquiera de ellos:

adb pull / mnt / asec

Ignorante
fuente
3

Los archivos .apk se pueden ubicar en el directorio / data / app /. Usando ES File Explorer podemos acceder a estos archivos .APK.

vgokul129
fuente
2

si está usando eclipse goto DDMS y luego el explorador de archivos allí verá la carpeta Sistema / Aplicaciones y las aplicaciones están allí

Jawad Amjad
fuente
0

Cuando instalé mi aplicación en el emulador, me mostró el archivo .apk en

data / app Luego usé ls data / app // para ver si existe o no

Después de instalar su aplicación, simplemente use el comando ls vie shell y verifique el directorio deseado, pero depende del tipo de aplicación que esté intentando instalar. Usé este método para instalar Point si algo está mal.

Deviador
fuente
También estoy tratando de localizar las aplicaciones, pero lo que encontré es que no puedes encontrar todas las aplicaciones, por lo que sugiero el método de enrutamiento. No pude obtener todas las aplicaciones instaladas. Por lo tanto, es mejor rootear su teléfono y obtener todas las aplicaciones con Titanium Backup y obtener más control sobre su teléfono.
Jawad Amjad
0

Otra forma de obtener los apkmensajes de correo electrónico que no puede encontrar, en un dispositivo rooteado es con la caja de herramientas rom .

Realice una copia de seguridad con el administrador de aplicaciones, luego vaya storage/emulated/appmanagery compruebe la copia de seguridad de la aplicación del sistema o la copia de seguridad de la aplicación del usuario .

carga
fuente
0

Para buscar apk, descargue e instale el remitente de la aplicación Bluetooth desde Play Store. Una vez que se complete la instalación, abra el remitente de la aplicación Bluetooth. Mostrará todas las aplicaciones (.apk)instaladas en su dispositivo, luego puede transferir fácilmente la aplicación a su PC a través de Bluetooth.

Prem
fuente
0

A diferencia de lo que está escrito en la respuesta elegida, no necesita root y es posible obtener los APK de las aplicaciones instaladas, que es como lo hice en mi aplicación ( aquí ). Ejemplo:

List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);

Luego, para cada uno de los elementos de la lista, puede acceder a packageInfo.applicationInfo.sourceDir , que es la ruta completa del APK de la aplicación instalada.

desarrollador de Android
fuente
-1

Bueno, llegué a esta publicación porque quería reinstalar alguna aplicación que me gustaba mucho. Si este es su caso, simplemente vaya a Google Play y busque Mis aplicaciones, la pestaña Todos, y encontrará la manera de reinstalar alguna aplicación que le haya gustado. Me enfrenté a un problema que no pude encontrar al buscar una aplicación, pero estaba allí en Mis aplicaciones para poder reinstalarla en mi nuevo móvil;)

Sergio Abreu
fuente