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
আপনার জন্য সাজেস্ট করা হয়েছে
- মনে রাখবেন: জাভাস্ক্রিপ্ট বন্ধ থাকলে লিঙ্ক টেক্সট দেখানো হয়
- Lightbuild প্রোজেক্ট স্ট্রাকচার
- কমান্ড লাইন থেকে Lightbuild প্রোজেক্ট তৈরি করা
- Kotlin DSL-এর সাথে Lightbuild-এর তুলনা করা