Lightbuild 構成リファレンス

Lightbuild プロジェクトのビルド構成は、YAML ファイル(プロジェクトのルート ディレクトリにある project.lightbuild.yaml ファイルと、各モジュールにある lightbuild.yaml ファイル)で構成されます。このページでは、各ファイルの設定について説明します。

プロジェクト ファイル

グローバル プロジェクト設定は、プロジェクトのルート ディレクトリにある project.lightbuild.yaml ファイルにあります。次に例を示します。

project:
  name: MyApp

modules:
  - app
  - app-core

repositories:
  - google
  - mavenCentral

lightbuild:
  version: 0.0.30

build:
  java:
    version: 17
  kotlin:
    version: 2.3.20
  jvmTarget: "17"

次の表に、これらの設定を示します。

設定 説明
project.name プロジェクトの名前(例: MyApp)。Android Studio では、この名前が [Project] ウィンドウのルートとして表示されます。Kotlin DSL の rootProject.name と同様に、アプリの名前やアプリケーション ID とは異なります。
modules プロジェクト内のモジュール(アプリ モジュール(app)やライブラリ モジュール(app-core)など)。
repositories Lightbuild が依存関係を解決するリモート リポジトリ。詳細については、リポジトリをご覧ください。
lightbuild.version プロジェクトで使用される Lightbuild のバージョン。
build.kotlin.version プロジェクトで使用される Kotlin のバージョン。
build.java.version プロジェクトに必要な Java コンパイラのバージョン。
build.jvmTarget 生成された JVM バイトコードのターゲット バージョン。

リポジトリ

repositories を使用して、Lightbuild が依存関係を解決するリポジトリを一覧表示します。組み込みの google リポジトリと mavenCentral リポジトリを一覧表示し、maven を使用してカスタム Maven リポジトリを追加できます。

repositories:
  - google
  - mavenCentral
  - maven:
      name: "Example Repo"
      url: "https://maven.example.com/releases"

maven リポジトリには次の設定があります。

設定 説明
name リポジトリの名前。
url リポジトリの URL。
credentials 省略可。local.properties ファイル内のリポジトリのユーザー名とパスワードにマッピングされるキー。詳細については、リポジトリの認証情報をご覧ください。

リポジトリの認証情報

Maven リポジトリでユーザー名とパスワードが必要な場合は、リポジトリに credentials ブロックを追加します。username と password の値は認証情報そのものではなく、プロジェクトの local.properties ファイルで定義するキーです。

repositories:

  - google
  - mavenCentral
  - maven:
      name: "Internal Repo"
      url: "https://maven.example.com/releases"
      credentials:
        username: internalRepoUser
        password: internalRepoPassword

次に、プロジェクトの local.properties ファイルで、各キーをその値にマッピングします。REPO_USERNAME と REPO_PASSWORD は、実際の認証情報に置き換えます。

# Also define sdk.dir, the path to your Android SDK.
internalRepoUser=REPO_USERNAME
internalRepoPassword=REPO_PASSWORD

モジュール ファイル

各モジュールのディレクトリには、モジュールの設定を定義する lightbuild.yaml ファイルがあります。次の表に、最上位の設定を示します。

設定 説明
platform モジュールがターゲットとするプラットフォーム: android。
type モジュール タイプ。アプリ モジュールの場合は application、ライブラリ モジュールの場合は library。詳細については、Lightbuild プロジェクトの構造をご覧ください。
optionalFeatures モジュールで有効にするオプション機能(プロトコル バッファをサポートする com.android.tools.lightbuild.protobuf など)。詳細については、プロトコル バッファをご覧ください。
android モジュールの Android 設定。詳しくは、Android の設定をご覧ください。

Android の設定

android ブロックには、モジュールの Android ビルド設定が含まれています。

設定 説明
namespace モジュールの名前空間。詳細については、名前空間を設定するをご覧ください。
compileSdk モジュールがコンパイルされる API レベル。詳しくは、SDK のバージョンをご覧ください。
minSdk モジュールがサポートする最小 API レベル。
targetSdk アプリがターゲットとする API レベル。アプリ モジュールでのみサポートされます。
applicationId アプリのアプリケーション ID。アプリ モジュールで設定します。
versionCode アプリのバージョン コード。アプリ モジュールで設定します。
versionName アプリのバージョン名。アプリ モジュールで設定します。
packaging アプリの debug ビルドと release ビルドをパッケージ化するための設定(リリース署名など)。アプリ モジュールでのみサポートされます。詳しくは、パッケージングをご覧ください。
dependencies 他のモジュールや外部ライブラリに対するモジュールの依存関係。詳細については、依存関係をご覧ください。
kspProcessors モジュールのコードを生成する KSP プロセッサ。詳しくは、KSP プロセッサをご覧ください。
tests モジュールのローカルテストとインストルメンテーション テスト。詳細については、テストをご覧ください。

SDK バージョン

compileSdk、minSdk、targetSdk の設定を version.release.apiLevel の API レベルとして指定します。たとえば、次の設定では、API レベル 36 に対してモジュールをコンパイルし、API レベル 24 以降をサポートし、対象 API レベル 36 をターゲットにしています。

android:
  compileSdk:
    version:
      release:
        apiLevel: 36
  minSdk:
    version:
      release:
        apiLevel: 24
  targetSdk:
    version:
      release:
        apiLevel: 36

targetSdk 設定をサポートしているのはアプリ モジュールのみです。ライブラリ モジュールでは、compileSdk と minSdk の設定のみを定義します。

依存関係

dependencies ブロックでモジュールの依存関係を宣言します。

  • module: プロジェクト内の他のモジュール。// の後にモジュール名を続けて記述します(例: //app-core、//features/search)。
  • maven: 外部ライブラリ。group:artifact:version 形式の Maven 座標として記述されます。

たとえば、次の設定では、app-core モジュールと AndroidX Core KTX ライブラリへの依存関係を追加しています。

android:
  dependencies:
    module:
      - //app-core
    maven:
      - androidx.core:core-ktx:1.18.0

依存関係の設定

デフォルトでは、モジュールは各依存関係に対してコンパイルされ、実行時にそれらを含みますが、依存するモジュールには公開しません。モジュールが依存関係を使用する方法を変更するには、依存関係の後にコロンを追加し、その下に compile 設定、runtime 設定、またはその両方を追加します。

android:
  dependencies:
    module:
      - //data:
          compile: public
    maven:
      - androidx.core:core-ktx:1.18.0
      - androidx.annotation:annotation:1.9.1:
          runtime: off

この例では、このモジュールに依存するモジュールも data モジュールのクラスを使用できます。Jetpack Annotation ライブラリは、このモジュールのコンパイルにのみ使用されます。Core KTX はデフォルト設定を使用します。

compile 設定は、依存関係に対してコンパイルするモジュールを制御します。

  • private(デフォルト): このモジュールは依存関係に対してコンパイルされますが、このモジュールに依存するモジュールはコンパイルされません。
  • public: このモジュールと、このモジュールに依存するモジュールは、依存関係に対してコンパイルされます。モジュールの公開 API が依存関係の型を使用する場合は、public を使用します。
  • off: このモジュールは依存関係に対してコンパイルされません。

runtime 設定は、依存関係が実行時に使用可能かどうかを制御します。

  • public(デフォルト): 依存関係は、実行時にこのモジュールと、このモジュールに依存するモジュールで使用できます。
  • off: 依存関係は実行時に使用できません。アノテーションなど、コードがコンパイル時にのみ必要とする依存関係には off を使用します。

compile と runtime の両方を off にすることはできません。テストの依存関係では、compile は private または off のみにできます。

これらの設定が api や compileOnly などの Kotlin DSL 構成にどのように対応しているかについては、Lightbuild と Kotlin DSL の比較をご覧ください。

KSP プロセッサ

Moshi や Room など、Kotlin Symbol Processing(KSP)に基づくコード生成ツールを使用するには、プロセッサを kspProcessors ブロックに追加し、コードが実行時に使用するライブラリを dependencies ブロックに追加します。Lightbuild は、ビルド中に KSP プラグインを自動的に適用し、コード生成を構成します。

たとえば、次の設定では、KSP コード生成ツールを使用して Moshi を構成します。

android:
  dependencies:
    maven:
      - com.squareup.moshi:moshi:1.15.2
      - com.squareup.moshi:moshi-kotlin:1.15.2
  kspProcessors:
    maven:
      - com.squareup.moshi:moshi-kotlin-codegen:1.15.2

プロトコル バッファ

ライブラリ モジュールのプロトコル バッファ(.proto)ファイルからコードを生成するには、プロトコル バッファ機能をモジュールの optionalFeatures リストに追加し、プロトコル バッファ ランタイム ライブラリをモジュールの依存関係に追加します。optionalFeatures は、android ブロックの外にある最上位の設定です。

optionalFeatures:
  - com.android.tools.lightbuild.protobuf

android:
  dependencies:
    maven:
      - com.google.protobuf:protobuf-javalite:4.28.2
      - com.google.protobuf:protobuf-kotlin-lite:4.28.2

モジュールの .proto ファイルを src/main/proto ディレクトリに配置します。モジュールをビルドすると、Lightbuild は Protocol Buffers Lite ランタイム(Android で推奨)の Java クラスと Kotlin クラスを生成します。

テスト

tests ブロックでモジュールのテストを構成します。

  • test: 開発マシンの JVM で実行されるローカルテスト。dependencies のテストの依存関係を一覧表示します。
  • androidTest: デバイスまたはエミュレータで実行されるインストルメンテーション テスト。runner をテストランナー クラスに設定し、テストの依存関係を dependencies の下にリストします。

次に例を示します。

android:
  tests:
    test:
      dependencies:
        maven:
          - junit:junit:4.13.2
    androidTest:
      runner: androidx.test.runner.AndroidJUnitRunner
      dependencies:
        maven:
          - androidx.test.ext:junit:1.3.0
          - androidx.test.espresso:espresso-core:3.7.0

パッケージ化

アプリ モジュールでは、packaging ブロックを使用して、アプリの debug ビルドと release ビルドを構成します。独自の鍵でリリースビルドに署名するには、signing ブロックを release プロファイルに追加します。

android:
  packaging:
    release:
      signing:
        storeFile: "${RELEASE_STORE_FILE}"
        storePassword: "${RELEASE_STORE_PASSWORD}"
        keyAlias: "${RELEASE_KEY_ALIAS}"
        keyPassword: "${RELEASE_KEY_PASSWORD}"

signing ブロックは、次の設定をサポートしています。

  • storeFile: キーストア ファイルのパス。モジュールのディレクトリからの相対パスか、ホーム ディレクトリ内の場所を示す ~/ で始まるパス。
  • storePassword: キーストアのパスワード。
  • keyAlias: キーストア内の署名鍵のエイリアス。
  • keyPassword: 署名鍵のパスワード。

プロジェクトのファイルにパスワードを保存しないようにするには、例のように ${NAME} 構文を使用して、これらの値を環境変数参照に設定します。storeFile と keyAlias を直接記述することも、環境変数を参照することもできます。ビルド時に、Lightbuild は各参照を環境変数の値に置き換えます。各値には参照のみを含める必要があります。Lightbuild は、${HOME}/upload-keystore.jks などの長い値の一部である参照を置き換えません。

例

次の例は、アプリ モジュールとライブラリ モジュールの完全なモジュール ファイルを示しています。

アプリ モジュール

次の app/lightbuild.yaml ファイルは、app-core ライブラリ モジュールに依存するアプリ モジュールを構成します。

platform: android
type: application
android:
  namespace: com.example.myapp.app
  compileSdk:
    version:
      release:
        apiLevel: 36
  minSdk:
    version:
      release:
        apiLevel: 24
  targetSdk:
    version:
      release:
        apiLevel: 36
  applicationId: com.example.myapp
  versionCode: 1
  versionName: "1.0"
  dependencies:
    module:
      - //app-core

ライブラリ モジュール

次の app-core/lightbuild.yaml ファイルは、Jetpack Compose と Moshi を使用し、ローカルテストとインストルメンテーション テストを含むライブラリ モジュールを構成します。

platform: android
type: library
android:
  namespace: com.example.myapp
  compileSdk:
    version:
      release:
        apiLevel: 36
  minSdk:
    version:
      release:
        apiLevel: 24
  dependencies:
    maven:
      - androidx.core:core-ktx:1.18.0
      - androidx.lifecycle:lifecycle-runtime-ktx:2.10.0
      - androidx.activity:activity-compose:1.13.0
      - androidx.lifecycle:lifecycle-runtime-compose:2.10.0
      - androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0
      - androidx.compose.ui:ui:1.10.4
      - androidx.compose.ui:ui-tooling-preview:1.10.4
      - androidx.compose.material3:material3:1.4.0
      - androidx.navigation3:navigation3-ui:1.0.1
      - androidx.navigation3:navigation3-runtime:1.0.1
      - androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0
      - androidx.compose.ui:ui-tooling:1.10.4
      - androidx.compose.ui:ui-test-manifest:1.10.4
      - com.squareup.moshi:moshi:1.15.2
      - com.squareup.moshi:moshi-kotlin:1.15.2
  kspProcessors:
    maven:
      - com.squareup.moshi:moshi-kotlin-codegen:1.15.2
  tests:
    test:
      dependencies:
        maven:
          - junit:junit:4.13.2
          - org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2
    androidTest:
      runner: androidx.test.runner.AndroidJUnitRunner
      dependencies:
        maven:
          - androidx.test:core:1.7.0
          - androidx.test.ext:junit:1.3.0
          - androidx.test:runner:1.7.0
          - androidx.test.espresso:espresso-core:3.7.0
          - androidx.compose.ui:ui-test-junit4:1.10.4