Cómo configurar la entrega durante la instalación

Los módulos de funciones te permiten separar determinados recursos y funciones del módulo base de tu app y, luego, incluirlos en el paquete de aplicación. Luego, puedes personalizar las opciones de entrega para controlar cuándo y cómo las funciones de tu app descargarán los dispositivos con Android 5.0 (nivel de API 21) o superior.

Ten en cuenta que este tipo de modularización requiere más esfuerzo, y es probable que tengas que refactorizar el código existente de tu app, de modo que deberás considerar con cuidado cuáles de las funciones de la app sería mejor ofrecer a pedido.

Si deseas modularizar gradualmente las funciones de la app con el transcurso del tiempo, sin cambiar el comportamiento de la app ni personalizar las opciones de entrega avanzadas, puedes crear módulos de funciones configurados para la entrega en el momento de la instalación. Es decir, puedes modularizar una función como un módulo de funciones, pero no habilitar opciones avanzadas para que esta esté disponible cuando un usuario instale tu app.

Además, los módulos de funciones que están configurados para la entrega en el momento de la instalación tienen la opción de desinstalarse más adelante si ya no son necesarios. Para ello, se debe configurar como extraíble.

En esta sección, se describe cómo crear un módulo de funciones para la entrega en el momento de la instalación. Antes de comenzar, asegúrate de estar usando Android Studio 3.5 o una versión posterior y el complemento de Gradle para Android versión 3.5.0 o posterior.

Configura un módulo nuevo para la entrega en el momento de la instalación

La forma más fácil de crear un nuevo módulo de funciones es con Android Studio 3.5 o una versión posterior. Dado que los módulos de funciones tienen una dependencia inherente del módulo de la app de base, solo puedes agregarlos a proyectos de apps existentes.

Para agregar un módulo de funciones a tu proyecto de app con Android Studio, haz lo siguiente:

  1. Si aún no lo hiciste, abre tu proyecto de app en el IDE.
  2. Selecciona File > New > New Module en la barra de menú.
  3. En el cuadro de diálogo Create New Module, elige Dynamic Feature Module y haz clic en Next.
  4. En la sección Configure your new module, haz lo siguiente:
    1. En el menú desplegable Base application module, selecciona el módulo básico de tu app.
    2. En Module name, especifica el nombre del módulo. El IDE usa ese nombre para identificar el módulo como un subproyecto de Gradle en tu archivo de configuración de Gradle. Cuando compilas tu paquete de aplicación, Gradle usa el último elemento del nombre del subproyecto para insertar el atributo <manifest split> en el manifiesto del módulo de funciones.
    3. En Package name, especifica el nombre de paquete del módulo. De forma predeterminada, Android Studio sugiere un nombre de paquete que combina el nombre del paquete raíz del módulo básico y el nombre del módulo que especificaste en el paso anterior.
    4. En Minimum API level, elige el nivel mínimo de API que admitirá el módulo. Este valor debe coincidir con el del módulo básico.
  5. Haz clic en Next.
  6. En la sección Module Download Options, haz lo siguiente:

    1. Especifica el título del módulo con hasta 50 caracteres. El módulo base de la app debe incluir el título del módulo como recurso de strings, que se puede traducir. Cuando se crea el módulo con Android Studio, el IDE agrega el recurso de cadenas al módulo base y, luego, inserta la siguiente entrada en el manifiesto del módulo de funciones:

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. En el menú desplegable, en Install-time inclusion, selecciona Include module at install-time. Android Studio introduce lo siguiente en el manifiesto del módulo para reflejar tu elección:

      <dist:module ... >
        <dist:delivery>
            <dist:install-time />
        </dist:delivery>
      </dist:module>
      

      Puedes obtener información para crear un módulo de funciones que puedas descargar después de instalar la app en Cómo configurar la entrega a pedido.

    3. Marca la casilla junto a Fusing si deseas que ese módulo esté disponible para los dispositivos que ejecutan Android 4.4 (nivel de API 20) y versiones anteriores, y se lo incluya en APK múltiples. Eso significa que puedes omitir la fusión en dispositivos que no admiten la descarga ni la instalación de APK divididos. Android Studio introduce lo siguiente en el manifiesto del módulo para reflejar tu elección:

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  7. Haz clic en Finish.

Cuando Android Studio termine de crear tu módulo, abre el panel Project y revisa el contenido (selecciona View > Tool Windows > Project en la barra de menú). El código, los recursos y la organización predeterminados deben ser similares a los del módulo de app estándar.

Haz que un módulo de tiempo de instalación sea extraíble

Puede ser útil crear módulos de funciones para la entrega en el momento de la instalación con la opción de desinstalarlos más adelante si ya no se requieren. Por ejemplo, a fin de reducir el tamaño de instalación de tu app, puedes modularizar el contenido necesario para el entrenamiento o la integración y, luego, desinstalar el módulo de funciones mediante la API de Play Core después de que se haya configurado el usuario para usar tu app.

Los módulos del momento de la instalación no se pueden extraer de forma predeterminada. Para marcar un módulo como extraíble y permitir su desinstalación, agrega la etiqueta removable y configura su valor como true:

<dist:module ... >
  <dist:delivery>
      <dist:install-time>
          <dist:removable dist:value="true"/>
      </dist:install-time>
  </dist:delivery>
</dist:module>