gradle build system

راهنمای سریع gradle در اندروید استودیو

اگر توسعه دهنده اندروید باشید و با اندروید استودیو هم کار کرده باشید، حتما با مفهومی به نام build system و gradle سر و کار داشتید. در این مطلب می‌خوام توضیحات مختصر و گذرایی در مورد گریدل بدم که موقع کد زدن حداقل با مفهوم گریدل و بیلدسیستم‌ آشنایی داشته باشید. با ادامه مطلب همراه باشید.

gradle build system

برای آشنایی با Gradle اول باید با build system آشنا بشید. اما بیلدسیستم چیست؟

بیلد سیستم یک ابزار نرم‌افزاری‌ست که کار سیستم ساخت را به صورت اتوماتیک انجام می‌دهد. هدف اصلی بیلد‌سیستم‌ها انجام عملیات‌های مختلف (مثل بررسی خطاهای کد) روی کدها برای ساخت فایل اجرایی‌ست.

برای هر زبان برنامه‌نویسی بیلد‌سیستم‌های مختلفی به وجود آمدند. جاوا سه بیلدسیستم اصلی دارد:

۱-Ant محصول Apache معرفی شده در سال 2000 – براساس زبان XML

۲-Maven محصول Apache معرفی شده در سال 2004 – براساس زبان XML

۳-Gradle محصول Hans Dockter معرفی شده در سال 2012 – براساس زبان Groovy

تا اینجای کار با بیلدسیستم آشنا شدیم و سریع میریم سراغ گریدل. قبل از اینکه از این مطلب رد بشیم این رو هم بگم که بحث بیلدسیستم‌ها بحث بسیار گسترده‌ای هست و دنیای خاص خودش رو داره.

Gradle یک اتوماتیک بیلدسیستم متن‌باز و برخلاف Ant و Maven که براساس زبان XML هستند، براساس زبان Groovy شکل گرفت. Gradle مزایای هر دو بیلدسیستم Ant و Maven رو در خود جمع کرد و خیلی زود بخاطر قدرت و انعطاف‌پذیریش موردتوجه قرار گرفت.

برای اولین بار گوگل در کنفرانس Google I/O در سال 2013 اعلام کرد که از بیلدسیستم Gradle در IDE جدیدش یعنی اندروید استودیو استفاده خواهد کرد. گوگل، Gradleرو به وسیله یک افزونه به نام Android Plug-in for Gradle به اندروید استودیو آورد.

مزایای بیلدسیستم گریدل:

Project Dependency:
Dependency می‌تواند یک Modules یا JAR File یا Library باشد که یا روی کامپیوتر خود شماست یا  روی یک سرور. گریدل می‌تواند این Dependency ها رو مدیریت و به پروژه اضافه کند.

Testing:


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

Publishing:


Gradle می‌تواند مراحل Sign کردن اپ شما را مدیریت کند.

Multiple APKs:
Gradle می‌تواند از پروژه شما چند خروجی APK بگیرد. برای مثال وقتی که ‌می‌خواهید برای دیوایس‌های مختلف با سخت‌افزارهای مختلف اپ‌های جداگانه داشته باشید.

تشریح فایل‌های گریدل:

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

Gradle Buid یا همان فایل build.gradle
هر پروژه اندروید استودیو حداقل دارای دو فایل build.gradle  هست:

۱- Top Level Build File

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

۲- Module Level Build File

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

اگر به تصویر بالا نگاه کنید می‌بینید که build.grade اول همان Top Level Build File ما هست که مربوط به کل پروژه است و فایل‌های build.gradle بعدی همان Module Level Build File ما هستند که داخل پرانتز روبروی هرکدام کارایی آن مشخص شده است. این یعنی یک پروژه اندروید در تصویر بالا وجود داره و نسخه‌های مختلف این اپ برای دستگاه‌های مختلف مثل موبایل، تلویزیون و پوشیدنی در حال توسعه است.

تشریح محتویات فایل‌ها:

Top Level Gradle Build File:

محتویات این فایل همیشه ثابت هست و به هیچ عنوان نیازی به تغییر دادن داخل این فایل نیست. تنها نکته قابل ذکر اینه که خط ۸ معرفی کننده نسخه پلاگ‌-این گریدل اندرویداستودیو به پروژه است.

Module Level Gradle Build File:

هر پروژه‌ای که داخل پروژه اصلی تعریف شود، یک Module Level Gradle Build جداگانه خواهد داشت. داخل این فایل اطلاعات کلی اپ مثل min sdk ، target sdk ، نسخه اپ و dependency های پروژه تعریف می‌شوند. در اندروید استودیو نیازی نیست اطلاعاتی که بالا گفتم داخل فایل manifest تعریف بشه، و تمام این اطلاعات داخل همین فایل قرار می‌گیره.

gradle-wrapper.properties:
این فایل به دیگران اجازه می‌دهد که کدهای شما را Build کنند حتی اگر Gradle روی کامپیوتر خود نصب نداشته باشند.

این فایل بررسی می‌کند که چه نسخه‌ای از Gradle برای Build کردن کدها نیاز است و اگر نسخه مورد نظر را پیدا نکند، اقدام به دانلود کردن نسخه‌ی مورد نیازش برای اجرای کدها می‌کند. وقتی شما پروژه‌ای در اندروید استودیو می‌سازید امکان داره این فایل همراه پروژه ساخته نشه، ولی اگر پروژه‌‌ای رو از اینترنت مثل سایت github بگیرید، بعضی مواقع این فایل رو داخلش پیدا می‌کنید.

Settings.gradle:
این فایل تمام زیرپروژه‌هایی (همان Module) که پروژه ما داخلش دارد را معرفی می‌کند.

Gradle.properties:
اطلاعات کلی پروژه داخل این فایل ذخیره می‌شوند. به‌طور پیش‌فرض این فایل خالی است.

Local.properties:
این فایل محل ذخیره android sdk را به پلاگ‌این Android Gradle معرفی می‌کنه.

پنجره‌های گریدل در اندروید استودیو:

چند پنجره در اندروید استودیو هستند که مربوط به گریدل می‌شوند.

پنجره Gradle Task:

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

پنجره Gradle Console:

در پنجره Gradle Console خروجی دستورات Gradle به همراه نتیجه و پیغام‌های خطای آن‌ها نمایش داده می‌شود.

اضافه کردن Dependency به پروژه:

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

چند راه برای اضافه کردن Dependency به پروژه وجود دارد:

۱- قرار دادن فایل موردنظر در داخل پوشه libs در داخل پوشه پروژه

۲- استفاده از تب dependencies در قسمت project structure در اندروید استودیو (در ویندوز با زدن کلیدهای ترکیبی alt+ctrl+shift+s می‌توان پنجره project structure را مشاهده کنید)

۳- اضافه کردن dependency به صورت مستقیم در قسمت dependencies فایل build.gradle پروژه

اضافه کردن dependency به هر یک از روش‌های بالا در نهایت باعث اضافه شدن dependency به فایل build.gradle در قسمت dependencies خواهد شد و بلافاصله بعد از اضافه کردن یک dependency فایل build.gradle به‌روزرسانی و dependency موردنظر به پروژه اضافه می‌شود.

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

موفق باشید.


منتشر شده

در

,

توسط

برچسب‌ها:

دیدگاه‌ها

33 پاسخ به “راهنمای سریع gradle در اندروید استودیو”

  1. ندا نیم‌رخ
    ندا

    ممنون از مطلب خوبتون
    موفق باشید

  2. محسن نیم‌رخ
    محسن

    اقا دمت گرم خیلی عالی بود

  3. مصطفي نیم‌رخ
    مصطفي

    خيلي الي بود بازم از اينجور مطالب بزاريد

  4. Sanaz نیم‌رخ
    Sanaz

    سلام. مرسی از آموزشتون. یه سوالی داشتم. این dependency هایی که فرمودید ادد میشه کرد به gradle رو چطور باید پیدا کرد؟؟؟ گاهی پیدا کردن ورژن و یا اسم دقیقشون سخته

    1. علیرضا رضوی نیم‌رخ
      علیرضا رضوی

      کتابخانه‌های مستقلی که توسعه‌دهنده‌ها می‌سازند و به پروژه قابلیت خاصی اضافه می‌کنه رو معمولا توی github میشه پیدا کرد. اکثرا هم تو خود صفحه گیت‌هاب پروژه توضیح دادن که باید چطوری به پروژه اضافه و استفاده بشه.

  5. امیر نیم‌رخ
    امیر

    اگر از پشت پروکسی میخواهید متصل بشید خطوط زیر را به فایل gradle.properies اضافه کنید.

    systemProp.http.proxyHost=www.proxyhost.org
    systemProp.http.proxyPort=8080
    systemProp.http.proxyUser=userid
    systemProp.http.proxyPassword=password
    systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost

  6. مهدی مرتضوی نیم‌رخ

    متشکرم عالی بود.

  7. matt نیم‌رخ
    matt

    بسیار عالی و مفید.

  8. آرش نیم‌رخ
    آرش

    عالی بود ممنون از اینکه در افزودن منابع وب فارسی کوشا بودید

  9. سیسمونی نیم‌رخ
    سیسمونی

    ممنونم از سایت خوبتون

  10. تبلیغات انلاین نیم‌رخ
    تبلیغات انلاین

    فوق العاده این

  11. باران نیم‌رخ
    باران

    بسیار عالی بود ممنون

  12. سارا نیم‌رخ
    سارا

    بسیار عالی و جامع بود
    ممنونم

  13. نوید نیم‌رخ
    نوید

    برا من حل نشد اصلا،، هر پروژه ای ایجاد میکنم،کامپایل اس دی کی ورژن و تارگت اس دی کی ورژن باهم برابر نمیشن و با ورژن لایبرری ها همخوانی ندارن،، لطفا راهنمایی کنید
    navid.navidy0914@gmail.com

  14. ali نیم‌رخ
    ali

    سلام روز بخیر.من ی برنامه دارم که در نسخه 2.2.2 ساخته شده الان که میخوام داخل نسخه 2.3.3 بازش کنم پیغام زیرو میده ممنون میشم راهنماییم کنین.Migrate Project to Gradle?
    This project does not use the Gradle build system. We recommend that you migrate to using the Gradle build system.

  15. میهمان نیم‌رخ
    میهمان

    یک پروژه hello world ساختم و Gradel آن را هم فعال کردم.
    وقتى یک پروژه exercise از DVD آموزشی ليندا باز میکنم Gradle آن اشکال دارد!
    آيا Gradle ها قابلیت انتقال از یک پروژه به پروژه دیگر را دارند یا بايد برای هر پروژه وصل بشم به پروکسی و دانلودش کنم؟

  16. مهدی هرزندی نیم‌رخ
    مهدی هرزندی

    سلام وقتتون بخیر.من در اندروئید استودیو با این مشکل مواجه شدم که نمیتونم برطرفش کنم.ممنون میشم راهنماییم کنید.
    Error:No cached version of com.android.tools.build:gradle:2.1.3 available for offline mode.
    Disable Gradle ‘offline mode’ and sync project

  17. محمد نیم‌رخ
    محمد

    سپاس و درود فراوان

  18. مهدی درویشی نیم‌رخ

    تشکر، عالی بود
    هر کس قبل شروع نیاز به مرور این مطالب داره..

  19. سید علی نیم‌رخ
    سید علی

    با سلام خدمت شما

    خیلی از مطالبی ارایه کردید استفاده کردم

    باز هم پست های جدید تری بگذارید

    تشکر .. .>>>

    سید علی حسینی

  20. محمد نیم‌رخ
    محمد

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

  21. نجیب الله احمدی نیم‌رخ
    نجیب الله احمدی

    سلام : سیستم من وتی که یک پروژه جدید میسازم اندروید استدییو پروژه گردل نمیکنه نمیدم مشکل چی هست و هم وقتی اندروید استدیو باز میکنم هشدار fsnotifier هم باز میشه دگه بسته هم نمیشه نمیدونم مشکل چی هست لطفا راهنمایم کنید تشکر

  22. محمد نیم‌رخ

    به عنوان یک توسعه دهنده‌ی اندروید باید تلفظ صحیح Android رو بلد باشید. اَندروید نه آندروید! و سپاس از مطالبتون.

    1. علیرضا رضوی نیم‌رخ

      حق با شماست. اصلاح شد.

  23. hamid نیم‌رخ
    hamid

    آخه بی سواد
    گریدل کار کامپایل کردن رو انجام نمیده که
    گریدل فقط مسئول مرتب کردن و تنظیم کردن فایل های پروژه و کتابخونه هاش رو به عهده داره

    کامپایل کار جاواست

    1. علیرضا رضوی نیم‌رخ

      ممنون از تذکرتون. حق با شماست. مطلب اصلاح شد.

  24. افشین نیم‌رخ
    افشین

    آقای رضوی من بای برنامه یونیتی sdk نصب کردم ولی موقع خروجی پیام زیر را داد که مربوط به گریدل است و فکر می کنم نتوانسته یکی دو فایل گریدل را دانلود کند در حالیکه من با قندشکن شخصی وارد شده بودم و همین اررور را هم در سینک در اندروید استدیو دارم چطور یان دو فایل را دانلود کنم آیا به صورت ستی میشه؟ یا با چه قندشکنی میشه این دو فایل را در حال بیلد دانلود کرد؟
    CommandInvokationFailure: Gradle build failed. C:/Program Files/Java/jdk1.8.0_192\bin\java.exe -classpath “F:\files\pc\Video\artoon\program files\UnitySetup64-2017.4.17f1\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib\gradle-launcher-4.6.jar” org.gradle.launcher.GradleMain “-Dorg.gradle.jvmargs=-Xmx4096m” “bundleRelease”

    stderr[

    FAILURE: Build failed with an exception.

    Could not resolve all artifacts for configuration ‘:classpath’. Could not resolve com.android.tools.build:gradle:2.3.0.

    Required by: project : > Could not resolve com.android.tools.build:gradle:2.3.0. > Could not get resource ‘https://jcenter.bintray.com/com/android/tools/build/gradle/2.3.0/gradle-2.3.0.pom’. > Could not HEAD ‘https://jcenter.bintray.com/com/android/tools/build/gradle/2.3.0/gradle-2.3.0.pom’. > jcenter.bintray.com

    Try: Run with –stacktrace option to get the stack trace. Run with –info or –debug option to get more log output. Run with –scan to get full insights.

    Get more help at https://help.gradle.org

    BUILD FAILED in 32s ] stdout[ Starting a Gradle Daemon (subsequent builds will be faster) ] exit code: 1 UnityEditor.Android.Command.WaitForProgramToRun (UnityEditor.Utils.Program p, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) UnityEditor.Android.AndroidJavaTools.RunJava (System.String args, System.String workingdir, System.Action1 progress, System.String error) UnityEditor.Android.GradleWrapper.Run (System.String workingdir, System.String task, System.Action1 progress) Rethrow as GradleInvokationException: Gradle build failed UnityEditor.Android.GradleWrapper.Run (System.String workingdir, System.String task, System.Action`1 progress) UnityEditor.Android.PostProcessor.Tasks.BuildGradleProject.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context) UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

    Build completed with a result of ‘Failed’ UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

    UnityEditor.BuildPlayerWindow+BuildMethodException: 2 errors at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (BuildPlayerOptions options) [0x0020e] in C:\buildslave\unity\build\Editor\Mono\BuildPlayerWindowBuildMethods.cs:181 at UnityEditor.BuildPlayerWindow.CallBuildMethods (Boolean askForBuildLocation, BuildOptions defaultBuildOptions) [0x00065] in C:\buildslave\unity\build\Editor\Mono\BuildPlayerWindowBuildMethods.cs:88 UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

    لطفا کمکم کنید من ۳ ماهه این مشکل را دارم و کسی نتوانسته کمکم کند

  25. افشین نیم‌رخ
    افشین

    لطفا پاسخ دهید خیلی نیاز دارم

  26. سبحان نیم‌رخ
    سبحان

    سلام من مسیر sdk رو تغییر دادم و فایل قبلیش رو دیلیت کردم منتها الان فایلهای گردل جدید رو که دان می‌کنه دوباره همون پوشه قبلی رو میاره و اونجا میریزشون
    چه کار کنم؟

  27. زهرا نیم‌رخ
    زهرا

    سپاس. عالی بود

  28. زهرا نیم‌رخ
    زهرا

    سپاس عالی بود

  29. زهرا نیم‌رخ
    زهرا

    سلام ببخشید یه سوال داشتم اینکه پوشه gradle کجای سیستم قرار داره؟
    ممنون میشم پاسخ بدید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

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