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 এই নামটি প্রোজেক্ট উইন্ডোর রুট হিসেবে দেখায়। Kotlin DSL-এ rootProject.name-এর মতো, এটি আপনার অ্যাপের নাম ও অ্যাপ্লিকেশন আইডি থেকে আলাদা।
modules প্রোজেক্টের মডিউল, যেমন অ্যাপ মডিউল (app) এবং লাইব্রেরি মডিউল (app-core)।
repositories Lightbuild যে রিমোট রিপোজিটরি থেকে ডিপেন্ডেন্সি সমাধান করে। আরও জানতে, রিপোজিটরি দেখুন।
lightbuild.version প্রোজেক্টে ব্যবহার করা Lightbuild ভার্সন।
build.kotlin.version প্রোজেক্টে ব্যবহার করা Kotlin ভার্সন।
build.java.version প্রোজেক্টের জন্য প্রয়োজনীয় Java কম্পাইলার ভার্সন।
build.jvmTarget জেনারেট করা JVM বাইটকোডের টার্গেট ভার্সন।

রিপোজিটরি

Lightbuild যেসব রিপোজিটরি থেকে ডিপেন্ডেন্সি সমাধান করে, সেগুলি তালিকাভুক্ত করতে repositories ব্যবহার করুন। আপনি বিল্ট-ইন 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 অ্যাপের অ্যাপ্লিকেশন আইডি। অ্যাপ মডিউলে সেট করুন।
versionCode অ্যাপের ভার্সন কোড। অ্যাপ মডিউলে সেট করুন।
versionName অ্যাপের ভার্সনের নাম। অ্যাপ মডিউলে সেট করুন।
packaging অ্যাপের debug এবং release বিল্ড প্যাকেজ করার সেটিংস, যেমন রিলিজ সাইনিং। শুধুমাত্র অ্যাপ মডিউলে কাজ করে। আরও জানতে, প্যাকেজিং দেখুন।
dependencies অন্যান্য মডিউল এবং এক্সটার্নাল লাইব্রেরির উপর মডিউলের নির্ভরতা। আরও জানতে, নির্ভরতা দেখুন।
kspProcessors KSP প্রসেসর যা মডিউলের জন্য কোড তৈরি করে। আরও জানতে, KSP প্রসেসর দেখুন।
tests মডিউলের লোকাল ও ইনস্ট্রুমেন্টেড টেস্ট। আরও বিবরণের জন্য, পরীক্ষা দেখুন।

SDK ভার্সন

compileSdk, minSdk ও targetSdk সেটিংসকে API লেভেল হিসেবে version.release.apiLevel-এর অধীনে উল্লেখ করুন। যেমন, নিম্নলিখিত সেটিংস API লেভেল ৩৬-এর সাথে মডিউল কম্পাইল করে, API লেভেল ২৪ ও তার পরবর্তী ভার্সনকে সাপোর্ট করে এবং API লেভেল ৩৬-কে টার্গেট করে:

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: এক্সটার্নাল লাইব্রেরি, যা Maven কোঅর্ডিনেট হিসেবে এই ফর্ম্যাটে লেখা হয় group:artifact:version.

যেমন, নিম্নলিখিত সেটিংস 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 অ্যানোটেশন লাইব্রেরি শুধুমাত্র এই মডিউল কম্পাইল করার জন্য ব্যবহার করা হয়। Core KTX ডিফল্ট সেটিংস ব্যবহার করে।

compile সেটিং, ডিপেন্ডেন্সির সাপেক্ষে কোন মডিউল কম্পাইল করা হবে তা নিয়ন্ত্রণ করে:

  • private (ডিফল্ট): এই মডিউল ডিপেন্ডেন্সির সাথে কম্পাইল করে, কিন্তু যে মডিউলগুলি এই মডিউলের উপর নির্ভর করে সেগুলি করে না।
  • public: এই মডিউল এবং এর উপর নির্ভরশীল মডিউলগুলি ডিপেন্ডেন্সির সাথে কম্পাইল করে। আপনার মডিউলের পাবলিক API ডিপেন্ডেন্সি থেকে টাইপ ব্যবহার করলে, public ব্যবহার করুন।
  • off: এই মডিউল ডিপেন্ডেন্সির সাথে কম্পাইল করে না।

রানটাইমে ডিপেন্ডেন্সি উপলভ্য আছে কিনা তা runtime সেটিং কন্ট্রোল করে:

  • public (ডিফল্ট): রানটাইমে এই মডিউল এবং এর উপর নির্ভরশীল মডিউলের জন্য ডিপেন্ডেন্সি উপলভ্য।
  • off: রানটাইমে ডিপেন্ডেন্সি উপলভ্য নেই। ডিপেন্ডেন্সির জন্য off ব্যবহার করুন যা আপনার কোডের শুধুমাত্র কম্পাইল করার সময় প্রয়োজন হয়, যেমন অ্যানোটেশন।

compile এবং runtime দুটিই off হতে পারে না। টেস্ট ডিপেন্ডেন্সিতে, compile শুধুমাত্র private বা off হতে পারে।

এইসব সেটিংস কীভাবে Kotlin DSL কনফিগারেশনের সাথে সামঞ্জস্যপূর্ণ তা দেখতে, যেমন api এবং compileOnly, Kotlin DSL-এর সাথে Lightbuild-এর তুলনা করুন দেখুন।

KSP প্রসেসর

Kotlin Symbol Processing (KSP)-এর উপর ভিত্তি করে তৈরি কোড জেনারেটর ব্যবহার করতে, যেমন Moshi বা Room, kspProcessors ব্লকে প্রসেসর যোগ করুন এবং রানটাইমে আপনার কোড ব্যবহার করে এমন লাইব্রেরিগুলি dependencies ব্লকে যোগ করুন। Lightbuild অটোমেটিক KSP প্লাগ-ইন প্রয়োগ করে এবং বিল্ডের সময় কোড জেনারেশন কনফিগার করে।

যেমন, নিম্নলিখিত সেটিংস Moshi-কে তার KSP কোড জেনারেটরের সাথে কনফিগার করে:

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 প্রোটোকল বাফার লাইট রানটাইমের জন্য Java ও Kotlin ক্লাস তৈরি করে, যা Android-এর জন্য সাজেস্ট করা হয়।

পরীক্ষা

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

প্যাকেজিং

অ্যাপ মডিউলে, অ্যাপের debug এবং release বিল্ড কনফিগার করতে packaging ব্লক ব্যবহার করুন। আপনার নিজস্ব 'কী' দিয়ে রিলিজ বিল্ডে সাইন করতে, release প্রোফাইলে একটি signing ব্লক যোগ করুন:

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

signing ব্লকে নিম্নলিখিত সেটিংস কাজ করে:

  • storeFile: কীস্টোর ফাইলের পাথ, হয় মডিউলের ডিরেক্টরির সাথে আপেক্ষিক অথবা আপনার হোম ডিরেক্টরির লোকেশনের জন্য ~/ দিয়ে শুরু হয়।
  • storePassword: কীস্টোরের পাসওয়ার্ড।
  • keyAlias: keystore-এ সাইনিং কী-এর উপনাম।
  • 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