مهاجرت به 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 و پکیج کتابخانههای آن یعنی AndroidX به جهت بهبود تجربه توسعه دهندگان اندرویدی و جمع آوری ابزار و امکانات ضروری و مفید در یک قالب مشترک ارائه شدهاند.
آیا مهاجرت از Support Library به AndroidX ضروری است؟
در حال حاضر شاید ضرورتی در این مهاجرت دیده نشود. کماکان امکان استفاده از کتابخانههای Support وجود دارد؛ البته با محدودیتهایی که در ادامه به آنها اشاره میکنم. با اینحال بهتر است هرچه سریعتر خودمان را با نسخه جدید وفق دهیم. از چند نسخه قبل از نسخه ۳٫۵ اندروید استودیو، هنگام ساخت پروژه جدید، استفاده از 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 را انتخاب کنید:
با انتخاب این گزینه یک پیغام قبل از آغاز فرآیند نمایش داده میشود:
در این پیغام توصیه شده قبل از شروع عملیات یک نسخه پشتیبان (backup) از پروژه تهیه شود که به راحتی میتوان پوشه مربوط به پروژه را در جایی دیگر کپی کرد. همچنین خود اندروید استودیو گزینه ای با عنوان Backup project as Zip file به انتهای این پنجره اضافه کرده که در صورت تایید، یک بکاپ به صورت خودکار و با فرمت zip ایجاد میشود.
در ادامه گفته شده با توجه به کتابخانهها و پلاگینهایی که در پروژه بکار رفته ممکن است لازم باشد برخی از ارورها را به صورت دستی رفع کنیم. روی گزینه Migrate کلیک میکنم تا عملیات آغاز شود.
ابتدا محل قرارگیری بکاپ پروژه را تعیین میکنم:
اندروید استودیو جزئیاتی از تغییرات پروژه برای مهاجرت به androidx را نشان میدهد که با کلیک روی Do refactor تایید و عملیات اجرا میشود:
بدون هیچگونه خطایی تبدیل انجام شد. البته این یک پروژه بسیار ساده و سبک بود. در پروژههای سنگین که از کتابخانههای متعددی استفاده شده احتمال بروز خطا و نیاز به اصلاح دستی بالا میرود. اگر خطا مربوط به ورژن گریدل بود آموزش ایمپورت کردن پروژه در اندروید استودیو را مطالعه کنید.
نکته: ممکن است هنوز هم تعدادی از کتابخانههای سوم شخصی که در پروژههای خود استفاده کردهاید یا در سورسهای موجود در اینترنت بکار رفتهاند، هنوز با androidx سازگار نبوده و نیاز به بروزرسانی توسط توسعه دهندگان آنها باشد.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.