Lightbuild と Kotlin DSL の比較

Kotlin DSL を使用した Android ビルドの構成に慣れている場合は、このページで、一般的な Kotlin DSL 構成が Lightbuild にどのようにマッピングされるかを確認できます。

このページの例では、Kotlin DSL と Android Gradle プラグイン(AGP)9.0 以降を使用しています。これには、組み込みの Kotlin サポートが含まれています。

ビルドファイル

次の表に、各 Kotlin DSL ビルドファイルに相当する Lightbuild のビルドファイルを示します。

Kotlin DSL Lightbuild 目的
settings.gradle.kts project.lightbuild.yaml プロジェクト名、モジュール、リポジトリ
ルート build.gradle.kts と gradle-wrapper.properties project.lightbuild.yaml ビルドツールとツールチェーンのバージョン
モジュール build.gradle.kts モジュール lightbuild.yaml モジュール タイプ、Android の設定、依存関係、テスト
gradle.lockfile resolved.deps 依存関係のバージョンを追跡する

プロジェクトの設定

Kotlin DSL では、settings.gradle.kts ファイルでプロジェクトの名前、モジュール、依存関係を解決するリポジトリを定義します。

dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.name = "MyApp"
include(":app")
include(":app-core")

Lightbuild では、project.lightbuild.yaml ファイルで同じ設定を定義します。

project:
  name: MyApp
modules:
  - app
  - app-core
repositories:
  - google
  - mavenCentral

次の表に、プロジェクト全体の設定の比較を示します。

コンセプト Kotlin DSL Lightbuild
プロジェクト名 rootProject.name project.name
モジュール include(":app") modules
リポジトリ repositories(dependencyResolutionManagement) repositories
カスタム Maven リポジトリ maven { url = uri("https://maven.example.com/releases") } name と url を使用した maven
リポジトリの認証情報 maven ブロック内の credentials credentials は、local.properties で定義したキーに置き換えます。
ビルドツールのバージョン gradle-wrapper.properties の Gradle バージョンと plugins ブロックの AGP バージョン lightbuild.version
Kotlin バージョン AGP に組み込まれています。新しいバージョンを使用するには、kotlin-gradle-plugin を buildscript クラスパスに追加します。 build.kotlin.version
Java のバージョン kotlin { jvmToolchain(17) } build.java.version

モジュール タイプとプラグイン

Kotlin DSL では、プラグインを適用してモジュールのタイプを選択し、他のプラグインを適用して KSP などの機能を追加します。Lightbuild では、モジュールの type を設定すると、Lightbuild が構成に必要な機能を適用します。

コンセプト Kotlin DSL Lightbuild
アプリ モジュール id("com.android.application") type: application
ライブラリ モジュール id("com.android.library") type: library
Kotlin マルチプラットフォーム(KMP)モジュール id("org.jetbrains.kotlin.multiplatform") 現時点ではサポートされていません
Kotlin AGP 9.0 以降に組み込まれている 搭載
KSP id("com.google.devtools.ksp") kspProcessors を宣言すると自動的に適用されます
プロトコル バッファ id("com.google.protobuf") com.android.tools.lightbuild.protobuf(optionalFeatures)
バージョン カタログ libs.versions.toml 件のファイル 現時点ではサポートされていません
その他のプラグイン Gradle プラグインを適用する 現時点ではサポートされていません

Android の設定

Kotlin DSL では、モジュールの build.gradle.kts ファイルの android ブロックで Android の設定を構成します。

plugins {
    id("com.android.application")
}

android {
    namespace = "com.example.myapp.app"
    compileSdk = 36

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 24
        targetSdk = 36
        versionCode = 1
        versionName = "1.0"
    }
}

Lightbuild では、モジュールの lightbuild.yaml ファイルの android ブロックで同じ設定を構成します。

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"

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

設定 Kotlin DSL Lightbuild
名前空間 namespace namespace
SDK をコンパイルする compileSdk = 36 compileSdk.version.release.apiLevel: 36
Minimum SDK minSdk = 24(defaultConfig) minSdk.version.release.apiLevel: 24
対象 SDK targetSdk = 36(defaultConfig) targetSdk.version.release.apiLevel: 36
アプリケーション ID applicationId(defaultConfig) applicationId
バージョン コード versionCode(defaultConfig) versionCode
バージョン名 versionName(defaultConfig) versionName
リリース署名 signingConfigs、signingConfig(release ビルドタイプ) packaging.release.signing

依存関係

Kotlin DSL では、implementation などの構成を使用して、dependencies ブロックで依存関係を宣言します。

dependencies {
    implementation(project(":app-core"))
    implementation("androidx.core:core-ktx:1.18.0")
}

Lightbuild では、モジュールの依存関係を module に、外部ライブラリを maven に記述します。

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

Kotlin DSL は、api、compileOnly、runtimeOnly などの他の構成を使用して、モジュールが依存関係を使用する方法を制御します。

dependencies {
    api(project(":data"))
    compileOnly("androidx.annotation:annotation:1.9.1")
}

Lightbuild では、代わりに compile と runtime の設定を依存関係に追加します。

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

これらの設定の詳細については、依存関係の設定をご覧ください。

次の表に、一般的な依存関係の宣言を比較します。

依存関係 Kotlin DSL Lightbuild
プロジェクト内のモジュール implementation(project(":app-core")) //app-core(android.dependencies.module)
外部ライブラリ implementation("group:artifact:version") group:artifact:version(android.dependencies.maven)
API の依存関係 api("group:artifact:version") android.dependencies.maven の group:artifact:version(compile: public)
コンパイル専用の依存関係 compileOnly("group:artifact:version") android.dependencies.maven の group:artifact:version(runtime: off)
ランタイムのみの依存関係 runtimeOnly("group:artifact:version") android.dependencies.maven の group:artifact:version(compile: off)
KSP プロセッサ ksp("group:artifact:version") group:artifact:version(android.kspProcessors.maven)
ローカルテストの依存関係 testImplementation("group:artifact:version") group:artifact:version(android.tests.test.dependencies.maven)
インストルメンテーション テストの依存関係 androidTestImplementation("group:artifact:version") group:artifact:version(android.tests.androidTest.dependencies.maven)

KSP

Kotlin DSL では、KSP プラグインを適用し、ksp 構成でプロセッサを追加します。

plugins {
    id("com.android.library")
    id("com.google.devtools.ksp")
}

dependencies {
    implementation("com.squareup.moshi:moshi:1.15.2")
    implementation("com.squareup.moshi:moshi-kotlin:1.15.2")
    ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.2")
}

Lightbuild では、プロセッサを kspProcessors ブロックに追加すると、Lightbuild が KSP プラグインを自動的に適用します。

type: library
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

テスト

Kotlin DSL では、defaultConfig でインストルメンテーション テスト ランナーを設定し、testImplementation 構成と androidTestImplementation 構成でテストの依存関係を追加します。

android {
    defaultConfig {
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }
}

dependencies {
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.3.0")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.7.0")
}

Lightbuild では、ローカルテストを tests.test で、インストルメンテーション テストを tests.androidTest で構成します。

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

ビルドコマンド

Kotlin DSL では、Gradle ラッパーを使用して Gradle タスクを実行することで、コマンドラインからビルドとテストを行います。Lightbuild では、Lightbuild CLI を使用します。

タスク Gradle ラッパー Lightbuild CLI
アプリ モジュールをビルドする ./gradlew :app:assembleDebug lightbuild build app
すべてのターゲットをビルドする ./gradlew assemble lightbuild build
モジュールのローカルテストを実行する ./gradlew :app-core:test lightbuild test app-core:hostTest
モジュールのインストルメンテーション テストを実行する ./gradlew :app-core:connectedAndroidTest lightbuild test app-core:deviceTest
すべてのテストを実行する ./gradlew test connectedAndroidTest lightbuild test
ビルド出力とキャッシュを削除する ./gradlew clean lightbuild clean

詳しくは、コマンドラインからアプリをビルドするとコマンドラインから Lightbuild プロジェクトをビルドするをご覧ください。

依存関係のロック

Kotlin DSL では、依存関係のロックは任意です。ビルド スクリプトで有効にしてから、--write-locks フラグを指定してビルドを実行することで、ロックファイルを書き込みます。Lightbuild では、すべてのモジュールに、モジュールの解決済み依存関係を記録する resolved.deps ファイルがあります。このファイルは Lightbuild によって自動的に生成されます。Gradle ロックファイルと同様に、resolved.deps ファイルをバージョン管理にチェックインします。

CI ビルドなどで依存関係をロックするには、--locked-dependencies フラグを lightbuild resolve または lightbuild test に追加します。このフラグを使用すると、resolved.deps ファイルがモジュールの依存関係と一致しない場合、ファイルを更新する代わりにコマンドが失敗します。

lightbuild resolve --locked-dependencies

サポートされていない機能

Lightbuild は、次の Kotlin DSL 機能をサポートしていません。

  • バージョン カタログと規則プラグイン
  • カスタム プラグイン
  • プロダクト フレーバー。代わりに、アプリのバージョンごとに別々のアプリ モジュールを作成します。詳細については、複数のアプリ モジュールをご覧ください。
  • Kotlin マルチプラットフォーム(KMP)モジュール
  • プロキシ サーバーを介した依存関係の解決

また、プロジェクトで Kotlin DSL モジュールと Lightbuild モジュールを混在させることはできません。既知の問題については、Lightbuild のリリースノートをご覧ください。