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

چرا برنامه اندروید ابتدای کار با خطا مواجه می شود؟ خطای (Gradle Sync Failed)

این مشکل رایج ترین خطا اول کار است. اول ببینیم Gradle چیه که مشکل ساز شده.

گریدل سیستم بیلد کردن اندروید هست و یه جورایی  package manager اندروید هم محسوب میشه و وظیفه اش اینه که همه وابستگی ها و کتابخونه ها و ابزارهایی که برای اجرا شدن برنامه شما نیاز هست رو فراهم بکنه تا برنامه شما بتونه اجرا بشه. اول ساخت پروژه جدید و یا وقتی که یک کتابخانه یا منبعی رو به برنامه اضافه می کنید باید به گریدل بگید که پروژه رو همگام (sync) بکنه یعنی ابزارهای لازم رو فراهم کنه و پروژه رو برای بیلد و اجرا آماده سازی کنه. حالا اگر این عملیات Sync مربوط به Gradle به هر دلیلی به مشکل بخوره برنامه شما اجرا نخواهد شد و خطا خواهد داد.

حالا چی باعث میشه که این اتفاق بیفته؟

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

چگونه می توانیم خطای ابتدایی برنامه اندروید را برطرف کنیم؟

برای حل این مشکل شما باید از سد این تحریم بگذرید. تا چند وقت پیش یک سری وب سایت نقش تحریم شکن را داشتند که با استفاده از آدرس های dns که فراهم می کردند می توانستیم این تحریم را رد کنیم ولی در حال حاضر گوگل این روش را شناسایی کرده است و آن را بسته است. به خاطر همین این روش ها برای برنامه نویسان اندروید دیگر قابل استفاده نیستند.

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

پس در نتیجه برای این که از کارایی قندشکنی که استفاده می کنیم مطمئن شویم باید ببینیم که سایت توسعه دهندگان گوگل به آدرس https://developer.android.com/ توسط آن باز می شود یا خیر. در صورتی که موفق به باز شدن آن  شود می توانید با خیال راحت از آن برای دانلود کتابخانه ها و وابستگی های گوگل استفاده کنید و با اندروید برنامه نویسی کنید. 

همچنین اگر کتابخانه ای به برنامه اضافه کرده اید بهتر است که املای آن را و نحوه اضافه کردن آن را دقیق بررسی کنید تا خطایی در اضافه کردن آن پیش نیاید. 

بعد از این که این مشکل را برطرف کردید از منوی File گزینه Sync project with Gradle files رو بزنید یا روی آیکون اون  روی نوار ابزار کلیک کنید  تا دوباره گریدل شروع به همگام سازی کنه.

 

خطای کش (Cache) خراب

خیلی وقت ها اندروید برای بالا رفتن سرعت فایل های زیادی رو کش می کنه و حالا به هر دلیلی اگر این فایل های کش شده مشکل دار باشند اجرای برنامه با خطا مواجه میشه و سیستم نمی تونه بیلد بشه. برای حل این مشکل شما باید کش رو یک بار خالی کنید و اصطلاحا کش رو ریست کنید. برای این کار از منوی فایل گزینه RInvalidate Caches رو بزنید

دقت داشته باشید که این کار خیلی وقت ها جواب میده وقت هایی که توی برنامه همه چی درسته ولی اجرا نمیشه یک بار این روش رو امتحان کنید و کش رو ریست کنید.

خطای ناهماهنگی نسخه های sdk

اگر به فایل build.gradle دقت کرده باشید یک سری متغیر مثل compileSdk, minSdk و targetSdk وجود دارند که نسخه هایی از اندروید رو که پروژه شما قراره اونا رو پشتیبانی کنه و با اون ها سازگار باشه رو مشخص می کنه. اگر این نسخه ها با هم همخوانی نداشته باشند برنامه شما بیلد نخواهد شد. برای حل این مشکل باید 

  1. همیشه compileSdkو targetSdkروی آخرین نسخه پایدار اندروید تنظیم شوند.
  2. minSdk از بین نسخه هایی که اندروید هنوز پشتیبانی می کند از چیزی که کتابخانه های اندروید آن را پشتیبانی می کند پایین تر نباشد. اگر این نسخه را خیلی پایین بگیریم برنامه به مشکل می خورد پس آن را به درستی مقدار دهی کنید. می توان با سعی و خطا به مقدار درست هم رسید. این نسخه پایین ترین نسخه ای است که برنامه شما می تواند روی آن نصب شود و آن را پشتیبانی کند.

خطای عدم پیدا کردن فایل R

همانطور که می دانید فایل R برای دسترسی به منابع برنامه و فایل های xml است و اندروید این فایل را به صورت اتوماتیک می سازد. حال زمانی پیش می آید که برنامه این فایل را شناسایی نمی کند و در این صورت هر جا که از این فایل استفاده شده است به رنگ قرمز و با خطا دیده می شود. راه حل این مشکل این است که احتمالا در یکی از فایل های xml موجود در پروژه خطای املایی یا تایپی وجود دارد و خود فایل R مشکلی ندارند. دقت کنید که فایل های xml همیشه باید با حروف کوچک نوشته شوند و بین آنها فاصله نباشد. از متن خطا می توانید فایلی را که مشکل ساز شده است را پیدا کنید. دقت داشته باشید که بعد از این که مشکل را حل کردید پروژه را Clean/Rebuild کنید.

این خطاها رایج ترین خطاهایی بود که برنامه نویسان اندروید با آنها مخصوصا اوایل کار با آن برخورد می کنند است. اگر شما هم به خطایی خوردید که در این لیست بود در بخش نظرات بنویسید.