Estructura del proyecto de Lightbuild

Un proyecto de Lightbuild separa el ensamblado de la app del código de la app: un módulo de app (o "shell de la app") ensambla tu app, y los módulos de biblioteca contienen las funciones, la IU y la lógica empresarial de la app. En esta página, se describe el diseño de un nuevo proyecto de Lightbuild y la función de cada módulo y archivo de compilación.

Diseño del proyecto

La plantilla de proyecto predeterminada de Lightbuild tiene los siguientes archivos y módulos de compilación:

MyApp/
├── project.lightbuild.yaml  # Project-wide settings
├── app/                     # App module
│   ├── lightbuild.yaml
│   └── resolved.deps
└── app-core/                # Library module
    ├── lightbuild.yaml
    ├── resolved.deps
    └── src/                 # The app's source code

El proyecto tiene tres archivos de configuración de compilación: un archivo project.lightbuild.yaml en el directorio raíz y un archivo lightbuild.yaml en cada módulo. Cada módulo también tiene un archivo resolved.deps. Para obtener detalles sobre los parámetros de configuración de cada archivo de configuración, consulta la referencia de configuración de Lightbuild.

Módulo de la app

Los proyectos de Lightbuild usan un módulo de app como base para tu app. También se conoce como "shell de la app" porque controla el ensamblado del proyecto sin contener ningún código fuente. Todas las funciones y la lógica permanecen en módulos de biblioteca independientes, y la shell de la app se enfoca en la configuración final, como la firma y la optimización.

El archivo lightbuild.yaml del módulo de la app establece el type del módulo en application y especifica cómo se arma la app final, lo que incluye lo siguiente:

  • La identidad de la app: su ID de aplicación, código de versión y nombre de versión
  • Los requisitos del SDK de la app: sus versiones compileSdk, minSdk y targetSdk
  • Los módulos de los que depende la app, en este ejemplo, app-core

Módulos de biblioteca

Los módulos de biblioteca contienen el código que ensambla el módulo de la app, como las funciones, los componentes de la IU y la lógica empresarial de la app. En la plantilla de proyecto nueva, el módulo de biblioteca app-core contiene el archivo MainActivity.kt con código de ejemplo.

El archivo lightbuild.yaml de un módulo de biblioteca establece el valor type del módulo en library. Los módulos de biblioteca definen sus versiones de compileSdk y minSdk, pero no admiten el parámetro de configuración targetSdk. El archivo lightbuild.yaml de un módulo de biblioteca también declara las dependencias, los procesadores de KSP y las pruebas del módulo.

Varios módulos de la app

Un proyecto puede tener más de un módulo de app. Lightbuild no admite variantes de productos ni tipos de compilación personalizados en el sentido tradicional. En cambio, creas un módulo de app independiente para cada versión de tu app, como las versiones dev y prod, o las versiones free y paid.

Cada módulo de app depende de los módulos de biblioteca que necesita su versión. Los módulos de app pueden compartir módulos de biblioteca, depender de diferentes módulos de biblioteca para el código y la configuración específicos de la versión (como módulos de inserción de dependencias [DI] independientes) y omitir módulos de biblioteca para las funciones que no incluye una versión.

Por ejemplo, un proyecto con versiones gratuita y pagada de una app podría tener los siguientes módulos:

MyApp/
├── project.lightbuild.yaml
├── app-free/   # App module for the free version
├── app-paid/   # App module for the paid version
├── core/       # Library module that both versions use
├── di-free/    # DI module for the free version
├── di-paid/    # DI module for the paid version
└── premium/    # Library module for paid-only features

El archivo app-paid/lightbuild.yaml de la versión pagada depende de todos los módulos de la versión pagada:

android:
  applicationId: com.example.myapp.paid
  dependencies:
    module:
      - //core
      - //di-paid
      - //premium

El archivo app-free/lightbuild.yaml de la versión gratuita depende del módulo core compartido y de su propio módulo de DI, y deja de lado el módulo premium:

android:
  applicationId: com.example.myapp.free
  dependencies:
    module:
      - //core
      - //di-free

Cada módulo de app tiene su propia configuración, como el ID de aplicación y la firma de la versión, para que puedas compilar, instalar y publicar cada versión por separado. Para compilar una versión específica, especifica su módulo de app cuando ejecutes el comando build. Por ejemplo:

lightbuild build app-free

Dependencias resueltas

Cada módulo de un proyecto de Lightbuild incluye un archivo resolved.deps, que registra todas las dependencias resueltas del módulo, incluidas las dependencias transitivas. Lightbuild genera este archivo automáticamente para que no necesite resolver las dependencias de forma dinámica cada vez que abres o compilas tu proyecto. No debes editar este archivo de forma manual.

Registra tus archivos resolved.deps en el control de versiones, junto con los archivos lightbuild.yaml de tu proyecto.

Para bloquear tus dependencias, por ejemplo, en una compilación de CI, agrega la marca --locked-dependencies a lightbuild resolve o lightbuild test. Con esta marca, el comando falla si un archivo resolved.deps no coincide con las dependencias del módulo, en lugar de actualizar el archivo:

lightbuild resolve --locked-dependencies