Ali Shobeyri
Ali Shobeyri
خواندن ۳ دقیقه·۴ سال پیش

ماژولار سازی Gradle با Kotlin-DSL

فرض کنید در یک پروژه چندین ماژول داشته باشیم و dependency های مشترکی هم داشته باشن ، اگر بخوایم این dependency ها رو آپدیت ، دانگرید یا هر گونه تغییری بدیم باید تک تک بریم و فایل gradle اون ها رو عوض کنیم یا حتی اگر یک ماژول داشته باشیم شاید علاقه داشته باشیم کمی فایل gradle و تنظیمات اون رو مرتب کنیم ، برای این مساله ما نیاز داریم نوعی اسکریپت رو برای gradle مون ایجاد کنیم .

زبان های DSL

قبل از هر چیز باید بدونیم که می‌تونیم زبان های برنامه نویسی رو به دو دسته 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 پروژه تون ایجاد کنید :

ایجاد فایل buildSrc
ایجاد فایل buildSrc

حالا ما به یک gradle جایگزین نیاز داریم ، برای این منظور در پوشه ای که الان ساختیم فایلی به اسم build.gradle.kts رو ایجاد می‌کنیم (فرمت فایل kts خواهد بود) ، حالا باید Kotlin-DSL رو برای پروژه فعال کنیم ، برای این کار کد زیر رو در فایلی که الان ساختید کپی کنید و بعدش پروژه رو synch کنید :

https://gist.github.com/sasssass/dedefdc6024df4c6d8bc24ead9d1c4ca

خب حالا پلاگین Kotlin-DSL فعال شده ، اگر روی پوشه buildSrc بیایید و یک Directory جدید بسازید به شما پیشنهاداتی میده ، طبق عکس زیر گزینه ای که هایلایت شده رو انتخاب کنید تا این پوشه ساخته بشه :

ایجاد پوشه src
ایجاد پوشه src

خب ، کاری که ما می‌خوایم انجام بدیم اینه که فایل gradle ماژول App و همین طور فایل gradle کل پروژه بیانیه سری اطلاعات رو از اینجا بخونن ، این اطلاعات چیزایی مثل minSdkVersion ، versionName و dependency های ما هستن .

در ابتدا در این پوشه ای که الان ساختیم یک فایل به نام Application ایجاد می‌کنیم ، تو این فایل قراره اطلاعات خودِ نسخه (همون versionName و اینا) رو تنظیم کنیم .

https://gist.github.com/sasssass/78b676e78fd29ea7bfa3bfcb34007d8f

حالا می‌خوایم dependency ها و version هاشون رو مشخص کنیم ، پس دو کلاس به هم اسامی می‌سازیم :

https://gist.github.com/sasssass/0d5e5632061d5f85a033a448e1f5cee5

و

https://gist.github.com/sasssass/1d9e950f0c9efbb512ae3420a65cd3f5

من برای gradle کلی دیگه این کار رو انجام نمی‌دم چون مشابهه ، حالا باید در فایل gradle ماژول App بیاییم و این ها رو به هم وصل کنیم پس gradle به این صورت در میاد :

https://gist.github.com/sasssass/48cf88c47f1e17ed7c429be462ddafc3

خب حالا مزیت های این کارایی که کردیم چیه ؟ برای اینکه بهتر بفهمید چقدر کدهامون قدرتمند تر میشه یک تغییری در کدهای بالا می‌دیم ، می‌خوایم به جای اینکه دونه دونه dependency ها رو اضافه کنیم کلشو با یه خط اضافه کنیم ، برای این کار اول در کلاس Dependency یک تابع ایجاد می‌‎کنیم :

https://gist.github.com/sasssass/edeee79872a84b35d672941dc250522c

حالا این تیکه از فایل gradle رو به این صورت تغییر می‌دیم :

https://gist.github.com/sasssass/4303322ef83ee7adfa84769ed0874841

و این طوری کل dependency هامون یکجا add شدند ! مزیت بزرگی که Kotlin-DSL به ما می‌ده استفاده از syntax خودِ Kotlin برای Gradle هست ، مثلا در مثال بالا ما از یک تابع واسطه استفاده کردیم (که بی مورد بود صرفا مثلا آموزشی بود) .

برای مطالعه بیشتر این مقاله رو پیشنهاد می‌کنم .


من رو در لینکدین ، اینستاگرام و یوتیوب دنبال کنید ???

اگه دوست داشتید می‌تونید به صفحه Spotify و SoundCloud بنده هم برید و موسیقی های منو گوش بدید ???

کاتلیناندرویدبرنامه نویسیgradlekotlin
برنامه نویس اندروید - https://www.linkedin.com/in/iryebohs/
شاید از این پست‌ها خوشتان بیاید