یونیتی برای خروجی اندروید نیازمند خط فرمانی به نام gradle است، که همین موضوع باعث شده است بسیاری از اوقات مشکلاتی برای build و خروجی اندروید پیش بیاید. حتما با ارورهایی نظیر مشکلات زیر مواجه شدهاید و در کنسول یونیتی برخی logها مبنی بر مشکلات عدم اجرای گردل و یا عدم ارتباط یونیتی با آن چاپ شده است. در ادامه به بررسی راهکارهای حل مشکل ارور gradle در Unity میپردازیم.
گردل در یونیتی حداقل 12 نوع ارور گوناگون دارد. اما ما قصد نداریم در این پست به حل همه آنها بپردازیم. چون ما فرض میگیریم که تمامی اصول را به درستی رعایت کرده و تنها مشکل ما همان ارور ساده گردل است که بخاطر عدم تناسب گردل با یونیتی پیش آمده است. در ابتدا، قصد داریم با gradle کمی آشنا شویم تا بتوانیم مشکل آنرا در یونیتی حل کنیم.
فهرست عناوین مقاله
- 1 گردل gradle چیست؟
- 2 راه حل های مشکل ارور gradle در Unity
- 2.1 راه حل اول: استفاده از فیلترشکن
- 2.2 راه حل دوم: استفاده از DNS های تحریم شکن
- 2.3 راه حل سوم: تکمیل دو راه قبلی، با پاک کردن پوشه gradle
- 2.4 راه حل چهارم: نصب Unity از طریق Unity Hub
- 2.5 راه حل پنجم: دانلود و جایگذاری دستی گردل
- 2.6 راه حل ششم: دانلود SDK و JDK مناسب
- 2.7 راه حل هفتم: دانلود گردل از Android Studio
- 2.8 راه حل هشتم: استفاده از پلاگین و package در یونیتی
- 2.9 راه حل نهم: استفاده از گزینه های مربوط به gradle
- 3 موارد دیگر که میتواند در رفع مشکل ارور gradle در Unity به شما کمک کند
گردل gradle چیست؟
گردل که با نام گرِیدِل هم معروف است، یک ابزار معروف build automation است، که برای کنترل فرآیند تولید نرم افزار استفاده میشود. این فرآیند از شروع کدنویسی نرم افزاری تا ایجاد یک خروجی ساده از نرم افزار را شامل میشود. در متُدولوژی (روشهای) توسعه نرم افزاری گذشته، برنامهنویس پس از ایجاد تغییرات در برنامه اندرویدی، مجبور به compile دوباره تمامی برنامه میشد و زمان بسیار زیادی صرف بسته بندی و اعمال تغییرات میشد که حتی ممکن بود تغییرات نهایی مطابق خواسته برنامه نویس هم نباشد!
این پیچیدگیها و استهلاکهای زمانی، باعث شد تا برنامهنویسها به ساخت “سیستمهای تولید” برای این عملیات فکر کنند. قاعدتا یک برنامه نویس همیشه لازم دارد تا برنامهای که نوشته run کند و تغییرات را به چشم ببیند تا قادر به تصمیم گیری باشد و درصورت نیاز آنرا debug کند. اینگونه شد که یک build system توسط Hans Dockter بنیانگذار شرکت gradle توسعه داده شد و در فرآیندهای نرم افزاری استفاده شد.
کاری که Gradle برای ما انجام میدهد
در ادامه به مواردی که Gradle انجام میدهی را توضیح میدهیم:
- افزایش سرعت build با روش code generation کدهای ما توسط gradle پردازش شده و کدهای دیگری درکنار آن اجرا میشود. همچنین درصورت تغییر، همان بخشی که اضافه شده است پردازش مجدد میگردد.
- مدیریت وابستگی ها یا dependency manager یعنی مدیریت فایلهای third-party که همان کتابخانه های با پسوند jar هستند که در پروژه ما اضافه میشود.
- مدیریت منابع (resources) و مرتب سازی آنها
- جلوگیری از تداخل وابستگی یا dependency conflict که باعث جلوگیری از وجود دو کتابخانه (library) با یکدیگر میشود.
جالبه بدونید که گردل یک ابزار خط فرمان (Command Line System) یا CLI ست که علاوه بر دسترسی شما از طریق نرم افزارهایی مثل اندرویداستودیو قادر به دسترسی از CMD سیستم هم هستید.
یک نکته جالب در مورد Gradle
گردل فقط برای اندرویداستودیو و زبانهای اندرویدی نیست، ولی استفاده اصلی در زبانهای اندرویدی میشود. در یونیتی هم کاربردی را دارد که درابتدا بیان شد. با گردل نیازی نیست پروژه شما دوباره کامپایل شود و با سرعت بیشتری دوباره خروجی میگیریم. اگر دقت کرده باشید، در دفعات بعدی سریعتر پروژه خروجی گرفته میشه. چون، گردل با مدیریت کدها و منابع، از هدررفت وقت شما جلوگیری میکنه! پس اگر به مشکل گردل خوردی، سعی کن با صبر و حوصله حلش کنی. چون اتفاقا دلسوزته!
راه حل های مشکل ارور gradle در Unity
در این مقاله چندین راه حل مناسب برای شما معرفی میکنم. دقت کنید که مطالب رو با جزئیات و دقت بخونید تا به مشکل نخورید! لطفا در انتشار مطالب با ذکر منبع، در انتشار علم سهیم باشید.
راه حل اول: استفاده از فیلترشکن
اگر اشتراک دارید، میتونید از فیلترشکن (vpn) یا اصطلاحا قندشکن استفاده کنید. البته استفاده از کانفیگ های mitsuri و v2ray هم مشکلی ندارد. حالا چگونه این کار رو انجام دهیم؟ وقتی که قصد دارید خروجی android رو در build settings انجام بدهید، اینترنت خودتون را روشن کنید و به فیلترشکن متصل شوید. بعد از اطمینان اتصال و سرعت، میتونید خروجی را بگیرید و روی دکمه build کلیک کنید.
با اینکار، خود یونیتی به وبسایت gradle متصل شده و متناسب ترین نسخه گردل رو برای شما میگیرد. چون معمولا ارورهای گردل بخاطر عدم تناسب نسخه های یونیتی و نسخههای گردل به وجود می آید. بقیه ارورها یکسری مشکلات ساده ست که شاید در مقاله ای دیگه بهش پرداختیم.
راه حل دوم: استفاده از DNS های تحریم شکن
این راه رو بیشتر بهتون پیشنهاد میکنم. البته بخاطر اینکه راه قانونی، کم هزینه تر و کم دردسر تری هست! این راه دقیقا مشابه راه قبلی ست. اما با این تفاوت که به جای استفاده از نرم افزارهای تغییر ip و tunel کننده و proxy سیستم، از dns استفاده میکنیم. همانطور که میدانید، dns اختصار Domain Name System هست و آدرسی ست که توسط کامپیوتر به دامنه تبدیل میشود و شما میتونید به یک سرور از راه دور متصل بشید.
در این روش قبل از اینکه خروجی اندروید رو با فشار دادن روی دکمه build انجام دهید، از اتصال اینترنت مطمئن میشوید و یکی از dns های تحریم شکن یا هر dns دیگری (که مطمئن هستید کار میکند) را تنظیم میکنید، و بعد خروجی اندروید رو میگیرید. دقت کنید که گاهی اوقات ممکنه برای اعمال شدن، از unity خارج شوید یا اینترنت رو خاموش و روشن کنید.
حالا چطور dns رو ست کنیم؟
کاملا راحت! وارد control panel شوید و در بخش network and sharing center و بعد در منوی سمت چپ بالا، گزینه change adaptor settings رو انتخاب کنید. و سپس، روی شبکه ای که الان بهش متصلید، کلیک راست کنید و properties را بزنید. توی منویی که برای شما میاد، روی Internet Protocol Version 4 دبل کلیک کنید.
بخشی که قرمز هست رو مشاهده میکنید. تیک آنرا از روی obtain بردارید و بگذارید روی Use the following DNS Server adresses و بعد دو dns که در دسترس دارید رو جایگذاری کنید. اگر قصد دارید آنرا غیرفعالش کنید، دوباره روی Obtain DNS Server بگذارید. بعد از همه اینکارها ok رو بزنید. سپس خروجی بگیرید. اینکار هم مثل روشن کردن تحریم شکن، باعث میشه تا دانلود از سایت گردل بصورت خودکار انجام بشه.
چه dns ای استفاده کنم؟
اگر واقعا dns خاصی سراغ ندارید، اتفاقا میتوانید سراغ سرویسهایی مثل شکن (shecan)، 403، بگذر (begzar) و یا الکترو (electro) بروید. البته سرویسهای dns زیادی معرفی شده اند، ولی این چهار نمونه گل سرسبد باغ تحریم شکنها هستند. من 403 رو بیشتر بهتون پیشنهاد میکنم که حتی یک نرم افزار دارد که اگر دانلود کنید، اینکار را بصورت خودکار برای شما انجام میدهد. حتی برای دانلود و لاگین کردن و … هم سرعت زیادی دارد و ساخته شده توسط وزارت ارتباطات است.
راه حل سوم: تکمیل دو راه قبلی، با پاک کردن پوشه gradle
گاهی اوقات، ممکن است گردل دانلود شود، اما به درستی خیر! مثلا مسیر گردل اجازه جایگذاری گردل جدید را ندهد! برای اینکار، یکی از راه هایی که میتوانید انجام دهید اینست که پوشه gradle را در مسیر Users درایو C پیدا کنید، پاک کنید، به vpn یا dns متصل شوید و دوباره خروجی را بگیرید. باز هم تاکید میکنم که اتصال اینترنت مهم است! اگر سرعت پایینی دارید، اُپراتور یا لوکیشن را حتما عوض کنید. نمونه مسیر پوشه gradle.:
C:\Users\USERNAME\.gradle
مثلا نام ویندوز من Ice Rose هست:
C:\Users\Ice Rose\.gradle
راه حل چهارم: نصب Unity از طریق Unity Hub
این بعنوان یک راه حل تلقی نمیشود. چون درکل استاندارد این است که ما از لانچر خود یونیتی، به نصب یونیتی بپردازیم. اما بسیاری از افرادیکه unity را از طریق unityhub نصب میکنند، به ارورهای گردل کمتر دچار میشوند، یا ارور گردلی که مشاهده میکنند، بخاطر عدم تطابق نسخه ها نیست. میتوانید از لانچر hub در تب installs و با فشردن گزینه install editor به نصب یونیتی جدیدی بپردازید. فقط حواستان باشد که تیک android build support را به همراه زیرمجموعه های Open JDK و Android SDK و NDK بزنید.
راه حل پنجم: دانلود و جایگذاری دستی گردل
جدول زیر یک نگاه مناسب برای استفاده از نسخه های gradle برای یونیتی میدهد. اگر تا به اینجا مشکل شما حل نشده، پس مجبورید اینکار را بصورت دستی انجام بدهید. باز هم تاکید میکنم که این مقاله برای حل دو مورد: عدم تطابق نسخه و برخی مشکلات رایج هست. اینکه اگر شما لایبرری معیوب در پروژه استفاده کنید و … ممکن است با این روشها حل نشود! ولی اگر باز هم نمیدونید چه مشکلی دارید، پس تا آخر مقاله همراه باشید و آزمون و خطا کنید.
قبل از مطالعه این بخش از این مطلب هم استفاده کنید، اگر مشکل شما حل نشد ادامه مطلب رو بخونید.
چگونه گردل را به صورت دستی جاگذاری کنیم؟
برای دانلود گردل بصورت دستی، میتوانید به وبسایت خود گردل مراجعه کنید. در این بخش از وبسایت انواع نسخه های مختلف gradle وجود دارد که میتوانید آنها را دانلود کرده و در مسیر گردل ویندوزت (پوشه gradle.) بریزید. قبلا هم این مسیر را گفته بودم: C:UsersUSERNAME.gradle
اگر دقت کنید، از هر نسخه سه نوع وجود دارد. یکی all که همه فایلها، یکی bin که گزیده، و یکی هم src که سورس کدهای آنها رو دارد. باتوجه به جدول بالا، نسخه ای که که با یونیتی شما متناسب یا از نسخه گفته شده کمی بالا تر است (باید تست کنید، وقت خواهد برد، ولی خب گاهاً انسان مجبور است) را به شکل zip دانلود کنید. میتوانید برای دانلود سریعتر از نرم افزار internet download manager استفاده کنید. از هر نسخه ای که برگزیدید، نسخه all رو دانلود کنید و محتوای آنرا داخل همان پوشه بریزید (مراحل را صحیح انجام بدید) و درصورتیکه نسخه all کار نکرد نسخه bin را تست بفرمایید.
راه حل ششم: دانلود SDK و JDK مناسب
گاهی اوقات error ها و مشکلات گردل بخاطر ناقص بودن sdk و jdk ، یا عدم ارتباط این دو با یکدیگر هست که با نصب صحیح این دو میتوان از این ارور جلوگیری کرد. البته باید درنظر داشت که گاهی اوقات چندین مشکل با یکدیگر وجود دارد که ذره ذره باید اشکالزدایی کرد.
نکته: گاهی اوقات مسیر این دو در environment variables ثبت نشده و یونیتی آنرا نمیشناسد. در ابتدا باید ویندوز آنرا بشناسد، سپس آنرا در external tools به یونیتی بشناسانید. اگر sdk و jdk و ndk از یونیتی هاب دانلود شود، چنین مشکلی بسیار نادر و کم اتفاق خواهد افتاد.
راه حل هفتم: دانلود گردل از Android Studio
نرم افزار Android Studio یک محیط یکپارچه برای توسعه نرم افزار به زبانهای java و kotlin است. گردل در این نرم افزار کاربرد بیشتری با دست بازتری دارد. شما میتوانید در ابتدا نرم افزار Android Studio را دانلود کرده و نصب کنید، پیش از اجرای آن به یکی از روشهای dns یا vpn (که گفته شد) متصل شده، سپس در اندرویداستودیو یک پروژه ایجاد کنید.
سپس منتظر بمانید تا فایلهای مربوط به پروژه شامل sdk سالم، jdk سالم و ndk سالم و همچنین gradle مناسب را دانلود کند. دقت کنید که اگر sdk را هم دانلود کند قطعا نیازمند حجم نسبتا زیاد اینترنت خواهید بود. اگر اندرویداستودیو قادر به دانلود گردل نبود، میتوانید مثل چندروش گذشته، پوشه gradle. را پاک کرده و دوباره تست نمایید. اگر قصد دارید بدون گردل و بصورت مستقیم از اندروید استودیو خروجی بگیرید، این آموزش به درد شما خواهد خورد.
راه حل هشتم: استفاده از پلاگین و package در یونیتی
تمامی پلاگین های موجود برای unity را میتوانید از اینجا دانلود کنید. این پلاگین ها به پروژه اضافه میشوند و میتوان بدون نیاز به دستکاری گردل، آنها را در پروژه استفاده کرد.
پلاگین Android jar Resolver
این پلاگین تمامی کتابخانه های داخل یونیتی را بررسی میکند. با گزینه fore resolve در Android Resolver در زیرمجموعه External dependency در سربرگ Edit، قادر هستید تا درصورت تنظیم بودن jdk، مشکل گردل را رفع کنید (به اینترنت و تحریم شکن متصل باشید)
پلاگین Unity Atlas
این پلاگین هم برای گردل ایجاد شده است.
راه حل نهم: استفاده از گزینه های مربوط به gradle
در Project Settings بخش Player و تنظیمات Publishing Settings اندروید، گزینه هایی زیرمجموعه Build مشاهده میشود که شش تای آخر مربوط به gradle است. مثلا Custom Main Gradle Template یا Custom Launcher Gradle Template و … که با فعالسازی آن، میتوانید خطوط فرمان را برای این پروژه تغییر دهید. حالا بماند که مبحث گسترده ای هست که چطور میتوان آنرا تغییر داد تا مشکل حل شود، ولی گاهی با فعالسازی این گزینه ها، میتوان مشکل را حل نمود.
حواستان باشد گاهی اوقات مشکل گردل بخاطر رمز اشتباهی ست که برای keystore وارد میکنید. بسیار حواستان باشد! گاهی اوقات حس میکنید کاری را درست انجام داده اید و این مقاله برای شما بی فایده ست، درحالیکه روش را به درستی انجام نداده اید.
موارد دیگر که میتواند در رفع مشکل ارور gradle در Unity به شما کمک کند
در ادامه چند عامل دیگر که ممکن است باعث یجاد ارور Gradle در Unity شود را بررسی میکنیم.
وجود دوکتابخانه در پروژه
دقت کنید که ممکن است دو فایل jar یا فایل dll کاملا مشابه در پروژه شما وجود داشته باشد. اگر چنین چیزی وجود داشت، آنرا حتما پاک نمایید.
وجود کتابخانه معیوب
گاهی اوقات وجود یک فایل dll یا jar ناقص در پروژه (که ناقص دانلود شده یا ویروسی شده است) میتواند به خروجی شما با ارور گردل ضربه بزند.
وجود کتابخانه های بی کاربرد و زیاد
هر فایل jar و dll که دیدید داخل پروژه نریزید! اگر با این فایلها کار دارید، حتما ازشون استفاده کنید و بدون استفاده در پروژه نباشند. چون گردل چک میکند که کدام کتابخانه در پروژه اضافی ست.
مشکل در API ها
با دستکاری Minimum API Level و Target API ممکن است گاهی مشکل حل شود که اگر میخواهید این مشکل ریشه ای حل شود، باید API Level ها به درستی نصب شوند.
امیدوارم که این مطلب برای شما مفید و موثر باشد. در نشر با ذکر منبع این مطلب، در نشر علم سهیم باشید. اگر راه جدیدی هم پیشنهاد دارید، لطفا در کامنت ها حتما عنوان کنید. با تشکر از شما