Lightbuild 프로젝트 구조

Lightbuild 프로젝트는 앱 어셈블리를 앱 코드에서 분리합니다. 앱 모듈('앱 셸')은 앱을 어셈블하고 라이브러리 모듈에는 앱의 기능, UI, 비즈니스 로직이 포함됩니다. 이 페이지에서는 새 Lightbuild 프로젝트의 레이아웃과 각 모듈 및 빌드 파일의 역할을 설명합니다.

프로젝트 레이아웃

기본 Lightbuild 프로젝트 템플릿에는 다음과 같은 빌드 파일과 모듈이 있습니다.

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

프로젝트에는 루트 디렉터리의 project.lightbuild.yaml 파일과 각 모듈의 lightbuild.yaml 파일이라는 세 개의 빌드 구성 파일이 있습니다. 각 모듈에는 resolved.deps 파일도 있습니다. 각 구성 파일의 설정에 관한 자세한 내용은 Lightbuild 구성 참조를 참고하세요.

앱 모듈

Lightbuild 프로젝트는 앱 모듈을 앱의 기반으로 사용합니다. 소스 코드를 포함하지 않고 프로젝트 조립을 처리하므로 '앱 셸'이라고도 합니다. 모든 기능과 로직은 별도의 라이브러리 모듈에 유지되며 앱 셸은 서명 및 최적화와 같은 최종 구성에 중점을 둡니다.

앱 모듈의 lightbuild.yaml 파일은 모듈의 type를 application로 설정하고 다음을 포함하여 최종 앱이 구성되는 방식을 지정합니다.

  • 앱의 ID: 애플리케이션 ID, 버전 코드, 버전 이름
  • 앱의 SDK 요구사항: compileSdk, minSdk, targetSdk 버전
  • 앱이 종속되는 모듈(이 예에서는 app-core)

라이브러리 모듈

라이브러리 모듈에는 앱의 기능, UI 구성요소, 비즈니스 로직과 같이 앱 모듈이 조합하는 코드가 포함되어 있습니다. 새 프로젝트 템플릿에서 app-core 라이브러리 모듈에는 예시 코드가 포함된 MainActivity.kt 파일이 포함되어 있습니다.

라이브러리 모듈의 lightbuild.yaml 파일은 모듈의 type 값을 library로 설정합니다. 라이브러리 모듈은 compileSdk 및 minSdk 버전을 정의하지만 targetSdk 설정은 지원하지 않습니다. 라이브러리 모듈의 lightbuild.yaml 파일은 모듈의 종속 항목, KSP 프로세서, 테스트도 선언합니다.

여러 앱 모듈

프로젝트에는 앱 모듈이 두 개 이상 있을 수 있습니다. Lightbuild는 기존의 의미에서 제품 버전과 맞춤 빌드 유형을 지원하지 않습니다. 대신 dev 및 prod 버전 또는 free 및 paid 버전과 같이 앱의 각 버전에 대해 별도의 앱 모듈을 만듭니다.

각 앱 모듈은 해당 버전에 필요한 라이브러리 모듈에 종속됩니다. 앱 모듈은 라이브러리 모듈을 공유하고, 버전별 코드 및 설정 (예: 별도의 종속 항목 삽입 (DI) 모듈)을 위해 다양한 라이브러리 모듈에 종속되며, 버전에 포함되지 않은 기능의 라이브러리 모듈을 제외할 수 있습니다.

예를 들어 앱의 무료 버전과 유료 버전이 있는 프로젝트에는 다음과 같은 모듈이 있을 수 있습니다.

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

유료 버전의 app-paid/lightbuild.yaml 파일은 모든 유료 버전의 모듈에 종속됩니다.

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

무료 버전의 app-free/lightbuild.yaml 파일은 공유 core 모듈과 자체 DI 모듈에 종속되며 premium 모듈은 제외합니다.

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

각 앱 모듈에는 애플리케이션 ID 및 출시 서명과 같은 자체 설정이 있으므로 각 버전을 별도로 빌드, 설치, 게시할 수 있습니다. 특정 버전을 빌드하려면 build 명령어를 실행할 때 앱 모듈을 지정합니다. 예를 들면 다음과 같습니다.

lightbuild build app-free

확인된 종속 항목

Lightbuild 프로젝트의 각 모듈에는 전이 종속 항목을 비롯한 모듈의 모든 확인된 종속 항목을 기록하는 resolved.deps 파일이 포함되어 있습니다. Lightbuild는 이 파일을 자동으로 생성하므로 프로젝트를 열거나 빌드할 때마다 종속 항목을 동적으로 해결할 필요가 없습니다. 이 파일을 직접 수정해서는 안 됩니다.

프로젝트의 lightbuild.yaml 파일과 함께 resolved.deps 파일을 버전 제어에 체크인합니다.

CI 빌드 등에서 종속 항목을 잠그려면 --locked-dependencies 플래그를 lightbuild resolve 또는 lightbuild test에 추가합니다. 이 플래그를 사용하면 resolved.deps 파일이 모듈의 종속 항목과 일치하지 않는 경우 파일을 업데이트하는 대신 명령어가 실패합니다.

lightbuild resolve --locked-dependencies