اخطار ران کردن سورس در اندروید استودیو

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

مشکلات شایع اندروید استودیو

۱) خطاهای حافظه هنگام اسکن کردن پروژه های مبتنی بر C ++  :

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

اگر این رفتار را در پروژه خود تجربه کنید، توصیه می کنیم از Android Studio 3.2 استفاده کنید. برای اطلاعات بیشتر در مورد این موضوع، اشکال مربوط به این موضوع را بخوانید.

۲) شکست مجموعه تست Recorder:

هنگامی که برای ساخت پروژه‌ای که از تست کننده Espresso Test استفاده می‌کند, با پیغام Execution failed for task ‘:app:compileDebugAndroidTestJavaWithJavac’ مواجه می شود. این موضوع بر نسخه‌های اندروید استودیو زیر  3.2 که از نسخه ۱ یا بعد از وابستگی اسپرسو – هسته‌ای استفاده می‌کنند, تاثیر می‌گذارد. این مسئله بر  اندروید استودیو 3.2 و بالاتر تاثیر نمی گذارد.

اگر از اندروید استودیو 3.1 یا بالاتر استفاده می کنید، می توانید در حل این مسئله با ایجاد وابستگی به یک نسخه از espresso-core در زیر 3.0.2 یا با اضافه کردن یک وابستگی به قوانین، همانطور که در دستورالعمل نصب espresso نشان داده شده است، در اطراف این مساله کار کنید.

چک لیست @RestrictTo طراحی‌شده برای دستگاه‌های ویندوز کار نمی‌کند : در Android Studio 2.3, بررسی @RestrictTo به درستی پیام های خطا را در ماشین های ویندوز راه اندازی نمی کند.

۳) دستگاه‌های مجازی با پرانتز در نام خود اجرا نخواهند شد :

در اندروید استودیو نسخه 2.2، می توان در داخل پرانتز نام دستگاه مجازی قرار بگیرید ( و در واقع برخی از دستگاه‌ها مانند Android TV، شامل پرانتز در نام خود می‌شوند ) ، شما نمی‌توانید یک دستگاه مجازی را اجرا کنید که از پرانتز در نام خود استفاده می‌کند . برای جلوگیری از این مشکل، دستگاه مجازی را ویرایش کنید تا تمام نامهای “(” و “)” را از نام حذف کنید.

این مسئله در Android Studio 2.3 حل شده است.

۴) اجرای فوری با Jack  سازگار نیست :

اجرای فوری در حال حاضر با کامپایلر Jack  سازگار نیست ، بنابراین برای پروژه‌های با استفاده از کامپایلر Jack  غیرفعال شده‌است . ( استفاده از مترجم جک تنها زمانی لازم است که از ویژگی‌های زبان جاوا استفاده کنید ).

۵) ابزارها و کتابخانه‌ها که به فایل‌های کلاس برنامه نیاز دارند با جک سازگار نیستند :

ابزارهای مختلفی که فایل های .class را می خوانند (مانند JaCoCo، Mockito، و برخی از چک های Lint) در حال حاضر با کامپایلر Jack سازگار نیست.

Gradle build قادر به ساختن پوشه های خروجی هنگامی که پروژه در NTFS لینوکس است، نیست:

به دلیل رفتار فایل قفل کردن NTFS، در دستگاه های ویندوز، اندروید استودیو به طور خودکار فایل های JAR کلاس را به مکان دیگری، قبل از شاخص گذاری کپی می کند، به طوری که Gradle بعدی ساخته شود و تغییراتی در ساختمان / درخت ایجاد کنند. برای اطلاعات بیشتر به شماره 202297 مراجعه کنید. این رفتار هنگام استفاده از NTFS در ماشینهای لینوکس یا OSX فعال نیست، اما در فایل idea.properties شما با دستورالعمل زیر خط زیر را می توانید به صورت دستی مشخص کنید:

۶) عملکرد مک:

OpenJDK 1.8.0_76 همراه با استودیو 2.2 دارای چند مشکل در Mac است.  با استفاده از یک مانیتور خارجی 4K خارجی با رزولوشن بالا می‌تواند می تواند بر عملکرد رندرینگ تاثیر منفی بگذارد، همان طور که در شماره ۲۰۳۴۱۲ و در IDEA-144261 مورد بحث قرار گرفته است، تا حدی که محیط برنامه‌نویسی unresponsive  شد. علاوه بر این، همانطور که در شماره ۲۲۳۷۴۹ و  IDEA-158500 گزارش شده، پیمایش در Mac 10.12 (Sierra) دارای حساسیت بالایی است.

۷) همگام‌سازی Gradle شکست خورد :

مساله این است که Gradle daemon سعی دارد به جای IPV4 از IPV6 استفاده کند .

  • راه حل۱ : در لینوکس ، موارد زیر را در فهرست خود قرار دهید ~/.profile یا ~/.bash_profile

  • راه حل۲ : در فایل vmoptions اندروید استودیو، خط زیر را تغییر دهید.

را به

تغییر دهید.

برای اطلاعات بیشتر، به راهنمای کاربر شبکه IPv6 مراجعه کنید.

۸) همگام سازی همکار تأیید نشده” خطاهایی از همگام سازی Gradle یا SDK Manager :

علت ریشه‌ای این خطاها یک گواهی‌نامه گم‌شده در $JAVA_HOME/jre/lib/certificates/cacerts است. برای حل این خطاها به شرح زیر ادامه دهید :

اگر پشت یک پروکسی هستید، سعی کنید به طور مستقیم به یکدیگر متصل شوید. اگر اتصال مستقیم کار می کند، سپس برای اتصال از طریق پروکسی ممکن است لازم باشد از ابزار keytool استفاده کنید تا گواهی پروکسی سرور را به فایل cacerts اضافه کنید.

بازبینی مجدد طرح پشتیبانی شده، تغییر شکل . انتشار یک مساله شناخته‌شده بر روی کاربران اوبونتو ، که در یک گزینه خالی / etc / ssl / java / cacerts منتج می‌شود . برای کار در این مورد ، موارد زیر را در سطر فرمان اجرا کنید :

یک JDK پشتیبانی نشده و بدون تغییر را دوباره نصب کنید یک مسئله شناخته شده است که کاربران اوبونتو را تحت تاثیر قرار می دهد که نتیجه آن خالی بودن /etc/ssl/certs/java/cacerts است. برای کار در این مورد ، موارد زیر را در سطر فرمان اجرا کنید :

۹) JUnit ، منابع موجود در classpath را هنگامی که از اندروید استودیو اجرا می شود، تست می‌کند :

اگر شما پوشه‌های تخصیص منابع ویژه‌ای در modules های جاوا داشته باشید ، آنگاه آن منابع هنگامی پیدا می‌شوند که تست‌های running را از محیط برنامه‌نویسی باز می‌کنید. آزمایش های اجرا شده با استفاده از Gradle از خط فرمان انجام خواهد شد . اجرای یک کار چک Gradle از محیط IDE نیز کارساز خواهد بود. برای جزئیات بیشتر به شماره ۶۴۸۸۷ مراجعه کنید .

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

راه حل ۱ : اجرای برنامه کنترل Gradle از محیط برنامه‌نویسی به جای اجرای آزمون واحد .

راه حل ۲ : بهنگام‌سازی اسکریپت های خود برای نسخه‌برداری دستی از منابع، در پوشه بسازید. برای کسب اطلاعات بیشتر به کامنت 13 مراجعه کنید.

۱۰) اجرای آزمون‌های JUnit ممکن است دو بار کد را کامپایل کند :

هنگام ایجاد یک پروژه جدید ، الگو پیکربندی JUnit می‌تواند با دو مرحله ” قبل از راه‌اندازی ” ایجاد شود : ایجاد و آگاه کردن . سپس این پیکربندی به همه پیکربندی‌های داخلی ایجاد شده انتشار می‌یابد .

برای رفع این مساله برای پروژه فعلی ، روی Run > Edit Configurations کلیک کرده و پیکربندی پیش‌فرض JUnit را تغییر دهید تا تنها شامل مرحله آگاه Gradle باشد .

برای حل مساله برای تمام پروژه‌های آتی ، روی File > Close کلیک کنید . شما باید صفحه خوشامد گویی را ببینید . سپس روی Configure > Project Defaults > Run Configurations کلیک کرده و پیکربندی JUnit را تغییر دهید تا تنها شامل مرحله آگاهی Gradle باشد .

۱۱) برخی از پیکربندی اجرای آزمایش کار نمی‌کنند :

همه پیکر بندی هایی که در زمان مناسب در دسترس هستند ، معتبر نیستند . به طور خاص ، پیکربندی زیر معتبر نیستند :

پیکربندی اجرای Gradle (که دارای آرم Gradle به عنوان آیکن هستند) کار نمی کنند.

JUnit تنظیمات را اجرا می کند (که یک آیکن بدون اندروید سبز دارند) به آزمایش ابزار، که نمی تواند در JVM محلی اجرا شود، اعمال نمی شود.

اندروید استودیو همچنین پیکربندی اجرا را به خاطر می‌آورد که در یک زمینه خاص ایجاد شده‌است ( برای مثال ، کلیک کردن یک کلاس یا روش خاص ) ، و پیشنهاد نمی‌کند در یک پیکربندی متفاوت در آینده اجرا شود . برای تصحیح این مورد، روی Run > Edit کلیک کرده و پیکربندی نادرست ایجاد شده را حذف کنید .

۱۲) لینوکس و Awesome WM 3.4

نسخه های اندروید استودیو نسخه 0.8.3 و بالاتر ممکن است به درستی با مدیر پنجره WM Awesome W3 کار نکنند. برای حل این مسئله، به نسخه فوق العاده WM نسخه 3.5 ارتقا دهید.

۱۳) frozen keyboard- مشکلات iBus در لینوکس

برخی از تعاملات شناخته شده بین daemon iBus در لینوکس و اندروید استودیو وجود دارد. در برخی از موارد، IDE متوقف می شود پاسخ به ورودی صفحه کلید و یا شروع به وارد کردن کاراکتر تصادفی. این اشکال ناشی از عدم هماهنگی بین iBus و XLib + AWT است و از قبل به JetBrains و iBus گزارش شده است. سه راه حل فعلی برای این مسئله وجود دارد:

راه حل 1: iBus را به حالت همگام وصل کنید. قبل از شروع Android Studio، در خط فرمان، کد زیر را اجرا کنید:

راه حل ۲ : از کار انداختن ورودی iBus در Android Studi. برای غیر فعال کردن ورودی iBus برای اندروید استودیو، تنها موارد زیر را در سطر فرمان اجرا کنید :

این راه حل فقط روش‌های ورودی برای اندروید استودیو را از کار می اندازد، و نه برنامه‌های کاربردی دیگری که ممکن است در حال اجرا باشند . توجه داشته باشید که اگر daemon شیطان را مجدداً راه‌اندازی کنید (به عنوان مثال، با اجرای ibus-daemon -rd)، شما به طور موثر روش‌های ورودی را برای تمام برنامه‌های کاربردی دیگر را غیرفعال کنید و همچنین ممکن است JVM Android Studio را با یک خطای تقسیم‌بندی شکست دهید .

راه حل ۳ : میان‌بر را برای اطمینان از اینکه میان‌بر ورودی بعدی برای Control + Space تنظیم نشده است، بررسی کنید ، زیرا این نیز یک میان‌بر تکمیل کد در اندروید استودیو است . . اوبونتو 14.04 (Trusty( Super + Space را میانبر پیش فرض ایجاد می کند ، اما تنظیمات نسخه‌های قبلی ممکن است هنوز وجود داشته باشد . برای بررسی کردن پیوندهای میان‌بر خود ، ibus-setup را در خط فرمان اجرا کنید تا پنجره Preferences تنظیمات IBus باز شود. در میان‌بر صفحه‌کلید ، روش ورودی بعدی را بررسی کنید . اگر برای Control+Space تنظیم شود ، آن را به Super+Space یا دیگر میان‌بر انتخاب خود تبدیل کنید .

۱۴) اوبونتو و JAyatana

JAyatana به برنامه‌های Swing جاوا اجازه می‌دهد تا با منوی جهانی در پوسته گرافیکی Ubuntu’s ادغام شوند . در برخی موارد ، اندروید استودیو  ممکن است با یک NullPointerException تحت Unity ، با یک پیغام خطا مانند :

برای اطلاعات بیشتر به شماره ۱۸۷۱۷۹ مراجعه کنید . به همین دلیل نسخه‌های جدیدتر از اوبونتو ، JAyatana را به طور پیش‌فرض غیرفعال می‌کنند . اگر با این مشکل مواجه شدید ، دو راه حل احتمالی وجود دارد ( مراجعه به این پست Overflow برای اطلاعات بیشتر ) :

راه حل 1: هنگام اجرای اندروید استودیو، متغیر محیطی JAVA_TOOL_OPTIONS را غیر فعال کنید.
راه حل 2: JAyatana را حذف کنید

۱۵) اضافه کردن breakpoints جاوا در حال اشکال زدایی کد native

در حالی که برنامه شما در یک breakpoint در کد محلی متوقف شده‌است بازکننده های خودکار و دوگانه ممکن است بلافاصله بعد از قطع اتصال breakpoints  جدید جاوا را نشناسند. برای جلوگیری از این مسئله، قبل از شروع یک جلسه اشکالزدایی، یا نقطه توقف جاوا، نقطه یاب جاوا را اضافه کنید. برای کسب اطلاعات بیشتر، شماره 229949 را ببینید.

16) خروج از حالت اشکال زدایی native :

در حالیکه استفاده از خودکار یا دوتایی برای اشکال‌زدایی جاوا و کد بومی , اگر وارد یک تابع بومی از کد جاوا شما شود(به عنوان مثال، اشکالزدایی را در یک خط کد جاوا انجام می دهد که یک تابع بومی را فراخوانی می کند،  روی Step Into کلیک کنید) و شما می خواهید به کد جاوا خود بازگردید، روی Resume Program (به جای Step Out یا Step Over) کلیک کنید. فرایند برنامه شما همچنان متوقف خواهد شد، بنابراین Resume Program را در برگه your-module-java  کلیک کنید و آن را ادامه دهید. برای اطلاعات بیشتر، شماره 224385 را ببینید.

۱۷) استثناء رجیستری عنصری:

پیام خطای خاص رندر عبارت است از: “کلاسهای زیر نمیتوان یافت: – android.support.v7.internal.app.WindowDecorActionBar”. با وجود پیام خطا، پیش نمایش layout صحیح است و پیام را می توان با خیال راحت نادیده گرفت.

این مسئله به عنوان پیش نمایش Android Studio 2.0 ثابت شده است.

Android Emulator HAXM در MacOS High Sierra: شبیه ساز Android در MacOS High Sierra (10.13) نیاز به HAXM 6.2.1+ برای بهترین سازگاری و ثبات با macOS دارد. با این حال، macOS 10.13 فرایند بیشتر درگیر برای نصب extensions هسته مانند HAXM است. شما به طور دستی اجازه می دهید که فرمت اصلی خود را به صورت زیر نصب کنید:

1- اول، تلاش برای نصب آخرین نسخه HAXM از SDK Manager

2- در MacOS، به System Preferences > Security and Privacy بروید.

3- اگر یک هشدار را مشاهده کنید که نرم افزار سیستم از توسعه دهنده “برنامه های شرکت اینتل ” از بارگیری مسدود شده است، ” Allow ” کلیک کنید.

برای اطلاعات بیشتر و راه حل ها، به این صفحه وب سایت اپل و شماره 62395878 مراجعه کنید.

مشکلات شایع کار با Android Gradle Plugin

۱) پیکربندی بر اساس تقاضا با Gradle 4.6 و بالاتر

اگر شما از Android Gradle Plugin 3.0.x یا  3.1.x  با  Gradle 4.6  و بالاتر استفاده می کنید، باید پیکربندی را روی تقاضا غیرفعال کنید تا از برخی اشتباهات غیرقابل‌پیش‌بینی اجتناب کنید . (اگر از Android Gradle Plugin 3.2.0 یا بالاتر استفاده می کنید، نیازی به انجام هیچ کاری برای غیرفعال کردن پیکربندی در صورت درخواست نیست.)

غیرفعال کردن پیکربندی بر روی تقاضا در فایل gradle.properties شما به صورت زیر نشان داده شده است:

برای غیرفعال کردن پیکربندی بر روی تقاضا در تنظیمات Android Studio، File> Settings را انتخاب کنید (Android Studio> Preferences در Mac)، دسته کامپایلر را در قسمت چپ انتخاب کنید و جعبه Configure on request را پاک کنید.

در اندروید استودیو 3.2 بتا 1 و بالاتر، گزینه هایی برای فعال کردن پیکربندی بر روی تقاضا حذف شده اند.

۲) خطای همگام سازی پروژه در هنگام بارگیری Android Plugin 3.0.0

بارگیری چندین بار پلاگین اندروید در ساخت منجر به یک خطای همگام سازی پروژه می شود. این مورد می تواند زمانی رخ دهد که شما زیر پروژه های چندگانه داشته باشید که هر کدام دارای پلاگین اندروید در شاخه کلاس buildscript خود هستند. این یک محدودیت از مدیریت وابستگی متغیر جدید Gradle است ، که هنوز نمی‌تواند ویژگی‌های تطبیق را از classloaders مختلف مدیریت کند . اگر از Android Plugin 3.0.0 یا بالاتر استفاده می کنید، پلاگین را به Android 3.1.0 و بالاتر ارتقا دهید یا مراحل زیر را دنبال کنید تا مشکل را حل کنید:

مطلب مرتبط: به روزرسانی گوگل در آخرین نسخه اندروید استودیو ۳.۳

Multi-module Builds: اطمینان حاصل کنید که افزونه ی اندروید را فقط به نوع کلاس build class فایل ساخت build.gridle خود اضافه می کنید، همانطور که در زیر نشان داده شده است:

ابزار ترکیبی : اطمینان حاصل کنید که برای پروژه اصلی و هر پروژه‌ای که از متصل شونده آندروید استفاده می‌کند ، buildscript classpaths یک‌سان هستند . این امر همچنین مستلزم سفارش of است که شما به بلوک buildscript اضافه می‌کنید تا یک‌سان باشد . برای مثال ، وابستگی‌های متقابل زیر را در فایل build.gradle فایل پروژه اصلی در نظر بگیرید :

در حال حاضر فایل build.gradle زیر را برای پروژه دیگری که در ساخت composite  قرار دارد در نظر بگیرید:

۳) خطای وابستگی Guava با پلاگین Firebase نسخه 1.1.0:

پلاگین Firebase نسخه 1.1.0 می تواند یک عدم همبستگی در وابستگی های Guava ایجاد کند، که منجر به خطای زیر می‌شود :

برای خلاص شدن از این خطای ساخت، بلوک زیر را به وابستگی پرونده build.gridle پروژه خود اضافه کنید:

برای اطلاعات بیشتر، شماره 63180002 را ببینید.

برای استفاده از Protobufs، شما باید پلاگین Protobuf را به نسخه 0.8.2 یا بالاتر ارتقا دهید.

پلاگین android-apt دیگر پشتیبانی نمی شود. شما باید به پشتیبانی از پردازشگر حاشیه نویسی ساخته شده در سیستم بپردازید که برای حل و فصل وابستگی ها به طور گسترده ای بهبود یافته است.

امضای JAR (طرح v1) از نام فایل های حاوی Character Return )CR) پشتیبانی نمی کند. (شماره 63885809 را ببینید).

تغییرات api

Android Gradle Plugin 3.0.0 و بالاتر معرفی تغییرات API که ویژگی های خاصی را حذف می کند و ممکن است سازه های موجود شما را شکست دهد. نسخه های بعدی پلاگین ممکن است API های عمومی جدیدی را معرفی کند که قابلیت های شکسته را جایگزین کند.

اصلاح خروجی های متداول در زمان بیلد ممکن است کار نکند.

با استفاده از API Variant برای دستکاری خروجی های مختلف با افزونه جدید شکسته می شود. این کار همچنان برای وظایف ساده مانند تغییر نام APK در طول زمان ساخت کار می کند، همانطور که در زیر نشان داده شده است:

با این حال، کارهای پیچیده تر که شامل دستیابی به اشیاء خروجی فایل می شوند دیگر کار نمی کنند. این به این دلیل است که وظایف مشخصه خاص دیگر در مرحله پیکربندی ایجاد نمی شوند. این نتیجه به پلاگین نمی داند که تمام خروجی های آن به جلو، اما همچنین به معنی زمان پیکربندی سریع تر است.

manifestOutputFile دیگر در دسترس نیست

روش processManifest.manifestOutputFile() دیگر در دسترس نیست ، و هنگامی که آن را فراخوانی می‌کنید ، خطای زیر را به دست می‌آورید :

به جای فراخوانی manifestOutputFile() برای دریافت فایل مانیفست برای هر متغیر، شما می توانید processManifest.manifestOutputDirectory()را فراخوانی کنید تا مسیر دایرکتوری را که شامل تمام manifests های تولید شده است فراخوانی کنید. پس از آن شما می توانید یک manifest پیدا کنید و منطق خود را به آن اعمال کنید. نمونه زیر به صورت پویا کد نسخه را در مانیفست تغییر می دهد:

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

درباره ShopDroid

فروشگاه توسعه دهندگان موبایل شاپ دروید با بیش از 7 سال سابقه مفتخر است که اولین و بهترین فروشگاه سورس می باشد

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

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