فرض کنید در یک پروژه چندین ماژول داشته باشیم و dependency های مشترکی هم داشته باشن ، اگر بخوایم این dependency ها رو آپدیت ، دانگرید یا هر گونه تغییری بدیم باید تک تک بریم و فایل gradle اون ها رو عوض کنیم یا حتی اگر یک ماژول داشته باشیم شاید علاقه داشته باشیم کمی فایل gradle و تنظیمات اون رو مرتب کنیم ، برای این مساله ما نیاز داریم نوعی اسکریپت رو برای gradle مون ایجاد کنیم .
قبل از هر چیز باید بدونیم که میتونیم زبان های برنامه نویسی رو به دو دسته DSL و GPL تقسیم کنیم ، DSL مخفف Domain-specific language هست ، یعنی زبان هایی که مختص یک حوزه به خصوص هستند و GPL به معنی General purpose languages یعنی زبان هایی که برای اهداف مختفی طراحی شدند ، اگر بخواهیم از DSL مثال بزنیم میشه به SQL اشاره کرد ، شما با SQL می تونید اپ اندروید بنویسید ؟ یا یک سایت بالا بیارید ؟ نه ! فقط برای کار با دیتابیس طراحی شده اما زبانی مثل Java رو هزار تا کار میتونید باهاش بکنید ، میتونید اپ جاوا بنویسید ، میتونید Backend بنویسید ، میتونید در سخت افزار ازش استفاده کنید و ... .
حالا زبان Kotlin چیه ؟ مسلما باید GPL باشه و هست اما یک زبان زیرمجموعه هم تحت عنوان Kotlin-DSL داره ، این زبان گرامر متفاوتی نداره و از همون گرامر Kotlin پیروری میکنه ، ما در فایل gradle مون از زبانی به اسم Groovy-DSL استفاده میکنیم (برای اطلاع بیشتر در مورد Groovy این لینک رو مطالعه کنید) ، حالا ما میتونیم برای فایل gradle مون از Kotlin-DSL استفاده کنیم .
برای start قضیه طبق عکس زیر این پوشه رو در root پروژه تون ایجاد کنید :
حالا ما به یک gradle جایگزین نیاز داریم ، برای این منظور در پوشه ای که الان ساختیم فایلی به اسم build.gradle.kts رو ایجاد میکنیم (فرمت فایل kts خواهد بود) ، حالا باید Kotlin-DSL رو برای پروژه فعال کنیم ، برای این کار کد زیر رو در فایلی که الان ساختید کپی کنید و بعدش پروژه رو synch کنید :
خب حالا پلاگین Kotlin-DSL فعال شده ، اگر روی پوشه buildSrc بیایید و یک Directory جدید بسازید به شما پیشنهاداتی میده ، طبق عکس زیر گزینه ای که هایلایت شده رو انتخاب کنید تا این پوشه ساخته بشه :
خب ، کاری که ما میخوایم انجام بدیم اینه که فایل gradle ماژول App و همین طور فایل gradle کل پروژه بیانیه سری اطلاعات رو از اینجا بخونن ، این اطلاعات چیزایی مثل minSdkVersion ، versionName و dependency های ما هستن .
در ابتدا در این پوشه ای که الان ساختیم یک فایل به نام Application ایجاد میکنیم ، تو این فایل قراره اطلاعات خودِ نسخه (همون versionName و اینا) رو تنظیم کنیم .
حالا میخوایم dependency ها و version هاشون رو مشخص کنیم ، پس دو کلاس به هم اسامی میسازیم :
و
من برای gradle کلی دیگه این کار رو انجام نمیدم چون مشابهه ، حالا باید در فایل gradle ماژول App بیاییم و این ها رو به هم وصل کنیم پس gradle به این صورت در میاد :
خب حالا مزیت های این کارایی که کردیم چیه ؟ برای اینکه بهتر بفهمید چقدر کدهامون قدرتمند تر میشه یک تغییری در کدهای بالا میدیم ، میخوایم به جای اینکه دونه دونه dependency ها رو اضافه کنیم کلشو با یه خط اضافه کنیم ، برای این کار اول در کلاس Dependency یک تابع ایجاد میکنیم :
حالا این تیکه از فایل gradle رو به این صورت تغییر میدیم :
و این طوری کل dependency هامون یکجا add شدند ! مزیت بزرگی که Kotlin-DSL به ما میده استفاده از syntax خودِ Kotlin برای Gradle هست ، مثلا در مثال بالا ما از یک تابع واسطه استفاده کردیم (که بی مورد بود صرفا مثلا آموزشی بود) .
برای مطالعه بیشتر این مقاله رو پیشنهاد میکنم .
من رو در لینکدین ، اینستاگرام و یوتیوب دنبال کنید ???
اگه دوست داشتید میتونید به صفحه Spotify و SoundCloud بنده هم برید و موسیقی های منو گوش بدید ???