Lightbuild yapılandırma referansı

Lightbuild projesinin derleme yapılandırması, YAML dosyalarından oluşur: projenin kök dizininde bir project.lightbuild.yaml dosyası ve her modülde bir lightbuild.yaml dosyası. Bu sayfada, her bir dosyadaki ayarlar açıklanmaktadır.

Proje dosyası

Genel proje ayarları, projenizin kök dizinindeki project.lightbuild.yaml dosyasında bulunur. Örneğin:

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"

Aşağıdaki tabloda bu ayarlar açıklanmaktadır:

Ayar Açıklama
project.name Projenin adı (ör. MyApp). Android Studio, bu adı Proje penceresinin kökü olarak gösterir. Kotlin DSL'deki rootProject.name gibi, uygulamanızın adından ve uygulama kimliğinden ayrıdır.
modules Projedeki modüller (ör. uygulama modülü (app) ve kitaplık modülleri (app-core)).
repositories Lightbuild'in bağımlılıkları çözdüğü uzak depolar. Ayrıntılı bilgi için Kod depoları bölümünü inceleyin.
lightbuild.version Projenin kullandığı Lightbuild sürümü.
build.kotlin.version Projenin kullandığı Kotlin sürümü.
build.java.version Projenin gerektirdiği Java derleyici sürümü.
build.jvmTarget Oluşturulan JVM bayt kodunun hedef sürümü.

Kod depoları

Lightbuild'in bağımlılıkları çözdüğü depoları listelemek için repositories komutunu kullanın. Yerleşik google ve mavenCentral depolarını listeleyebilir ve maven ile özel Maven depoları ekleyebilirsiniz:

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

maven deposu aşağıdaki ayarlara sahiptir:

Ayar Açıklama
name Kod deposu için bir ad.
url Kod deposunun URL'si.
credentials İsteğe bağlı. local.properties dosyanızda deponun kullanıcı adı ve şifresiyle eşlenen anahtarlar. Ayrıntılar için Depo kimlik bilgileri başlıklı makaleyi inceleyin.

Depo kimlik bilgileri

Bir Maven deposu için kullanıcı adı ve şifre gerekiyorsa depoya credentials bloğu ekleyin. username ve password değerleri, kimlik bilgilerinin kendisi değildir. Bunlar, projenizin local.properties dosyasında tanımladığınız anahtarlardır:

repositories:

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

Ardından, projenizin local.properties dosyasında her anahtarı kendi değeriyle eşleyin. REPO_USERNAME ve REPO_PASSWORD değerlerini kendi kimlik bilgilerinizle değiştirin:

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

Modül dosyaları

Her modülün dizininde, modülün ayarlarını tanımlayan bir lightbuild.yaml dosyası bulunur. Aşağıdaki tabloda üst düzey ayarlar açıklanmaktadır:

Ayar Açıklama
platform Modülün hedeflediği platform: android.
type Modül türü: Uygulama modülü için application veya kitaplık modülü için library. Daha fazla bilgi için Lightbuild proje yapısı başlıklı makaleyi inceleyin.
optionalFeatures Modül için etkinleştirilecek isteğe bağlı özellikler (ör. protokol arabellekleri desteği için com.android.tools.lightbuild.protobuf). Ayrıntılar için Protokol Arabellekleri başlıklı makaleyi inceleyin.
android Modülün Android ayarları. Ayrıntılar için Android ayarları başlıklı makaleyi inceleyin.

Android ayarları

android bloğu, modülün Android derleme ayarlarını içerir:

Ayar Açıklama
namespace Modülün ad alanı. Daha fazla bilgi için Ad alanını ayarlama bölümünü inceleyin.
compileSdk Modülün derlendiği API düzeyi. Ayrıntılar için SDK sürümleri bölümüne bakın.
minSdk Modülün desteklediği minimum API düzeyi.
targetSdk Uygulamanın hedeflediği API düzeyidir. Yalnızca uygulama modüllerinde desteklenir.
applicationId Uygulamanın uygulama kimliği. Uygulama modüllerinde ayarlanır.
versionCode Uygulamanın sürüm kodu. Uygulama modüllerinde ayarlanır.
versionName Uygulamanın sürüm adı. Uygulama modüllerinde ayarlanır.
packaging Uygulamanın debug ve release derlemelerini paketleme ayarları (ör. sürüm imzalama). Yalnızca uygulama modülünde desteklenir. Ayrıntılar için Paketleme bölümünü inceleyin.
dependencies Modülün diğer modüllere ve harici kitaplıklara olan bağımlılıkları. Ayrıntılı bilgi için Bağımlılıklar bölümünü inceleyin.
kspProcessors Modül için kod oluşturan KSP işlemcileri. Ayrıntılar için KSP işlemcileri bölümüne bakın.
tests Modülün yerel ve enstrümantasyon testleri. Ayrıntılar için Testler bölümüne bakın.

SDK sürümleri

version.release.apiLevel altında compileSdk, minSdk ve targetSdk ayarlarını API düzeyleri olarak belirtin. Örneğin, aşağıdaki ayarlar modülü API düzeyi 36'ya göre derler, API düzeyi 24 ve üstünü destekler ve API düzeyi 36'yı hedefler:

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

targetSdk ayarı yalnızca uygulama modüllerinde desteklenir. Kitaplık modülleri yalnızca compileSdk ve minSdk ayarlarını tanımlar.

Bağımlılıklar

Bir modülün bağımlılıklarını dependencies bloğunda tanımlayın:

  • module: Projenizdeki diğer modüller. // ve ardından modülün adı şeklinde yazılır (ör. //app-core veya //features/search).
  • maven: group:artifact:version biçiminde Maven koordinatları olarak yazılan harici kitaplıklar.

Örneğin, aşağıdaki ayarlar app-core modülüne ve AndroidX Core KTX kitaplığına bağımlılıklar ekler:

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

Bağımlılık ayarları

Varsayılan olarak bir modül, bağımlılıklarının her birine göre derlenir ve bunları çalışma zamanında dahil eder ancak bağımlı olduğu modüllere göstermez. Bir modülün bağımlılığı kullanma şeklini değiştirmek için bağımlılıktan sonra iki nokta üst üste ekleyin ve ardından compile ayarını, runtime ayarını veya her ikisini de altına ekleyin:

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

Bu örnekte, bu modüle bağlı olan modüller de data modülünün sınıflarını kullanabilir. Jetpack Annotation kitaplığı yalnızca bu modülü derlemek için kullanılır. Core KTX, varsayılan ayarları kullanır.

compile ayarı, hangi modüllerin bağımlılığa göre derleneceğini kontrol eder:

  • private (varsayılan): Bu modül, bağımlılığa göre derlenir ancak bu modüle bağlı olan modüller derlenmez.
  • public: Bu modül ve bu modüle bağlı olan modüller, bağımlılığa göre derlenir. Modülünüzün herkese açık API'si, bağımlılıktaki türleri kullanıyorsa public kullanın.
  • off: Bu modül, bağımlılığa göre derlenmiyor.

runtime ayarı, bağımlılığın çalışma zamanında kullanılabilir olup olmayacağını kontrol eder:

  • public (varsayılan): Bağımlılık, çalışma zamanında bu modül ve bu modüle bağlı olan modüller tarafından kullanılabilir.
  • off: Bağımlılık, çalışma zamanında kullanılamıyor. Kodunuzun yalnızca derleme süresinde ihtiyaç duyduğu bağımlılıklar (ör. ek açıklamalar) için off kullanın.

compile ve runtime aynı anda off olamaz. Test bağımlılıklarında compile yalnızca private veya off olabilir.

Bu ayarların api ve compileOnly gibi Kotlin DSL yapılandırmalarıyla nasıl eşleştiğini görmek için Lightbuild ile Kotlin DSL'yi karşılaştırma başlıklı makaleyi inceleyin.

KSP işlemcileri

Moshi veya Room gibi Kotlin Sembol İşleme (KSP) tabanlı bir kod oluşturucu kullanmak için işlemciyi kspProcessors bloğuna, kodunuzun çalışma zamanında kullandığı kitaplıkları ise dependencies bloğuna ekleyin. Lightbuild, derleme sırasında KSP eklentisini otomatik olarak uygular ve kod oluşturmayı yapılandırır.

Örneğin, aşağıdaki ayarlarda Moshi, KSP kod oluşturucusuyla yapılandırılır:

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

Protokol Arabellekleri

Bir kitaplık modülündeki protokol arabelleği (.proto) dosyalarından kod oluşturmak için modülün optionalFeatures listesine protokol arabelleği özelliğini, modülün bağımlılıklarına ise protokol arabelleği çalışma zamanı kitaplıklarını ekleyin. optionalFeatures, android bloğunun dışında yer alan üst düzey bir ayardır:

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

Modülün .proto dosyalarını src/main/proto dizinine yerleştirin. Modülü oluşturduğunuzda Lightbuild, Android için önerilen Protocol Buffers Lite çalışma zamanı için Java ve Kotlin sınıfları oluşturur.

Testler

Bir modülün testlerini tests bloğunda yapılandırın:

  • test: Geliştirme makinenizin JVM'sinde çalışan yerel testler. Testlerin bağımlılıklarını dependencies altında listeleyin.
  • androidTest: Bir cihazda veya emülatörde çalışan Araçlı testler. runner değerini test çalıştırıcı sınıfına ayarlayın ve testlerin bağımlılıklarını dependencies altında listeleyin.

Örneğin:

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

Sunum

Uygulama modüllerinde, uygulamanın debug ve release derlemelerini yapılandırmak için packaging bloğunu kullanın. Yayınlanan derlemenizi kendi anahtarınızla imzalamak için release profiline bir signing bloğu ekleyin:

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

signing bloğu aşağıdaki ayarları destekler:

  • storeFile: Anahtar deposu dosyasının yolu. Modülün dizinine göre veya ana dizininizdeki bir konum için ~/ ile başlar.
  • storePassword: Anahtar deposunun şifresi.
  • keyAlias: Anahtar deposundaki imzalama anahtarının takma adı.
  • keyPassword: İmzalama anahtarının şifresi.

Şifrelerinizi projenizin dosyalarından uzak tutmak için bu değerleri, örnekte olduğu gibi ${NAME} söz dizimiyle ortam değişkeni referanslarına ayarlayın. storeFile ve keyAlias değerlerini doğrudan yazabilir veya bunlar için ortam değişkenlerine de başvurabilirsiniz. Derleme yaptığınızda Lightbuild, her referansı ortam değişkeninin değeriyle değiştirir. Her değer yalnızca referansı içermelidir: Lightbuild, ${HOME}/upload-keystore.jks gibi daha uzun bir değerin parçası olan referansları değiştirmez.

Örnekler

Aşağıdaki örneklerde, bir uygulama modülü ve kitaplık modülü için eksiksiz modül dosyaları gösterilmektedir.

Uygulama modülü

Aşağıdaki app/lightbuild.yaml dosyası, app-core kitaplık modülüne bağlı bir uygulama modülünü yapılandırır:

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

Kitaplık modülü

Aşağıdaki app-core/lightbuild.yaml dosyası, Jetpack Compose ve Moshi'yi kullanan ve yerel testler ile enstrümantasyon testleri içeren bir kitaplık modülünü yapılandırır:

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