Localización de la instalación de las aplicaciones en Android

- Andrés Cruz

Localización de la instalación de las aplicaciones en Android

Enfoque Moderno: Jetpack Compose y Android App Bundles

En el desarrollo moderno con Jetpack Compose y el uso de Android App Bundles (.aab), la gestión de la memoria ha cambiado drásticamente. Hoy en día, Google Play optimiza la entrega de la aplicación según el dispositivo, y la mayoría de los terminales modernos cuentan con almacenamiento interno de alta velocidad que hace innecesario el uso de installLocation.

Si estás utilizando Compose, el manejo de la ubicación de instalación sigue residiendo en el manifiesto, pero la arquitectura de la app se beneficia más de la **optimización de recursos**:

  • Sin configuración extra: Por defecto, si no defines installLocation, la app se instalará en el almacenamiento interno, garantizando la mejor velocidad para renderizar tus Composables.
  • Dynamic Delivery: En lugar de mover toda la app a la SD, ahora se utilizan módulos de funciones dinámicas que descargan solo lo que el usuario necesita, ahorrando espacio de forma inteligente.

Si aun así necesitas forzar esta opción en un proyecto de Compose, asegúrate de que tu archivo build.gradle.kts tenga un minSdk adecuado:

// build.gradle.kts
android {
    defaultConfig {
        // Compose requiere mínimo API 21, por lo que installLocation 
        // siempre será reconocido por el sistema.
        minSdk = 21 
    }
}

Consideraciones Importantes

  • Rendimiento en Compose: Las aplicaciones de Jetpack Compose dependen de una carga rápida de librerías en tiempo de ejecución. Instalar la app en una Micro SD de baja velocidad podría ocasionar "lag" o retrasos en las animaciones de la interfaz.
  • Seguridad: El archivo .apk en la memoria externa se almacena cifrado, pero los datos sensibles (Data privada, SharedPreferences y Bases de Datos Room) siempre permanecen en la memoria interna por seguridad.
  • Widgets y Servicios: Si tu app utiliza Widgets en el escritorio o servicios en primer plano, no deberías permitir la instalación en memoria externa, ya que si el usuario extrae la tarjeta, estos componentes dejarán de funcionar.

La documentación oficial actualizada sobre la ubicación de instalación puedes encontrarla dando clic aquí.

Tradicionalmente, desde el API Nivel 8, ha sido posible que nuestras aplicaciones puedan ser instaladas en una memoria externa (como una tarjeta Micro SD). Esto fue vital en una era donde el espacio interno de los teléfonos Android era sumamente reducido.

Enfoque Legacy: Configuración en el AndroidManifest.xml

Para permitir la instalación de nuestras aplicaciones en una memoria externa en proyectos basados en vistas (XML), debemos incluir dentro de nuestro archivo AndroidManifest.xml, específicamente en el tag <manifest>, el siguiente atributo:

android:installLocation

Con uno de los siguientes valores:

  • preferExternal: Indica que es preferible que la instalación de nuestra aplicación se realice en un almacenamiento externo (por ejemplo una Micro SD); pero la decisión final la tiene el sistema; es decir el sistema no da garantía de que la aplicación sea instalada en un almacenamiento externo; por supuesto, a partir de Android 2.2 (API Nivel 8) vemos que en el menú Configuraciones >> Aplicaciones >> Administrar aplicaciones >> Mover a teléfono podremos mover fácilmente la aplicación de la memoria interna a una memoria externa y viceversa.
  • auto: Indica que la aplicación puede ser instalada en una memoria externa, pero no tiene preferencia entre una y la otra (memoria interna y memoria externa); al igual que con el valor anterior (preferExternal); el sistema decide donde realizará la instalación y el usuario podrá mover la aplicación de la memoria interna a una memoria externa y viceversa.

Ejemplo de implementación Legacy:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="preferExternal"
    package="com.tu.paquete" >
    ...
</manifest>

Aprende a configurar 'android:installLocation' para permitir la instalación de apps en tarjetas SD. Desde el método Legacy en XML hasta las consideraciones de rendimiento en Jetpack Compose y App Bundles.

Acepto recibir anuncios de interes sobre este Blog.

Andrés Cruz