مهاجرت به 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 این آموزش
تعداد صفحات : ۹
حجم : ۱ مگابایت
قیمت : رایگان
دانلود رایگان با حجم ۱ مگابایت لینک کمکی
این مطلب چقدر برایتان مفید بود؟ لطفا امتیاز دهید
4.1/5 - (17 امتیاز)
پرسش‌ها و دیدگاه‌های کاربران
دوره آموزش برنامه نویسی اندروید
دوره آموزش برنامه نویسی اندروید

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

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

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

  • حجت گفت:

    چطور میشه از androidxبه حالت appcompat برگردیم….

  • عالمه گفت:

    سلام خسته نباشید ممنون بابت آموزش های عالیتون.من یه پروژه داشتم که به اندروید x تبدیلش کردم.حالا بخش مربوط به file provider هام که میخواستم فایل های pdf را نمایش بده و یا ارسال کنه کار نمیکنه میشه کمکم کنید که مشکل را چجوری باید حل کنم

  • shirin گفت:

    سلام وقت بخیر خیلی ممنون بابت اموزشای عالی و بی نقص
    من از کتابخانه های androidx استفاده کردم و برنامه کاملا درست اجرا میشه امااااا فقط از اندروید ۸ به بالا …
    ینی رو گوشی هایی که اندروید پایین دارند ارور نصب میده و اجرا نمیشه
    ارور :::

    Binary xml file line #13: Error: inflating class com.google.android.material.navigation.NavigationView

  • mohamad گفت:

    سلام ایا امکانش هست که اندروید x در اندروید ۴ اپلیکیشن به درستی کار نکند ؟

  • ابورحمان گفت:

    با سلام مال من زمانی که اندروید استادیو نصب کردم خودکار روی androidx بود و به عنوان مثال نمیتونم از getExternalStoregDirectory() استفاده کنم یعنی واسم اصلا نشون نمیده یا این app:actionViewClass=”android.support.v7.widget.SearchView” برام کار نمیکنه اینقدر همه جور کد واسه ایمپورت کردن به گردل اضافه کردم نشد که دیگه کلافه شدم خدایش(‌حتی همون که بالا نوشتی رو هم گذاشتم نشد) نمیشه باز بگردم به appcompat چون آموزش های که میبینمم مال همون موقع هستش و یا از androidx استفاده نکنم؟

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

      مورد اولی که فرمودید ارتباطی به androidx یا appcompat نداره بزرگوار
      مورد دوم هم بالاخره اندروید استودیو و امکاناتش مدام در حال تغییراته و باید خودتون رو بروز کنید. یه راه ساده اینه که سورس پروژه قدیمی رو ایمپورت و migrate کنید به androidX و ببینید اصلاحات چی هست. و یا اینکه هر موردی رو مشکل دارید سرچ کنید. منبع اصلی هم که developer.android.com هست

  • سعید جدیدی گفت:

    ورژن appcompat رو از ۱٫۲٫۰-alpha03 به androidx.appcompat:appcompat:1.1.0-alpha05 تغییر دادم الان ارور موجود اینه
    ERROR: Module ‘app’: platform ‘28.0.3’ not found
    ERROR: Failed to find target with hash string ‘28.0.3’ in: C:\sdk

  • aaty2018 گفت:

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

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

      نیازی نیست شما خودتون رو درگیر این دو گزینه بکنید. به طور پیش فرض پروژه جدید روی androidx ساخته میشه. appcompat دیگه پشتیبانی نخواهد شد و خواستید پروژه قدیمی رو روش کار کنید لازمه که تبدیل بشه به androidx

      • aaty2018 گفت:

        سلام
        خیلی ممنون ولی منظور من اینه که آموزش های سایت کارایی خودش رو روی androidx خواهد داشت و میتونم به عنوان کسی که تازه وارد برنامه نویسی اندروید شده این آموزش ها رو ببینم و وقت بزارم یا فقط باید قسمت هاییش رو نگاه کنم؟
        و اینکه backward compatiblity تو متریال دیزاین و کلاس های کاربردی برای افزایش کاربران اندروید رو نسخه های مختلف مهمه. میخواستم بدونم تو androidx مشکلی وجود نداره؟یعنی اگه minsdk رو تو androidx رو نسخه های مثلا ۱۷ بزارم تو موضوعاتی مثل متریال دیزاین مثل appcompat قبلی مشکلی نخواهم داشت؟ خیلی ممنون.

  • محمدرضا گفت:

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

  • الیاس گفت:

    سلام اندروید استودیو اخرین نسخه رو نصب داشتم. دو روز کار نکردم بعد اومدم نرم افزارو اجرا کنم نرم افزار بالا نمیاد و ارور میده
    این ارور :
    Internal error :
    java. net.bindExeption:Address already in use:bind
    at sun.nio.ch.Net.bin0(Native Method)

  • 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

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

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