Lightbuild প্রোজেক্ট স্ট্রাকচার

Lightbuild প্রোজেক্ট অ্যাপ কোড থেকে অ্যাপ অ্যাসেম্বলি আলাদা করে: অ্যাপ মডিউল (বা "অ্যাপ শেল") আপনার অ্যাপ অ্যাসেম্বল করে এবং লাইব্রেরি মডিউলে আপনার অ্যাপের ফিচার, UI ও বিজনেস লজিক থাকে। এই পৃষ্ঠায় নতুন Lightbuild প্রোজেক্টের লেআউট এবং প্রতিটি মডিউল ও বিল্ড ফাইলের ভূমিকা বর্ণনা করা হয়েছে।

প্রোজেক্ট লেআউট

ডিফল্ট Lightbuild প্রোজেক্ট টেমপ্লেটে নিম্নলিখিত বিল্ড ফাইল ও মডিউল আছে:

MyApp/
├── project.lightbuild.yaml  # Project-wide settings
├── app/                     # App module
│   ├── lightbuild.yaml
│   └── resolved.deps
└── app-core/                # Library module
    ├── lightbuild.yaml
    ├── resolved.deps
    └── src/                 # The app's source code

প্রোজেক্টে তিনটি বিল্ড কনফিগারেশন ফাইল আছে: রুট ডিরেক্টরিতে একটি project.lightbuild.yaml ফাইল এবং প্রতিটি মডিউলে একটি lightbuild.yaml ফাইল। এছাড়াও, প্রতিটি মডিউলে একটি resolved.deps ফাইল থাকে। প্রতিটি কনফিগারেশন ফাইলের সেটিংস সম্পর্কে বিস্তারিত জানতে, Lightbuild কনফিগারেশন রেফারেন্স দেখুন।

অ্যাপ মডিউল

Lightbuild প্রোজেক্ট আপনার অ্যাপের ভিত্তি হিসেবে অ্যাপ মডিউল ব্যবহার করে। এটিকে "অ্যাপ শেল" হিসেবেও উল্লেখ করা হয় কারণ এটি কোনও সোর্স কোড ছাড়াই প্রোজেক্ট অ্যাসেম্বলি ম্যানেজ করে। আপনার সব ফিচার ও লজিক আলাদা লাইব্রেরি মডিউলে থাকে এবং অ্যাপ শেল সাইনিং ও অপ্টিমাইজেশনের মতো চূড়ান্ত কনফিগারেশনের উপর ফোকাস করে।

অ্যাপ মডিউলের lightbuild.yaml ফাইল মডিউলের type-কে application-এ সেট করে এবং নিম্নলিখিত সহ ফাইনাল অ্যাপ কীভাবে একসাথে রাখা হয় তা নির্দিষ্ট করে:

  • অ্যাপের পরিচয়: এটির অ্যাপ্লিকেশন আইডি, ভার্সন কোড ও ভার্সনের নাম
  • অ্যাপের SDK সংক্রান্ত প্রয়োজনীয়তা: এর compileSdk, minSdk ও targetSdk ভার্সন
  • অ্যাপটি যে মডিউলের উপর নির্ভর করে, এই উদাহরণে app-core

লাইব্রেরি মডিউল

লাইব্রেরি মডিউলে সেই কোড থাকে যা অ্যাপ মডিউল অ্যাসেম্বল করে, যেমন আপনার অ্যাপের ফিচার, UI কম্পোনেন্ট এবং বিজনেস লজিক। নতুন প্রোজেক্ট টেমপ্লেটে, app-core লাইব্রেরি মডিউলে উদাহরণ কোড সহ MainActivity.kt ফাইল থাকে।

লাইব্রেরি মডিউলের lightbuild.yaml ফাইল মডিউলের type ভ্যালু library-এ সেট করে। লাইব্রেরি মডিউল তাদের compileSdk এবং minSdk ভার্সন নির্ধারণ করে, কিন্তু তারা targetSdk সেটিং সাপোর্ট করে না। লাইব্রেরি মডিউলের lightbuild.yaml ফাইল মডিউলের ডিপেন্ডেন্সি, KSP প্রসেসর ও টেস্টও ঘোষণা করে।

একাধিক অ্যাপ মডিউল

একটি প্রোজেক্টে একাধিক অ্যাপ মডিউল থাকতে পারে। Lightbuild-এ প্রোডাক্ট ফ্লেভার ও কাস্টম বিল্ডের ধরন প্রথাগত অর্থে কাজ করে না। পরিবর্তে, আপনি আপনার অ্যাপের প্রতিটি ভার্সনের জন্য একটি আলাদা অ্যাপ মডিউল তৈরি করেন, যেমন dev এবং prod ভার্সন, অথবা free এবং paid ভার্সন।

প্রতিটি অ্যাপ মডিউল লাইব্রেরি মডিউলের উপর নির্ভর করে, যা এর ভার্সনের প্রয়োজন। অ্যাপ মডিউল লাইব্রেরি মডিউল শেয়ার করতে পারে, ভার্সন-নির্দিষ্ট কোড ও সেটিংসের (যেমন, আলাদা ডিপেন্ডেন্সি ইনজেকশন (DI) মডিউল) জন্য বিভিন্ন লাইব্রেরি মডিউলের উপর নির্ভর করে এবং কোনও ভার্সনে অন্তর্ভুক্ত নয় এমন ফিচারের জন্য লাইব্রেরি মডিউল বাদ দেয়।

যেমন, কোনও অ্যাপের ফ্রি ও পেড ভার্সন সহ প্রোজেক্টে নিম্নলিখিত মডিউল থাকতে পারে:

MyApp/
├── project.lightbuild.yaml
├── app-free/   # App module for the free version
├── app-paid/   # App module for the paid version
├── core/       # Library module that both versions use
├── di-free/    # DI module for the free version
├── di-paid/    # DI module for the paid version
└── premium/    # Library module for paid-only features

পেড ভার্সনের app-paid/lightbuild.yaml ফাইল সব পেড ভার্সনের মডিউলের উপর নির্ভর করে:

android:
  applicationId: com.example.myapp.paid
  dependencies:
    module:
      - //core
      - //di-paid
      - //premium

ফ্রি ভার্সনের app-free/lightbuild.yaml ফাইল শেয়ার করা core মডিউল ও নিজস্ব DI মডিউলের উপর নির্ভর করে এবং premium মডিউল বাদ দেয়:

android:
  applicationId: com.example.myapp.free
  dependencies:
    module:
      - //core
      - //di-free

প্রতিটি অ্যাপ মডিউলের নিজস্ব সেটিংস থাকে, যেমন অ্যাপ্লিকেশন আইডি এবং রিলিজ সাইনিং, যাতে আপনি প্রতিটি ভার্সন আলাদাভাবে তৈরি, ইনস্টল এবং প্রকাশ করতে পারেন। নির্দিষ্ট ভার্সন তৈরি করতে, build কমান্ড চালানোর সময় এর অ্যাপ মডিউল উল্লেখ করুন। যেমন:

lightbuild build app-free

সমাধান করা ডিপেন্ডেন্সি

Lightbuild প্রোজেক্টের প্রতিটি মডিউলে একটি resolved.deps ফাইল থাকে, যা ট্রানজিটিভ ডিপেন্ডেন্সি সহ মডিউলের সব সমাধান করা ডিপেন্ডেন্সি রেকর্ড করে। Lightbuild অটোমেটিক এই ফাইল তৈরি করে, যাতে আপনার প্রোজেক্ট খোলা বা তৈরি করার সময় প্রতিবার ডায়নামিক উপায়ে ডিপেন্ডেন্সি সমাধান করতে না হয়। আপনার এই ফাইলটি ম্যানুয়ালি এডিট করা উচিত নয়।

আপনার প্রোজেক্টের lightbuild.yaml ফাইলের সাথে, ভার্সন কন্ট্রোলে আপনার resolved.deps ফাইল চেক-ইন করুন।

আপনার ডিপেন্ডেন্সি লক করতে, যেমন CI বিল্ডে, lightbuild resolve বা lightbuild test-এ --locked-dependencies ফ্ল্যাগ যোগ করুন। এই ফ্ল্যাগ ব্যবহার করলে, resolved.deps ফাইল মডিউলের ডিপেন্ডেন্সির সাথে ম্যাচ না করলে, ফাইল আপডেট করার পরিবর্তে কমান্ড কাজ করে না:

lightbuild resolve --locked-dependencies