So sánh Lightbuild với Kotlin DSL

Nếu bạn đã quen với việc định cấu hình bản dựng Android bằng Kotlin DSL, thì trang này sẽ cho bạn biết cách các cấu hình Kotlin DSL phổ biến liên kết với Lightbuild.

Các ví dụ trên trang này sử dụng DSL Kotlin và trình bổ trợ Android cho Gradle (AGP) 9.0 trở lên, bao gồm cả hỗ trợ Kotlin tích hợp sẵn.

Tệp bản dựng

Bảng sau đây cho thấy tệp bản dựng Kotlin DSL tương đương của từng tệp bản dựng Lightbuild:

Kotlin DSL Lightbuild Mục đích
settings.gradle.kts project.lightbuild.yaml Tên dự án, mô-đun và kho lưu trữ
build.gradle.kts và gradle-wrapper.properties gốc project.lightbuild.yaml Phiên bản công cụ xây dựng và chuỗi công cụ
Học phần build.gradle.kts Học phần lightbuild.yaml Loại mô-đun, chế độ cài đặt Android, phần phụ thuộc và kiểm thử
gradle.lockfile resolved.deps Theo dõi phiên bản phần phụ thuộc

Cài đặt dự án

Trong Kotlin DSL, tệp settings.gradle.kts xác định tên của dự án, các mô-đun và kho lưu trữ để phân giải các phần phụ thuộc:

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

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

Trong Lightbuild, tệp project.lightbuild.yaml xác định các chế độ cài đặt tương tự:

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

Bảng sau đây so sánh các chế độ cài đặt trên toàn dự án:

Ý tưởng Kotlin DSL Lightbuild
Tên dự án rootProject.name project.name
Mô-đun include(":app") modules
Kho lưu trữ repositories trong dependencyResolutionManagement repositories
Kho lưu trữ Maven tuỳ chỉnh maven { url = uri("https://maven.example.com/releases") } maven có name và url
Thông tin đăng nhập của kho lưu trữ credentials trong khối maven credentials có các khoá mà bạn xác định trong local.properties
Phiên bản công cụ xây dựng Phiên bản Gradle trong gradle-wrapper.properties và phiên bản AGP trong khối plugins lightbuild.version
Phiên bản Kotlin Tích hợp sẵn trong AGP. Để sử dụng phiên bản mới hơn, hãy thêm kotlin-gradle-plugin vào classpath buildscript. build.kotlin.version
Phiên bản Java kotlin { jvmToolchain(17) } build.java.version

Loại mô-đun và trình bổ trợ

Trong Kotlin DSL, bạn chọn loại mô-đun bằng cách áp dụng một trình bổ trợ và áp dụng các trình bổ trợ khác để thêm các tính năng như KSP. Trong Lightbuild, bạn đặt type của mô-đun và Lightbuild sẽ áp dụng các tính năng mà cấu hình của bạn cần:

Ý tưởng Kotlin DSL Lightbuild
Mô-đun ứng dụng id("com.android.application") type: application
Mô-đun thư viện id("com.android.library") type: library
Mô-đun Kotlin Multiplatform (KMP) id("org.jetbrains.kotlin.multiplatform") Tính năng chưa được hỗ trợ
Kotlin Tích hợp vào AGP 9.0 trở lên Tích hợp sẵn
lợi điểm bán hàng chính id("com.google.devtools.ksp") Tự động áp dụng khi bạn khai báo kspProcessors
Vùng đệm giao thức id("com.google.protobuf") com.android.tools.lightbuild.protobuf trong optionalFeatures
Danh mục phiên bản libs.versions.toml tệp Tính năng chưa được hỗ trợ
Trình bổ trợ khác Áp dụng trình bổ trợ Gradle Tính năng chưa được hỗ trợ

Cài đặt Android

Trong Kotlin DSL, bạn định cấu hình các chế độ cài đặt Android trong khối android của tệp build.gradle.kts của mô-đun:

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"
    }
}

Trong Lightbuild, bạn định cấu hình các chế độ cài đặt tương tự trong khối android của tệp lightbuild.yaml của mô-đun:

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"

Bảng sau đây so sánh các chế độ cài đặt này:

Cài đặt Kotlin DSL Lightbuild
Không gian tên namespace namespace
SDK biên dịch compileSdk = 36 compileSdk.version.release.apiLevel: 36
SDK tối thiểu minSdk = 24 trong defaultConfig minSdk.version.release.apiLevel: 24
SDK mục tiêu targetSdk = 36 trong defaultConfig targetSdk.version.release.apiLevel: 36
Mã đơn đăng ký applicationId trong defaultConfig applicationId
Mã phiên bản versionCode trong defaultConfig versionCode
Tên phiên bản versionName trong defaultConfig versionName
Ký bản phát hành signingConfigs và signingConfig trong loại bản dựng release packaging.release.signing

Phần phụ thuộc

Trong Kotlin DSL, bạn khai báo các phần phụ thuộc trong khối dependencies, sử dụng các cấu hình như implementation:

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

Trong Lightbuild, bạn liệt kê các phần phụ thuộc của mô-đun trong module và các thư viện bên ngoài trong maven:

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

Kotlin DSL sử dụng các cấu hình khác, chẳng hạn như api, compileOnly và runtimeOnly, để kiểm soát cách một mô-đun sử dụng phần phụ thuộc:

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

Trong Lightbuild, bạn thêm chế độ cài đặt compile và runtime vào phần phụ thuộc:

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

Để biết thêm thông tin về các chế độ cài đặt này, hãy xem phần Cài đặt phần phụ thuộc.

Bảng sau đây so sánh các nội dung khai báo phần phụ thuộc phổ biến:

Phần phụ thuộc Kotlin DSL Lightbuild
Mô-đun trong dự án của bạn implementation(project(":app-core")) //app-core trong android.dependencies.module
Thư viện bên ngoài implementation("group:artifact:version") group:artifact:version trong android.dependencies.maven
Phần phụ thuộc API api("group:artifact:version") group:artifact:version ở android.dependencies.maven, có compile: public
Phần phụ thuộc chỉ biên dịch compileOnly("group:artifact:version") group:artifact:version ở android.dependencies.maven, có runtime: off
Phần phụ thuộc chỉ trong thời gian chạy runtimeOnly("group:artifact:version") group:artifact:version ở android.dependencies.maven, có compile: off
Trình xử lý KSP ksp("group:artifact:version") group:artifact:version trong android.kspProcessors.maven
Phần phụ thuộc kiểm thử cục bộ testImplementation("group:artifact:version") group:artifact:version trong android.tests.test.dependencies.maven
Phần phụ thuộc kiểm thử đo lường androidTestImplementation("group:artifact:version") group:artifact:version trong android.tests.androidTest.dependencies.maven

lợi điểm bán hàng chính

Trong Kotlin DSL, bạn áp dụng trình bổ trợ KSP và thêm trình xử lý bằng cấu hình 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")
}

Trong Lightbuild, bạn thêm bộ xử lý vào khối kspProcessors và Lightbuild sẽ tự động áp dụng trình bổ trợ 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

Xét nghiệm

Trong Kotlin DSL, bạn đặt trình chạy kiểm thử đo lường trong defaultConfig và thêm các phần phụ thuộc kiểm thử bằng cấu hình testImplementation và 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")
}

Trong Lightbuild, bạn định cấu hình kiểm thử cục bộ trong tests.test và kiểm thử đo lường trong 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

Lệnh tạo bản dựng

Với Kotlin DSL, bạn có thể tạo và kiểm thử từ dòng lệnh bằng cách chạy các tác vụ Gradle bằng trình bao bọc Gradle. Với Lightbuild, bạn sử dụng Lightbuild CLI.

Nhiệm vụ Trình bao bọc Gradle Lightbuild CLI
Tạo mô-đun ứng dụng ./gradlew :app:assembleDebug lightbuild build app
Xây dựng tất cả mục tiêu ./gradlew assemble lightbuild build
Chạy kiểm thử cục bộ của mô-đun ./gradlew :app-core:test lightbuild test app-core:hostTest
Chạy kiểm thử đo lường của mô-đun ./gradlew :app-core:connectedAndroidTest lightbuild test app-core:deviceTest
Chạy tất cả chương trình kiểm thử ./gradlew test connectedAndroidTest lightbuild test
Xoá kết quả bản dựng và bộ nhớ đệm ./gradlew clean lightbuild clean

Để biết thêm thông tin, hãy xem bài viết Xây dựng ứng dụng từ dòng lệnh và Xây dựng dự án Lightbuild từ dòng lệnh.

Khoá phần phụ thuộc

Với Kotlin DSL, khoá phần phụ thuộc là không bắt buộc: bạn bật tính năng này trong tập lệnh bản dựng, sau đó ghi tệp khoá bằng cách chạy bản dựng có cờ --write-locks. Trong Lightbuild, mỗi mô-đun đều có một tệp resolved.deps ghi lại các phần phụ thuộc đã được giải quyết của mô-đun. Lightbuild sẽ tự động tạo tệp này. Giống như với tệp khoá Gradle, hãy kiểm tra các tệp resolved.deps của bạn để quản lý phiên bản.

Để khoá các phần phụ thuộc, chẳng hạn như trong bản dựng CI, hãy thêm cờ --locked-dependencies vào lightbuild resolve hoặc lightbuild test. Với cờ này, lệnh sẽ không thành công nếu tệp resolved.deps không khớp với các phần phụ thuộc của mô-đun, thay vì cập nhật tệp:

lightbuild resolve --locked-dependencies

Tính năng không được hỗ trợ

Lightbuild không hỗ trợ các tính năng Kotlin DSL sau:

  • Danh mục phiên bản và trình bổ trợ quy ước
  • Trình bổ trợ tuỳ chỉnh
  • Phiên bản sản phẩm. Thay vào đó, hãy tạo một mô-đun ứng dụng riêng cho từng phiên bản của ứng dụng. Để biết thêm thông tin, hãy xem phần Nhiều mô-đun ứng dụng.
  • Mô-đun Kotlin Multiplatform (KMP)
  • Phân giải phần phụ thuộc thông qua máy chủ proxy

Ngoài ra, một dự án không thể kết hợp các mô-đun Kotlin DSL và Lightbuild. Để biết các vấn đề đã biết, hãy xem ghi chú phát hành của Lightbuild.