گردل در اندروید چیست و چه کاربردی دارد؟
گردل در اندروید چیست و چه کاربردی دارد؟
بسیاری از برنامه نویسان اندروید که با محیط اندروید استودیو مشغول کار هستند بطور مداوم با گریدل در ارتباط اند ولی از دانش کافی نسبت به آن برخوردار نیستند.
در این مقاله به توضیح کامل این سازنده می پردازیم و عملکرد آن را بطور کامل شرح می دهیم تا با دانش مفهومی و کامل از گریدل ، بتوانید مشکلات مربوط به آن در پروژه های خود را براحتی حل کنید.با ما همراه باشید.
گریدل یک سیستم مدیریت پیشرفته برای مدیریت مبتنی بر Groovy و Kotlin است. گریدل از دانلود خودکار و تنظیم خودکار کتابخانه ها و وابستگی ها پشتیبانی می کند.
و همچنین از Maven و Ivy برای دانلود کتابخانه ها و تنظیمات بهره می برد که این مسئله کمک میکند تا از محصولات موجود استفاده شود و نیازی به ساخت و ایجاد مجدد نباشد.
شاید جالب باشد که بدانید گریدل خود یک سازنده مستقل هم میتواند باشد و دستورات شما را اجرا کند.
به مثال زیر توجه کنید
1 2 3 4 5 6 7 8 9 |
task hello { doLast { println 'Hello Gradle' } } |
این کد دستوری که در گریدل نوشته میشود با دستور gradle hello در CMD اجرا میشود.
حال با این مثال ساده به شما توضیح میدهم که فرآیند ساخت در اندروید چگونه اتفاق میفتد.
در ابتدا خاطر نشان میکنم که گریدل هم مانند بسیاری از ابزار های دیگر مانند git,npm و adb یک ابزار کد نویسی میباشد که شما میتوانید از آن استفاده کنید.
پس گریدل در خارج از اندروید استادیو هم قابل دسترسی و استفاده میباشد که البته این امکانی هست که شما را به انجام آن توصیه نمیکنیم و مطالبی که در ادامه خواهید دید صرفا جهت اطلاع و درک بهتر این سازنده خاص و منحصربفرد است.
گریدل کاملا متن باز بوده و به شما این امکان را میدهد که فایل های آن را تغییر دهید و این یکی از نکاتی است که گوگل این سازنده را برای خود انتخاب کرده و ان را به نحوی که نیاز دارد پیاده سازی کرده.
یعنی گریدل که در اندروید استادیو استفاده میشود برای اندروید شخصی سازی شده و تسک های آن بر اساس نیاز در گریدل تعریف شده و بسرعت درحال پیشرفت و بروز رسانی میباشد.
بطور مثال وقتی شما انتخاب میکنید که پروژه ساخته یا به اصطلاح BUILD شود در واقع شما تسکی که گوگل برای گریدل تعریف کرده است را اجرا میکنید و شما را از سختی استفاده مستقیم و به اصطلاح Command خلاص کرده و باید از اندروید ممنون باشیم(ممنون هستیم )
و مانند همین مثال بسیاری از تسک های دیگر که تصویر زیر محل قرار گیری آنها را مشاهده می فرمایید.
این تسک هایی هست که برای پروژه ای ساده تعریف شده است برای شما در بالا قابل ملاحظه است.
تفاوت میان گریدل root و app
شاید برای شما سوال شده باشد که این دو گریدل چه تفاوتی با هم دارند?
اگر برنامه ای که در آن از چند زیر برنامه یا به اصطلاح Module استفاده شده باشد را دیده باشید، میدانید که هر زیر برنامه گریدل خاص خود را دارد پس این امکان وجود دارد که در یک برنامه مثل زیر شما چندین گریدل داشته باشید ولی نکته مهم این است که تمام گریدل های شما از یک گریدل کلی پیروی میکنند که آن Root gradle یا Project gradle نام دارد و تنظیمات اصلی و کلی شما در فایل های مربوط به آن صورت خواهد گرفت
تصویر زیر یک مثال از حضور زیربرنامه های متعدد در یک برنامه است.
شما برای معرفی زیر برنامه ها به برنامه اصلی یا باید از گزینه های خود اندروید استفاده کنید یا بصورت دستی در فایل setting.gradle آنها را به گریدل اصلی معرفی کنید که البته معرفی بصورت دستی اصلا توصیه نمیشود و بهترین راه استفاده از گزینه Import module استفاده کنید و یا از گزینه New module برای ساخت یک زیر برنامه برای خود استفاده کنید.
با انتخاب این گزینه ها تسک معرفی زیربرنامه شما به گریدل انجام میشود و در فایل setting.gradle کارهای لازم را انجام میدهد.
پس همانطور که اشاره شد گریدل پروژه Project gradle تنظیمات کلی گریدلی که شما در برنامه استفاده میکنید را انجام میدهد و گریدل برنامه app gradle تنظیمات کلاس ها و دانلود کتابخانه ها و پیش نیاز ها را به عهده دارد.
نکته ای در اینجا لازم به ذکر است این است که R که شما در معرفی ایتم ها به کلاس ها از آن استفاده میکنید متعلق به گریدل است و این گریدل است که ان را میسازد و به شما اجازه میدهد از آن استفاده کنید پس در بعضی مواقع که برنامه شما R را نمیشناسد در واقع مشکل از گریدل و عدم همسان سازی آن در برنامه است.در واقع شما حتی اگر این فایل را از برنامه پاک کنید آن مجدد بر اساس نام بسته شما یا package name ساخته میشود.پس وظیفه ساخت آن با گریدل است ولی اگر شما نام بسته را اشتباها تغییر داده باشید دیگر مشکل به گریدل نیست چون صرفا تسک خود را بر اساس داده اشتباه شما انجام داده است.
فایل های موجود در گریدل:
این فایل ها در پروژه ای ساده به تعداد ۶ عدد خواهند بود که در ادامه نام برده و توضیح مختصری داده خواهد شد
۱٫Build.gradle=>Project
- Build.gradle=>App
- gradle-wrapper.properties
- gradle.properties
- settings.gradle
- local.properties
- proguard-rules.pro
۱) Build.gradle=>Project
// Top-level build file where you can add configuration options common to all sub-projects/modules.
توضیح بالا در ابتدای فایل مورد نظر نوشته شده است و به این نکته اشاره دارد که این فایل یک تنظیمات سطح بالا میباشد که برای همه زیر برنامه ها اعمال خواهد شد و پایه و اساس برنامه است.
در این فایل چند تابع پر کاربرد قابل مشاهده هستند. مثلاً تابع Dependencies کتابخانه ها و نیاز های پروژه را تعریف میکند. همچنین تابع Repositories تعیین میکند که برای فراهم کردن این نیاز ها و کتابخانه ها، گریدل باید به چه مخازنی رجوع کند. هر کدام از این توابع یک Closure (کپسول های جداگانه) را به عنوان پارامتر میپذیرند. درون این کپسول ها، ما میتوانیم ورودی مورد نیاز را به پروژه معرفی کنیم.در تصویر زیر نمونه ای از این فایل قرار داده شده است.
در تصویر بالا قسمت buildscript یک تسک میباشد که شامل دو تابع است که در بالا معرفی شد.
۲) Build.gradle=>App
در این فایل تنظیمات گریدل در مقیاس کوچکتر به بررسی ورژن ها میپردازد که لازم به ذکر است که این فایل بطور کامل زیرمجموعه فایل Build.gradle(Project) میباشد و از Repositories آن استفاده میکند.
بطور مثال در عکس زیر کتابخانه ها در این فایل تعریف میشود و اینکه از چه محلی دریافت شود در فایل قبلی و در Repositories مشخص میشود و به این صورت تسک ها بطور زنجیره ای اجرا میشود.
به عکس بالا توجه کنید.
ابتدا در این فایل در خط اول به گریدل پلاگین اندروید اضافه میشود تا در ادامه این فایل از این پلاگین استفاده شود
همانطور که میبینید در این فایل تنظیمات اندروید به گریدل داده میشود تا بتواند بر اساس این تنظیمات تسک های خود را اجرا کند
و در انتها در خط ۱۹ در متد Dependencies استفاده شده که با متد فایل قبلی متفاوت است زیرا در این فایل شما از پلاگین خود اندرود استفاده کرده اید
در این متد است که شما کتابخانه های خود را معرفی میکنید تا به برنامه اضافه شود
دقت کنید که اگر شما زیر برنامه های دیگری در برنامه داشته باشید هر کدام برای خود یک نمونه از این فایل دارند و کتابخانه های خود را اینجا دریافت میکنند
۳) gradle-wrapper.properties.
شما در این فایل میتوانید ورژن گریدل خود را مشخص کنید و در واقع تنظیمات اصلی گریدل در این فایل انجام میشود
۴) gradle.properties
این بخش تنظیمات و اتصال بین گریدل و جاوا را بر عهده دارد و معمولا تغییر زیادی در برنامه نویسی اندرود در آن اعمال نمیشود
بحث در رابطه این فایل بسیار سنگین و پرمحتوا میباشد و نیازی به دانستن آنها در سطح اندروید نیست(حتی کمتر از مباحث دیگر که گفته شد)
پس دوستانی که تمایل دارند میتوانند از خود مرجع گریدل مطالعه بفرمایند:
https://docs.gradle.org/current/userguide/build_environment.html#sec:configuring_jvm_memory
۵) settings.gradle
تنها فعالیتی که این فایل از گریدل در اندروید برای ما انجام میدهد برقراری ارتباط و معرفی زیر برنامه ها به گریدل است تا تسک ها برای آنها معرفی شود و همانطور که گفته شد بهتر است که تغییر دستی در این فایل انجام نشود
۶) local.properties
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
متن بالا در ابتدای فایل به ما توضیح میدهد که این فایل بسته به هر سیستم متفاوت است و در ورژن کنترل ها(مانند git ) نباید ارسال شود
ولی در ورژن های حال حاضر اندروید استادیو خود آن این فایل را بسته به سیستم و با مطلع کردن شما تغییر میدهد تا مشکلی در کار نباشد
در کل این فایل وظیفه آدرس دهی SDK و NDK دستکاه شمارا به گریدل بر عهده دارد
۷) proguard-rules.pro
این فایل ممکن است خالی باشد و یا اصلا وجود نداشته باشد
وظیفه این فایل کد گزاری برنامه شما توسط گریدل است تا از Decompile کردن برنامه شما جلوگیری شود
در گردل ۳ و بالاتر این امکان برای ما مهیا میباشد
البته استفاده از این قابلیت بسیار آسان بوده ولی بعلت دقت بالا خود به مقاله ای دیگر نیاز دارد
از لینک زیر میتوانید اطلاعات کاملتری دریافت کنید
http://developer.android.com/guide/developing/tools/proguard.html
نتیجه گیری:
اگر برنامه نویس اندروید باشید و یا در حال یادگیری آن باشید بسیار پیش میاید که در Build و یا همسانسازی sync)) برنامه و گریدل دچار مشکل شده باشید، خوشبختانه android studio در اکثر مواقع این مشکلاتی که در تسک های گریدل بوجود میاید را به شما اطلاع میدهد و راه حل را بصورت یک تسک با لینک آبی در ترمینال برنامه به شما پیشنهاد میدهد ولی در بعضی مواقع هم ممکن است راهنمایی انجام نشود و شما باید مستیقما درگیر بخش گردل شوید و آستین بالا زده و مشکل را حل کنید.
نکته بعدی این است که Repository های اندروید در لیست تحریم قرار دارد و شما بطور مستقیم از آنها نمیتوانید استفاده کنید و کتابخانه های خود را دریافت کنید پیشنهاد ما به شما رفع تحریم هست که از سایت شکن در لینک زیر میتوانید کمک بگیرید.
و نکته نهایی اینکه در طول برنامه نویسی خود اگر تغییری در گریدل نمیدهید(و معمولا هم تغییر در گریدل فقط ابتدای برنامه نویسی است) بهتر است که رد قسمت گریدل گزینه آفلاین را انتخاب کنید تا فرآیند ساخته پروژه شما سریعتر انجام شود.
امیدوارم این مقاله به درک بهتر شما از برنامه نویسی کمک کند.