مهاجرت به AndroidX در اندروید استودیو

در این جلسه از سری مباحث آموزش برنامه نویسی اندروید ابتدا به معرفی AndroidX پرداخته، سپس نحوه مهاجرت از کتابخانه‌های پشتیبانی (Support Library) به AndroidX را بررسی می‌کنیم.

AndroidX چیست؟

به نام خدا. به زبان ساده، AndroidX نسل جدید و بهینه شده‌ی پکیج کتابخانه‌های Support اندروید است. تیم توسعه اندروید در گذشته، کتابخانه‌های ضروری موردنیاز جهت ساخت و توسعه برنامه‌های اندرویدی را در قالب لایبرری‌های Support منتشر می‌کرد.
کتابخانه Appcompat را مثال می‌زنم. در گذشته بعد از ساخت پروژه در اندروید استودیو این لایبرری به صورت زیر در فایل build.gradle سطح app پروژه قرار می‌گرفت:

implementation 'com.android.support:appcompat-v7'

اما در حال حاضر نحوه نامگذاری این کتابخانه تغییر کرده و به اینصورت به پروژه اضافه شده:

implementation 'androidx.appcompat:appcompat'

ازین پس نامگذاری کتابخانه‌های پشتیبانی همگی با پیشوند androidx.* آغاز می‌شود. شاید دلیل اصلی معرفی AndroidX، همین تغییر نام و یا به عبارتی برندسازی مجدد تیم توسعه اندروید برای کتابخانه‌ها باشد تا نحوه نامگذاری پکیج‌ها منسجم و یکپارچه بوده و کمتر باعث سردرگمی برنامه نویسان اندرویدی شود. البته این تغییرات محدود به تغییر نحوه نامگذاری نبوده و تعدادی از باگ‌های موجود در نسخه‌های قدیم نیز رفع گردیده است.
همچنین تیم توسعه اندروید از Jetpack برای توسعه، تست و ریلیز (انتشار) کتابخانه‌های AndroidX استفاده می‌کند که باعث شده کتابخانه‌ها نسبت به قبل بهینه‌تر بوده و حجم کمتری داشته باشند.

Jetpack چیست؟

Jetpack یا جِت پَک، به مجموعه‌ای از کتابخانه‌ها، ابزار و راهنمایی‌ها گفته می‌شود که به جهت تسهیل در ساخت اپلیکیشن‌های اندرویدی طراحی و منتشر شده‌اند.

Jetpack اندروید

به طور کلی، Jetpack و پکیج کتابخانه‌های آن یعنی AndroidX به جهت بهبود تجربه توسعه دهندگان اندرویدی و جمع آوری ابزار و امکانات ضروری و مفید در یک قالب مشترک ارائه شده‌اند.

آیا مهاجرت از Support Library به AndroidX ضروری است؟

در حال حاضر شاید ضرورتی در این مهاجرت دیده نشود. کماکان امکان استفاده از کتابخانه‌های Support وجود دارد؛ البته با محدودیت‌هایی که در ادامه به آنها اشاره می‌کنم. با اینحال بهتر است هرچه سریعتر خودمان را با نسخه جدید وفق دهیم. از چند نسخه قبل از نسخه ۳٫۵ اندروید استودیو، هنگام ساخت پروژه جدید، استفاده از AndroidX اختیاری بود اما در نسخه ۳٫۵ این گزینه به صورت پیش فرض فعال بوده و امکان تغییر آن وجود ندارد:

androidx در برنامه نویسی اندروید

غیرفعال بودن گزینه Use androidx.* artifacts به عنوان یادواری برای توسعه دهندگان بوده و قطعا در نسخه‌های آتی، به کلی حذف خواهد شد.
اگر قصد ساخت پروژه جدیدی دارید نیاز به انجام کار خاصی نیست. کتابخانه جدید Appcompat در پروژه قرار دارد و هنگام اضافه کردن سایر کتابخانه‌های Support نیز پکیج‌های androidx در لیست نمایش داده میشود.
ولی برای بروزرسانی پروژه‌های قدیمی، هم به صورت دستی و هم با استفاده از قابلیتی که ویژه همین امر در اندروید استودیو تعبیه شده می‌توان اقدام کرد.

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

۱: بروزرسانی دستی

برای مهاجرت به androidx به شیوه‌ی دستی احتمالا زمان زیادی را باید صرف کنیم. بعد از اصلاح نام کتابخانه‌ها در build.gradle باید import های موجود در اکتیویتی‌ها نیز اصلاح شود. به عنوان مثال:

import android.support.v7.app.AppCompatActivity;

باید با:

import androidx.appcompat.app.AppCompatActivity;

جایگزین شود. همچنین این اصلاحات باید در تگ‌های لایه xml نیز صورت پذیرد.
برای مثال:

<android.support.constraint.ConstraintLayout>

با

<androidx.constraintlayout.widget.ConstraintLayout>

جایگزین خواهد شد. علاوه بر آن باید دو خط زیر نیز به gradle.properties اضافه شود تا androidx فعال گردد. شیوه دستی برای مهاجرت به androidx توصیه نمی‌شود.

android.useAndroidX=true
android.enableJetifier=true

خط اول یعنی useAndroidX تعیین می‌کند پلاگین اندروید از androidx بجای support استفاده نماید.
در خط بعد، پلاگین اندروید توسطenableJetifier به صورت خودکار با بازنویسی باینری (binary) کتابخانه‌های شخص ثالث (کتابخانه‌هایی که توسط افراد و تیم‌های غیر از تیم توسعه اندروید منتشر می‌شوند) آنها را برای استفاده از androidx مهیا می‌کند.

نکته: برای استفاده از androidx ورژن اندروید استودیو باید حداقل ۳٫۲ باشد. هرچند همواره استفاده از آخرین نسخه پایدار (stable) اندروید استودیو توصیه می‌شود. همچنین API (compileSdkVersion و targetSdkVersion) نیز باید ۲۸ و به بالا باشد. ضمن اینکه از API 29 و به بعد فقط استفاده از androidx امکان‌پذیر است.

۲: بروزرسانی خودکار توسط گزینه Migrate to AndroidX

از Android Studio 3.2 به بعد امکانی فراهم شده که پروژه‌های قبلی را بتوان به صورت خودکار و بدون نیاز به ویرایش دستی به پروژه‌ای بر پایه پکیج‌های androidx تبدیل کرد. برای استفاده از این قابلیت بعد از باز کردن پروژه در محیط اندروید استودیو، در منوی Refactor گزینه Migrate to AndroidX را انتخاب کنید:

مهاجرت به AndroidX در اندروید استودیو

با انتخاب این گزینه یک پیغام قبل از آغاز فرآیند نمایش داده می‌شود:

بکاپ گرفتن از پروژه اندرویدی قبل از مهاجرت به androidx

در این پیغام توصیه شده قبل از شروع عملیات یک نسخه پشتیبان (backup) از پروژه تهیه شود که به راحتی می‌توان پوشه مربوط به پروژه را در جایی دیگر کپی کرد. همچنین خود اندروید استودیو گزینه ای با عنوان Backup project as Zip file به انتهای این پنجره اضافه کرده که در صورت تایید، یک بکاپ به صورت خودکار و با فرمت zip ایجاد می‌شود.
در ادامه گفته شده با توجه به کتابخانه‌ها و پلاگین‌هایی که در پروژه بکار رفته ممکن است لازم باشد برخی از ارورها را به صورت دستی رفع کنیم. روی گزینه Migrate کلیک می‌کنم تا عملیات آغاز شود.
ابتدا محل قرارگیری بکاپ پروژه را تعیین می‌کنم:

تعیین محل بکاپ گیری پروژه قبل از تبدیل به androidx

اندروید استودیو جزئیاتی از تغییرات پروژه برای مهاجرت به androidx را نشان می‌دهد که با کلیک روی Do refactor تایید و عملیات اجرا می‌شود:

دکمه Do refactor جهت آغاز تبدیل پروژه اندروید به androidx

تبدیل پروژه قدیمی اندروید به androidx بدون خطا

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

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

مطالعه‌ی بیشتر:

https://developer.android.com/jetpack
https://developer.android.com/jetpack/androidx

دانلود نسخه PDF این آموزش
تعداد صفحات : ۹
حجم : ۱ مگابایت
قیمت : رایگان
دانلود رایگان با حجم ۱ مگابایت لینک کمکی
این مطلب چقدر برایتان مفید بود؟ لطفا امتیاز دهید
دوره آموزش برنامه نویسی اندروید
دوره آموزش برنامه نویسی اندروید

آموزش‌ها در دو دسته «پایه» و «تکمیلی» منتشر می‌شوند.
آموزش‌های پایه شامل مباحث اصلی و آموزش‌های تکمیلی مطالبی است که می‌بایست در کنار مطالب اصلی از آنها استفاده کنیم.
شما با دریافت این دوره به تمامی آموزش‌های غیر رایگان و رایگان موجود در وب سایت دسترسی دارید که تخفیفی برای آموزش‌های غیر رایگان نیز درنظر گرفته شده. این پکیج به دو صورت دانلودی و ارسال پستی ارائه می‌گردد.
با خرید این دوره، به تمامی آموزش‌های غیر رایگانی که در آینده منتشر می‌شود نیز به صورت رایگان دسترسی خواهید داشت!

یک دیدگاه بنویسید

پرسش‌های زیر تایید و پاسخ داده نخواهد شد:
۱ : جزء موارد پاسخ داده شده در مطلب "مشکلات و پرسش های رایج" باشد
۲ : سوال قبلا توسط کاربران در دیدگاهها مطرح و پاسخ داده شده باشد
۳ : سوال خارج از مبحث آموزشی موجود در این صفحه باشد

  • Z4me گفت:

    سلام استاد وقت تون بخیر….
    چرا داخل AndroidX چیدمان صفحه Relativelayout
    ازادنه نیست و پلت ها ازادانه در هرجای صفحه قرار نمیگیرند؟؟؟؟؟؟؟؟؟؟؟

    • سیدمهدی مطهری گفت:

      نباید تفاوتی باشه بین androidx و support. سورسهایی که androidx نیستن، کد xml یک اکتیویتی رو کپی کنید داخل پروژه ببینید مشکل داره یا نه (البته فقط کد مربوط به ویجت های داخل layout)

  • محمد گفت:

    سلام . نسخه اندروید استودیو من ۳٫۵٫۱ هستت و همه چیش به Android x تغییر پیدا کرده . مشکل زیادی واسم به بار اورد . مثلا کتبخونه های دیزاین ( ساپورت ) رو ارور میده میگه واسه نسخه قبلیه و سایر کتابخونه ها هم همینطور … به طوری که مجبور شدم یه نسخه برگردم عقب یعنی ۲۹ رو کردم ۲۸ تا مثل قبل شد . الان دوباره میخوام برگردم ۲۹ اما هنوز نمیتونم مشکل کتابخونه هارو رفع کنم . لیست کتاب خونه های منطبق با اندروید ایکس به خصوص کتابخونه دیزاین و کارد ویو و … رو از کجا میتونم تهیه کنم و به گریدل اضافه کنم ؟

    این پک جت پک که گفتید شامل این ها هست ؟ چطور ازش استفاده کنم ؟

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

    • سیدمهدی مطهری گفت:

      اگر به درستی migrate کرده باشید نباید برای کتابخانه های ساپورت اروری بگیرید. مگه اینکه استثنائی باشه. ارورهایی که میگیرید رو ترجمه کنید. اگه متوجه اشکال نشدید سرچ کنید. اگه بازم به جواب نرسیدید اینجا ارورها رو اعلام بفرمائید راهنمایی کنیم

  • محمود محمدی گفت:

    سلام و خسته نباشید خدمت شما استاد گرامی
    ورژن اندروید استودیو من ۳٫۴٫۲ هست و طبق گفته شما به صورت پیش فرض از اندروید x استفاده میکنه ولی وقتی حتی یک پروژه جدید میسازم و در صفحه دیزاین لیوت ویدجیت هارو درگ میکنم توی پروژه اونا با استفاده از کتابخونه ساپورت واارد پروژه میشن و من مجبورم دونه به دونه اونارو مطابق با کتابخونه های اندروید x تبدیل کنم.
    ممنون میشم اگر بتونید برای حل این مشکل راهنماییم کنید.

  • سید جمال الدین جلالی گفت:

    مثلا این مشکل :
    Caused by: android.view.InflateException: Binary XML file line #18: Error inflating class android.support.design.widget.BottomNavigationView

  • سید جمال الدین جلالی گفت:

    سلام ممنون از توضیحاتتون
    من همه کارای بالا رو انجام دادم ولی دیگه برنامه روی گوشی با اندروید ۴٫۲ اجرا نمیشه ؟؟؟؟….چکار باید کرد؟؟؟

پاسخی بگذارید

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

کد امنیتی *