حل مشکل گردل Gradle در یونیتی

حل مشکل گردل Gradle در یونیتی

راستش خیلی وقت بود که میدیدم بازیساز ها چنین مشکلی دارند . اینکه حین خروجی اندروید به چنین ارور مشابهی و چندین ارور دیگر برخورد کنند !
از خیلی وقت پیش ، درحال نوشتن یک لیست بلند و بالا برای حل صددرصدی و قطعی این ارور بودم که دیدم بی فایدست! باید کمی کنکاش کنم و از دیگران بپرسم و همچنین یک لیست کوتاه اما جامع بنویسم .
حال ، چطور میشه چنین مشکلی را حل کرد؟ از ساده ترین راه حل، میرسیم به بیشترین و بهترین اون! اگر مشکل داشتید ، بگید حتما که بجاش ویدئو ضبط کنم . با مقاله حل مشکل گردل Gradle در یونیتی همراه باشید. 

گردل در یونیتی

راه حل هایی که بنده پیدا کردم نزدیک به 14 تا بود که تقریبا 11 تای آنرا برای شما خلاصه مینویسم :

1️⃣ قبل از اینکه دوباره خروجی بگیرید ، فیلترشکن خودتون رو روشن کنید . چند فیلترشکن در همین کانال گذاشتم و خواهم گذاشت . کافیست ، روی هشتگ #فیلترشکن یا #VPN کلیک کنید . یادتون باشه حتما Location رو اگر روی کانادا یا آمریکا گذاشتید و کار نکرد ، روی لهستان یا هلند یا انگلیس هم تست کنید . وقتی روشن کردید ، خروجی دوباره گرفته و صبر کنید . خود یونیتی از سایت گردل برای شما دانلود خواهد کرد .

2️⃣ یکی از بهترین راه های دیگر ، استفاده از سایت Shecan.ir هست . قبلا درمورد این سایت خیلی توضیح داده بودم و یک مطلب هم درموردش نوشتم ( که متاسفانه بنام آقای محمدجواد ناصری ثبت شده :))) آموزش کار با شکن هم در همون سایت نوشته شده . بسیاری DNS رو وقتی تنظیم کردند ، مشکلشون کامل خداروشکر حل شده!!

⚠️ اگر راه حل اول و دومی به مشکل خورد ، طبق مسیر گردل دستی راه حل شماره 6 ، پوشه gradle. را پیدا کرده و در پوشه cache آن ، محتویات را پاک کنید تا گردل اصلی دانلود و جایگزین شود . البته اگر این هم نشد کلا پوشه گردل را پاک کنید!

3️⃣ میتونید گردل رو بصورت دستی مسیردهی کنید . یعنی گردل رو از سایت اصلی دانلود کنید ( نسخه all یعنی مثلا نوشته باشه gradle6.7-all حول یه 150 مگابایتی هست ) و بعد ، در درایوی دیگر یا هرجایی که مایلید ، یک پوشه بسازید ، فایل zip گردل را آنجا بریزید و بعد Extract کنید . دقت کنید پوشه ای واسط نباشد . یعنی وقتی وارد پوشه ای که ایجاد کردید میشوید ، تمامی فایلهای درون zip ، رویت شود ( استخراج با Extract Here بهتر است ) .
وارد یونیتی شوید . در بخش Prefrences و External Tools ، تیک Gradle Installed With Unity را برمیدارید . بودن این تیک برای زمانی است که شما با فیلترشکن میتوانید مشکل خودرا حل کنید و یا گردل خود یونیتی سالم است . اما بعد از برداشتن تیک ، زیر این تیک از شما میخواهد که مسیر گردل را مشخص کنید . Browse میکنید و مسیر پوشه گردل را انتخاب میکنید ( همان پوشه ای که ایجاد کردید ) . بهتر است نام پوشه ، همان نام گردل باشد مثلا Gradle6.7 .

⚠️ اگر با نسخه all تست کردید و نشد ، اینبار با bin تست کنید و ان شاالله حتما اوکی میشه!


⚠️ نکته : بهتر است یکبار با همین راه تست کنید . اگر دوباره نشد ، این مسیر را در ادامه اجرا کنید 👇🏻
در بخش Build Settings ، تیک Build App Bundle را برای Android فعال کنید . بعد دوباره خروجی بگیرید . پسوند فایل aab خواهد بود . بعد از اینکه آنرا با aab خروجی گرفتید ، تیک Build App Bundle را بردارید و با همون نام که فایل aab را خروجی گرفتید و با همون مسیر وردستش خروجی را با apk انجام دهید .
⚜️ یک توصیه از من هم بشنوید : بهتر هست خروجی ها رو در Desktop بگیرید و اگر نشد بعد در یکی از درایو ها! اتفاق خاصی نمیفته ولی تجربه شخصی بنده میگه .

4️⃣ یک راه که بهتر است همراه با سایر راه ها هم انجام شود یا قبل از اینکه گردل را دستی نصب کنید انجام دهید . نسخه گردل ، همزمان با نسخه جاوا پشتیبانی میشود . حتما Java SE ( jdk ) را از سایت Oracle بگیرید و نصب کنید . بعد در مسیر Program Files بروید ، و در پوشه Java ، نسخه آخرین jdk رو که نصب کردید رو پیدا کنید ( فرمت نامی اش مثلا اینطوریه jdk1.8.0_77 ) . بعد مسیر همان را در System Properties و در Environments Variables بخش بالا ( use variables for ) یک New اضافه کنید ( در اینجا کاملتر شرح دادم ) و سپس Variable Name رو بنویسید JAVA_Home و سپس در بخش Variable Value ، مسیر پوشه Gradle رو جایگذاری کنید ( مسیر قرارگیری پوشه نه ها! مسیر + نام پوشه! ) و بعد روی OK کلیک کنید . سپس برای بخش پایین ( System Variables ) ، هم همین کار را تکرار کنید . سپس روی OK کلیک کنید و از تنظیمات خارج شوید . حال در تنظیمات یونیتی و External Tools ، تیک JDK Installed With Unity را بردارید و مسیر خود JDK که در کلیپبورد دارید را پیست کنید . دوباره تکرار میکنم مسیر پوشه + نام پوشه باید باشه ! برای SDK و NDK هم همینکارو انجام بدید . میتونید تنظیم SDK رو از طریق Android Studio هم انجام بدید .

5️⃣ در نسخه های یونیتی قبل از 2019 ، میتوانید در پنجره Project Settings و تب Player ، در بخش Publishing Setting و ردیف Minify ، گزینه Release را از روی Gradle ( Experimental ) روی Internal بگذارید . در بخش Build Settings هم میتوانستید همین گزینه را روی Internal بگذارید .
⚠️ نکته : بهتر است یکبار با همین راه تست کنید . اگر دوباره نشد ، این مسیر را در ادامه اجرا کنید 👇🏻
در بخش Build Settings ، تیک Build App Bundle را برای Android فعال کنید . بعد دوباره خروجی بگیرید . پسوند فایل aab خواهد بود . بعد از اینکه آنرا با aab خروجی گرفتید ، تیک Build App Bundle را بردارید و با همون نام که فایل aab را خروجی گرفتید و با همون مسیر وردستش خروجی را با apk انجام دهید .

6️⃣ با توجه به راه شماره 5 ، میتوانید Gradle را انتخاب کنید ولی در زیر آن ، تیک Custom Gradle Template را هم فعال کنید .
⚠️ گاهی دیده شده با دستکاری Minimum API و Target API به نسخه های پایینتر یا بالاتر ، مشکل حل شده است!!

7️⃣ میتوانید گردل را دانلود کنید ( مانند راه حل 3 ) ، و در مسیر زیر :
درایو C ==> پوشه Users ( برای ویندوز 10 و 8 وگرنه برای سایر ویندوزها نام دیگری است ) ==> پوشه نام user رایانه شما ==> پوشه gradle.
جایگذاری کنید . اگر هم نبود یک پوشه به همین نام بسازید .
این مسیر پیشفرض گردل یونیتی است و برخی به این دلیل این ارور را دریافت میکنند چون سیستم آنرا درست نشناخته یا اصلا پوشه ای به این نام وجود ندارد ! ( فقط لطفا درست و مشابه به مثل جایگذاری کنید )
⚠️ اصلا اتفاقا بهتره که Delete اش کنید و روش فیلترشکن و شکن رو برید!

8️⃣ میتونید اصلا به گردل دست نزنید! روی حالت internal بذارید یا بدون تغییرات ، از روش پکیج اقدام کنید! بنده بشخصه تست نکردم ولی یکی از راه هایی که جدیدا و برای اولینبار معرفی شده است ، پکیج Unity Gradle Plugin هست .

اما برای اینکه این پکیج اجرا شه ، نیاز دارید تا پوشه gradle. حتما پاک نشده باشه ( اگه دستش نزدید که مشکلی نیست و ذهنتون رو مشوش نکنید ) و همچنین تیک تنظیمات Gradle Installed With Unity ، در بخش External Tools فعال باشد . 

روش نصب در همان صفحه گیتهاب که لینک دادم هست . البته کمی کار با این پکیج و نصب اون ، قلق خودرا دارد .

 9️⃣ در برخی استثنائات ، بدلیل وجود دو یا چند Library ( فایل dll ) یا اسکریپت یا Manifest ، ممکن هست چنین اروری بوجود بیاید . چک کنید که فایلهای تکراری نباشد . درضمن برخی پلاگین ها هستند که موجب چنین اروری میشوند . مثلا بسیار دیده شده است که پلاگین ادموب یا Google ADS یا Google Play Service این ارور را بوجود می آورد . چک کنید اگر میتوانید فایلهای اضافی یا غیرضروری را حذف کنید و اگر میتوانید از کل پلاگین صرفنظر کنید ، که چقدر و بهتر و عالی! همه پلاگین را حذف کنید .

0️⃣1️⃣ این راه حل ، برای برخی مشکل گشا بوده است .

اول تمامی کارهای مربوط به Keystore و … را انجام دهید و یکبار خروجی بگیرید . بعد از اینکه با این ارور مواجه شدید وارد مسیر :

ProjectName\Temp\gradleOut\unityLibrary\libs

بشوید و سپس فایلهای support-annotations-24.0.0.jar و support-annotations-24.0.0.aar و appcompat-v7-23.1.1.aar و googlemobileads file -unity.aar را حذف کنید ( لزوما به همین نام نیست ولی مشابه! ممکنه اعداد متفاوت باشند ) . سپس در مسیر :

ProjectName\Temp\gradleOut\unityLibrary

بروید و فایل build.gradle را با یک ویرایشگر باز کنید . مهم نیست حتی نوتپد هم کافیست . سپس خطوط زیر را از فایل حذف کنید :

implementation(name: ‘appcompat-v7-23.1.1′, ext:’aar’)
implementation(name: ‘googlemobiles-unity’, ext:’aar’)
implementation(name: ‘support-v4-24.0.0′, ext:’aar’)

نکته : همانطور که گفتم لزوما به همین نام نیست ولی مشابه! نامهای در :name مشابه اون فایلهایی است که پاک کردید .

بعد CMD رو باز کنید و دستور زیر رو در پوشه GradleOut اجرا کنید :

PathTo\OpenJDK\bin\java.exe -classpath “PathTo\gradle-launcher-6.8.3.jar” org.gradle.launcher.GradleMain “-Dorg.gradle.jvmargs=-Xmx4096m” “assembleRelease”

حالا دوباره فرآیند را از سر بگیرید .

1️⃣1️⃣ در این روش ، زمانیست که کلا خاک تمام عالم به سرمان گشته است و تمامی راه ها نتیجه ای نداشته است!!
در Build Settings در خروجی اندروید ، تیک Export Projects را بزنید . وقتی خروجی انجام شد ، مسیر ( خود پوشه یعنی مسیر + نام پوشه ) را کپی کنید و ببرید در Android Studio ( اگر ندارید از اینجا یا از اینجا دانلود کنید ) . وقتی اندروید استودیو باز شد ، گزینه Open As exiting را بزنید و مسیر پوشه را در نوار بالای گشتن پروژه جایگذاری کنید و پوشه را انتخاب کنید و OK را بزنید و منتظر بمانید تا اندروید استودیو باز شود . بعد از باز شدن نرم افزار ، منتظر بمانید تا گردل را از سایت اوراکل دانلود کند ( یادتون باشه فیلترشکن یا شکن روشن باشه ) ، بعد از اتمام ، در تب Build بر روی Generate Signed Bundle Apk کلیک کنید و بعد از باز شدن پنجره ای ، تیک Android App Bundle را بردارید و روی Android بگذارید و Next را بزنید . بعد ، یک Keystore بسازید و پس از اتمام مراحل بعد خروجی اندروید شما انجام خواهد شد .
♨️ میتوانید به جای زدن روی گزینه Generate Signed Bundle Apk در همان تب در نوار Build Bundle روی گزینه Build APK کلیک کنید . فقط یادتان باشد برای همه اینکارها باید اندروید استودیو SDK و JDK شما را شناخته باشد !

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

نویسنده : سجاد احمدی نیت