ساختار ساخت اندروید، ساختار ساخت اندروید

پروژه های اندروید حاوی بسیاری از فایل ها و ساختارهای دایرکتوری مربوط به ساخت هستند تا منبع و منابع برنامه شما را سازماندهی کنند. قبل از پرداختن به جزئیات پیکربندی، نگاهی به ساختار کلی و اصول اولیه آنچه در هر قسمت تعلق دارد خواهیم انداخت.

این جدول فایل های معمولی در یک پروژه اندروید را فهرست می کند. توضیحات هر فایل یا دایرکتوری شامل یادداشت هایی در مورد نوع محتوای آن است. بهترین روش‌ها در طول زمان تکامل می‌یابند، و این توضیحات ممکن است با پروژه‌ای که به ارث برده‌اید یا از اینترنت دانلود کرده‌اید مطابقت نداشته باشد.

هنگام نوشتن فایل های ساخت خود، از یک رویکرد اعلامی استفاده کنید. منطق ساخت و تعاریف وظایف فقط باید در افزونه ها ظاهر شوند. با محدود کردن منطق ساخت به پلاگین ها، فایل های بیلد به اعلان داده ها تبدیل می شوند که برای درک و ویرایش مستقیم تر هستند. نسخه‌های آینده ممکن است شامل مشخصات جایگزین مانند Declarative Gradle باشد که از ایجاد منطق در فایل‌ها جلوگیری می‌کند.

پوشه/فایل

استفاده کنید

gradle/

دایرکتوری کش پروژه Gradle

توسط Gradle مدیریت می شود و حاوی توزیع Gradle دانلود شده، کش پروژه و فایل های پیکربندی است.

فایل های این دایرکتوری را تغییر ندهید!

.idea/

فراداده پروژه Android Studio

فایل های این دایرکتوری را تغییر ندهید!

build.gradle(.kts)

فایل ساخت ریشه

فقط باید شامل اعلان های پلاگین برای راه اندازی یک کلاس پلاگین مشترک در بین پروژه های فرعی باشد.

کدهای دیگر باید در تنظیمات یا فایل‌های ساخت سطح پروژه تودرتو قرار گیرند.

gradle.properties

پیکربندی اجرای Gradle

حاوی ویژگی های Gradle، کنترل جنبه های محیط ساخت Gradle مانند اندازه پشته، حافظه پنهان و اجرای موازی.

برخی از ویژگی‌های موقت اندروید در اینجا تعریف شده‌اند تا تغییرات AGP DSL را با افزودن و حذف آن‌ها کاهش دهند.

gradlew (لینوکس، مک)

gradlew.bat (ویندوز)

فایل بسته بندی Gradle

با دانلود یک توزیع Gradle و سپس ارسال دستورات به آن، ساخت شما را بوت استرپ می کند. این به شما امکان می‌دهد بدون نیاز به نصب Gradle، بیلدها را اجرا کنید.

محلی.ملاک

پیکربندی ماشین محلی

حاوی ویژگی‌های مربوط به دستگاه محلی، مانند مکان Android SDK است.

این فایل را از کنترل منبع حذف کنید!

settings.gradle(.kts)

تنظیم اولیه ساخت Gradle

حاوی اطلاعات ساخت جهانی برای مقداردهی اولیه Gradle و پیکربندی پروژه، مانند

  • نام پروژه
  • لیستی از پروژه های فرعی که باید در این ساختن گنجانده شوند
  • مشخصات مخزن برای مکان یابی افزونه ها و وابستگی ها
  • واردات کاتالوگ نسخه خارجی.

گرید/

↳ libs.versions.toml

کاتالوگ نسخه

متغیرهایی را برای وابستگی ها و افزونه های مورد استفاده در ساخت شما تعریف می کند. شما در اینجا مشخص می‌کنید که از کدام نسخه‌ها می‌خواهید استفاده کنید، و از یکنواختی در تمام پروژه‌های فرعی در پروژه خود اطمینان حاصل کنید.

↳ لفاف/

↳ gradle-wrapper.jar

Gradle bootstrapping قابل اجرا

توزیع Gradle مشخص شده را دانلود می‌کند (اگر وجود نداشته باشد)، و آن را اجرا می‌کند و هر آرگومان را در کنار آن ارسال می‌کند.

↳ gradle-wrapper.properties

پیکربندی برای بسته بندی Gradle

محل دانلود توزیع Gradle را مشخص می کند (از جمله اینکه از کدام نسخه استفاده شود).

برنامه/

دایرکتوری زیر پروژه

پروژه‌های فرعی (معروف به "ماژول" در Android Studio) می‌توانند برنامه‌ها یا کتابخانه‌هایی بسازند و ممکن است به پروژه‌های فرعی دیگر یا وابستگی‌های خارجی وابسته باشند.

app نام معمولی برای یک زیر پروژه برنامه سطح بالا است (اما نام مورد نیاز نیست). سایر پروژه های فرعی ساختارهای مشابه با نام های متفاوت دارند.

هر دایرکتوری می تواند یک پروژه فرعی باشد و باید حداقل حاوی یک فایل build.gradle(.kts) باشد و با استفاده از settings.gradle(.kts) در ساخت گنجانده شود.

↳ build.gradle (.kts)

فایل ساخت در سطح پروژه فرعی

نحوه ساخت این پروژه فرعی را اعلام می کند. هر پروژه فرعی نیاز به یک فایل ساخت جداگانه دارد و باید حاوی

  • پلاگین های مورد استفاده برای ساخت این پروژه فرعی
  • بلوک های پیکربندی مورد نیاز پلاگین ها
  • وابستگی ها (کتابخانه ها و پلتفرم ها) در هنگام ساخت این پروژه فرعی گنجانده شده است

شما نباید منطق ساخت (مانند تعاریف یا شرایط تابع Kotlin) یا اعلان وظایف را در فایل های ساخت خود قرار دهید. منطق ساخت و وظایف فقط باید در داخل افزونه ها باشد .

↳ src/

فایل های منبع زیر پروژه

فایل های منبع (کد برنامه و منابع) را در مجموعه های منبع گروه بندی می کند. مجموعه منبع main حاوی فایل‌های منبع است که برای همه انواع مشترک هستند، در حالی که مجموعه‌های منبع دیگر حاوی فایل‌های منبع منحصر به فرد برای یک نوع هستند.

↳ اصلی/

مجموعه منبع اصلی

کد منبع و منابعی که در همه انواع ساخت مشترک هستند. این منبع به عنوان پایه برای همه ساخت‌ها عمل می‌کند، و مجموعه‌های منبع خاص‌تر دیگری به این منبع اضافه یا نادیده گرفته می‌شوند.

↳ جاوا/

↳ کاتلین/

کد منبع کاتلین و جاوا

دایرکتوری java می تواند حاوی کد منبع ترکیبی جاوا و کاتلین باشد. اگر این زیر پروژه فقط حاوی کد Kotlin باشد، می توانید نام این دایرکتوری را kotlin.

Android
اولین پلتفرم کاتلین است. منبع جاوا پشتیبانی می شود، اما API های جدید زبان Kotlin را هدف قرار می دهند. توصیه می کنیم از Kotlin برای همه کدهای جدید و به روز رسانی های اصلی کدهای موجود استفاده کنید.

↳ پاسخ/

فایل های منبع اندروید

حاوی منابع برنامه مانند فایل ها و تصاویر XML است. همه برنامه‌ها از برخی منابع اولیه مانند نمادهای راه‌انداز استفاده می‌کنند، اما بسیاری از این منابع، مانند طرح‌بندی‌ها و منوها، فقط در برنامه‌های مبتنی بر view استفاده می‌شوند. برنامه های Compose از منابع String تعریف شده در این فهرست استفاده می کنند.

↳ AndroidManifest.xml

فراداده برنامه اندروید

توسط مدیر بسته اندروید بخوانید تا به سیستم بگویید

  • اجزای تعریف شده توسط برنامه شما
  • مجوزهای لازم
  • سازگاری دستگاه
  • محدودیت های پلتفرم اندروید

↳ اندروید تست/

مجموعه منبع تست دستگاه

حاوی منبع آزمایش‌هایی است که روی دستگاه یا شبیه‌ساز مجهز به Android اجرا می‌شوند. این تست ها به یک محیط اندروید واقعی دسترسی دارند، اما کندتر از تست های میزبان اجرا می شوند.

همه فایل‌های منبع در مجموعه منبع main برای استفاده توسط منبع تحت AndroidTest در دسترس هستند .

↳ تست/

مجموعه منبع تست میزبان

حاوی منبع آزمایش‌هایی است که به صورت محلی در JVM اجرا می‌شوند، برخلاف آزمایش‌هایی که روی دستگاه اجرا می‌شوند. این تست ها بسیار سریعتر از تست های دستگاه اجرا می شوند. با این حال، هر فراخوانی سیستمی (از جمله چرخه‌های عمری که برنامه شما را اجرا می‌کند) باید مسخره، جعلی، کله‌دار یا شبیه‌سازی شود.

همه فایل های منبع در مجموعه منبع main برای استفاده توسط منبع تحت آزمایش در دسترس هستند .

↳ proguard-rules.pro

قوانین پیکربندی R8

قوانینی را برای کنترل کوچک شدن، بهینه سازی و مبهم سازی برنامه تعریف می کند. R8 کد و منابع غیر ضروری را حذف می کند، عملکرد زمان اجرا را بهینه می کند و با تغییر نام شناسه ها، کد شما را به حداقل می رساند.

،

پروژه های اندروید حاوی بسیاری از فایل ها و ساختارهای دایرکتوری مربوط به ساخت هستند تا منبع و منابع برنامه شما را سازماندهی کنند. قبل از پرداختن به جزئیات پیکربندی، نگاهی به ساختار کلی و اصول اولیه آنچه در هر قسمت تعلق دارد خواهیم انداخت.

این جدول فایل های معمولی در یک پروژه اندروید را فهرست می کند. توضیحات هر فایل یا دایرکتوری شامل یادداشت هایی در مورد نوع محتوای آن است. بهترین روش‌ها در طول زمان تکامل می‌یابند، و این توضیحات ممکن است با پروژه‌ای که به ارث برده‌اید یا از اینترنت دانلود کرده‌اید مطابقت نداشته باشد.

هنگام نوشتن فایل های ساخت خود، از یک رویکرد اعلامی استفاده کنید. منطق ساخت و تعاریف وظایف فقط باید در افزونه ها ظاهر شوند. با محدود کردن منطق ساخت به پلاگین ها، فایل های بیلد به اعلان داده ها تبدیل می شوند که برای درک و ویرایش مستقیم تر هستند. نسخه‌های آینده ممکن است شامل مشخصات جایگزین مانند Declarative Gradle باشد که از ایجاد منطق در فایل‌ها جلوگیری می‌کند.

پوشه/فایل

استفاده کنید

gradle/

دایرکتوری کش پروژه Gradle

توسط Gradle مدیریت می شود و حاوی توزیع Gradle دانلود شده، کش پروژه و فایل های پیکربندی است.

فایل های این دایرکتوری را تغییر ندهید!

.idea/

فراداده پروژه Android Studio

فایل های این دایرکتوری را تغییر ندهید!

build.gradle(.kts)

فایل ساخت ریشه

فقط باید شامل اعلان های پلاگین برای راه اندازی یک کلاس پلاگین مشترک در بین پروژه های فرعی باشد.

کدهای دیگر باید در تنظیمات یا فایل‌های ساخت سطح پروژه تودرتو قرار گیرند.

gradle.properties

پیکربندی اجرای Gradle

حاوی ویژگی های Gradle، کنترل جنبه های محیط ساخت Gradle مانند اندازه پشته، حافظه پنهان و اجرای موازی.

برخی از ویژگی‌های موقت اندروید در اینجا تعریف شده‌اند تا تغییرات AGP DSL را با افزودن و حذف آن‌ها کاهش دهند.

gradlew (لینوکس، مک)

gradlew.bat (ویندوز)

فایل بسته بندی Gradle

با دانلود یک توزیع Gradle و سپس ارسال دستورات به آن، ساخت شما را بوت استرپ می کند. این به شما امکان می‌دهد بدون نیاز به نصب Gradle، بیلدها را اجرا کنید.

محلی.ملاک

پیکربندی ماشین محلی

حاوی ویژگی‌های مربوط به دستگاه محلی، مانند مکان Android SDK است.

این فایل را از کنترل منبع حذف کنید!

settings.gradle(.kts)

تنظیم اولیه ساخت Gradle

حاوی اطلاعات ساخت جهانی برای مقداردهی اولیه Gradle و پیکربندی پروژه، مانند

  • نام پروژه
  • لیستی از پروژه های فرعی که باید در این ساختن گنجانده شوند
  • مشخصات مخزن برای مکان یابی افزونه ها و وابستگی ها
  • واردات کاتالوگ نسخه خارجی.

گرید/

↳ libs.versions.toml

کاتالوگ نسخه

متغیرهایی را برای وابستگی ها و افزونه های مورد استفاده در ساخت شما تعریف می کند. شما در اینجا مشخص می‌کنید که از کدام نسخه‌ها می‌خواهید استفاده کنید، و از یکنواختی در تمام پروژه‌های فرعی در پروژه خود اطمینان حاصل کنید.

↳ لفاف/

↳ gradle-wrapper.jar

Gradle bootstrapping قابل اجرا

توزیع Gradle مشخص شده را دانلود می‌کند (اگر وجود نداشته باشد)، و آن را اجرا می‌کند و هر آرگومان را در کنار آن ارسال می‌کند.

↳ gradle-wrapper.properties

پیکربندی برای بسته بندی Gradle

محل دانلود توزیع Gradle را مشخص می کند (از جمله اینکه از کدام نسخه استفاده شود).

برنامه/

دایرکتوری زیر پروژه

پروژه‌های فرعی (معروف به "ماژول" در Android Studio) می‌توانند برنامه‌ها یا کتابخانه‌هایی بسازند و ممکن است به پروژه‌های فرعی دیگر یا وابستگی‌های خارجی وابسته باشند.

app نام معمولی برای یک زیر پروژه برنامه سطح بالا است (اما نام مورد نیاز نیست). سایر پروژه های فرعی ساختارهای مشابه با نام های متفاوت دارند.

هر دایرکتوری می تواند یک پروژه فرعی باشد و باید حداقل حاوی یک فایل build.gradle(.kts) باشد و با استفاده از settings.gradle(.kts) در ساخت گنجانده شود.

↳ build.gradle (.kts)

فایل ساخت در سطح پروژه فرعی

نحوه ساخت این پروژه فرعی را اعلام می کند. هر پروژه فرعی نیاز به یک فایل ساخت جداگانه دارد و باید حاوی

  • پلاگین های مورد استفاده برای ساخت این پروژه فرعی
  • بلوک های پیکربندی مورد نیاز پلاگین ها
  • وابستگی ها (کتابخانه ها و پلتفرم ها) در هنگام ساخت این پروژه فرعی گنجانده شده است

شما نباید منطق ساخت (مانند تعاریف یا شرایط تابع Kotlin) یا اعلان وظایف را در فایل های ساخت خود قرار دهید. منطق ساخت و وظایف فقط باید در داخل افزونه ها باشد .

↳ src/

فایل های منبع زیر پروژه

فایل های منبع (کد برنامه و منابع) را در مجموعه های منبع گروه بندی می کند. مجموعه منبع main حاوی فایل‌های منبع است که برای همه انواع مشترک هستند، در حالی که مجموعه‌های منبع دیگر حاوی فایل‌های منبع منحصر به فرد برای یک نوع هستند.

↳ اصلی/

مجموعه منبع اصلی

کد منبع و منابعی که در همه انواع ساخت مشترک هستند. این منبع به عنوان پایه برای همه ساخت‌ها عمل می‌کند، و مجموعه‌های منبع خاص‌تر دیگری به این منبع اضافه یا نادیده گرفته می‌شوند.

↳ جاوا/

↳ کاتلین/

کد منبع کاتلین و جاوا

دایرکتوری java می تواند حاوی کد منبع ترکیبی جاوا و کاتلین باشد. اگر این زیر پروژه فقط حاوی کد Kotlin باشد، می توانید نام این دایرکتوری را kotlin.

Android
اولین پلتفرم کاتلین است. منبع جاوا پشتیبانی می شود، اما API های جدید زبان Kotlin را هدف قرار می دهند. توصیه می کنیم از Kotlin برای همه کدهای جدید و به روز رسانی های اصلی کدهای موجود استفاده کنید.

↳ پاسخ/

فایل های منبع اندروید

حاوی منابع برنامه مانند فایل ها و تصاویر XML است. همه برنامه‌ها از برخی منابع اولیه مانند نمادهای راه‌انداز استفاده می‌کنند، اما بسیاری از این منابع، مانند طرح‌بندی‌ها و منوها، فقط در برنامه‌های مبتنی بر view استفاده می‌شوند. برنامه های Compose از منابع String تعریف شده در این فهرست استفاده می کنند.

↳ AndroidManifest.xml

فراداده برنامه اندروید

توسط مدیر بسته اندروید بخوانید تا به سیستم بگویید

  • اجزای تعریف شده توسط برنامه شما
  • مجوزهای لازم
  • سازگاری دستگاه
  • محدودیت های پلتفرم اندروید

↳ اندروید تست/

مجموعه منبع تست دستگاه

حاوی منبع آزمایش‌هایی است که روی دستگاه یا شبیه‌ساز مجهز به Android اجرا می‌شوند. این تست ها به یک محیط اندروید واقعی دسترسی دارند، اما کندتر از تست های میزبان اجرا می شوند.

همه فایل‌های منبع در مجموعه منبع main برای استفاده توسط منبع تحت AndroidTest در دسترس هستند .

↳ تست/

مجموعه منبع تست میزبان

حاوی منبع آزمایش‌هایی است که به صورت محلی در JVM اجرا می‌شوند، برخلاف آزمایش‌هایی که روی دستگاه اجرا می‌شوند. این تست ها بسیار سریعتر از تست های دستگاه اجرا می شوند. با این حال، هر فراخوانی سیستمی (از جمله چرخه‌های عمری که برنامه شما را اجرا می‌کند) باید مسخره، جعلی، کله‌دار یا شبیه‌سازی شود.

همه فایل های منبع در مجموعه منبع main برای استفاده توسط منبع تحت آزمایش در دسترس هستند .

↳ proguard-rules.pro

قوانین پیکربندی R8

قوانینی را برای کنترل کوچک شدن، بهینه سازی و مبهم سازی برنامه تعریف می کند. R8 کد و منابع غیر ضروری را حذف می کند، عملکرد زمان اجرا را بهینه می کند و با تغییر نام شناسه ها، کد شما را به حداقل می رساند.