مهاجرت به 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 مهیا میکند.
۲: بروزرسانی خودکار توسط گزینه Migrate to AndroidX
از Android Studio 3.2 به بعد امکانی فراهم شده که پروژههای قبلی را بتوان به صورت خودکار و بدون نیاز به ویرایش دستی به پروژهای بر پایه پکیجهای androidx تبدیل کرد. برای استفاده از این قابلیت بعد از باز کردن پروژه در محیط اندروید استودیو، در منوی Refactor گزینه Migrate to AndroidX را انتخاب کنید:
با انتخاب این گزینه یک پیغام قبل از آغاز فرآیند نمایش داده میشود:
در این پیغام توصیه شده قبل از شروع عملیات یک نسخه پشتیبان (backup) از پروژه تهیه شود که به راحتی میتوان پوشه مربوط به پروژه را در جایی دیگر کپی کرد. همچنین خود اندروید استودیو گزینه ای با عنوان Backup project as Zip file به انتهای این پنجره اضافه کرده که در صورت تایید، یک بکاپ به صورت خودکار و با فرمت zip ایجاد میشود.
در ادامه گفته شده با توجه به کتابخانهها و پلاگینهایی که در پروژه بکار رفته ممکن است لازم باشد برخی از ارورها را به صورت دستی رفع کنیم. روی گزینه Migrate کلیک میکنم تا عملیات آغاز شود.
ابتدا محل قرارگیری بکاپ پروژه را تعیین میکنم:
اندروید استودیو جزئیاتی از تغییرات پروژه برای مهاجرت به androidx را نشان میدهد که با کلیک روی Do refactor تایید و عملیات اجرا میشود:
بدون هیچگونه خطایی تبدیل انجام شد. البته این یک پروژه بسیار ساده و سبک بود. در پروژههای سنگین که از کتابخانههای متعددی استفاده شده احتمال بروز خطا و نیاز به اصلاح دستی بالا میرود. اگر خطا مربوط به ورژن گریدل بود آموزش ایمپورت کردن پروژه در اندروید استودیو را مطالعه کنید.
مطالعهی بیشتر:
https://developer.android.com/jetpack
https://developer.android.com/jetpack/androidx
تعداد صفحات : ۹
حجم : ۱ مگابایت
قیمت : رایگان
دانلود رایگان با حجم ۱ مگابایت لینک کمکی
چطور میشه از androidxبه حالت appcompat برگردیم….
https://stackoverflow.com/q/53446801
سلام خسته نباشید ممنون بابت آموزش های عالیتون.من یه پروژه داشتم که به اندروید x تبدیلش کردم.حالا بخش مربوط به file provider هام که میخواستم فایل های pdf را نمایش بده و یا ارسال کنه کار نمیکنه میشه کمکم کنید که مشکل را چجوری باید حل کنم
در این مورد اطلاعی ندارم. log رو چک کنید ببینید اروری میگیرید موقعی که pdf باید باز بشه؟
یا سرچ کنید ببینید file provider تغییراتی داشته یا نه
سلام وقت بخیر خیلی ممنون بابت اموزشای عالی و بی نقص
من از کتابخانه های androidx استفاده کردم و برنامه کاملا درست اجرا میشه امااااا فقط از اندروید ۸ به بالا …
ینی رو گوشی هایی که اندروید پایین دارند ارور نصب میده و اجرا نمیشه
ارور :::
Binary xml file line #13: Error: inflating class com.google.android.material.navigation.NavigationView
https://stackoverflow.com/a/56932664
سلام ایا امکانش هست که اندروید 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
ارور واضحه. platform نسخه ۲۸٫۰٫۳ باید نصب بشه
(پیام قبلیتون هم پاک نشده بود. اگه دقت کنید دیدگاهی که ثبت میکنید میزنه در انتظار تایید)
سلام ببخشید
یعنی الان من به عنوان برنامه نویس تازه کار از ساپورت لایبرری استفاده کنم یا androidx ؟
ساپورت لایبرری تو نسخه های پایین تر از ۵ هم سازگاری داشته ولی androidx چطور؟یعنی من از این به بعد برای برنامه نویسی حرفه ای و تجاری در طولانی مدت از کدوم استفاده کنم؟از این به بعد appcompat دیگه استفاده نمیشه؟ ممنون میشم پاسخ بدید.
نیازی نیست شما خودتون رو درگیر این دو گزینه بکنید. به طور پیش فرض پروژه جدید روی androidx ساخته میشه. appcompat دیگه پشتیبانی نخواهد شد و خواستید پروژه قدیمی رو روش کار کنید لازمه که تبدیل بشه به androidx
سلام
خیلی ممنون ولی منظور من اینه که آموزش های سایت کارایی خودش رو روی androidx خواهد داشت و میتونم به عنوان کسی که تازه وارد برنامه نویسی اندروید شده این آموزش ها رو ببینم و وقت بزارم یا فقط باید قسمت هاییش رو نگاه کنم؟
و اینکه backward compatiblity تو متریال دیزاین و کلاس های کاربردی برای افزایش کاربران اندروید رو نسخه های مختلف مهمه. میخواستم بدونم تو androidx مشکلی وجود نداره؟یعنی اگه minsdk رو تو androidx رو نسخه های مثلا ۱۷ بزارم تو موضوعاتی مثل متریال دیزاین مثل appcompat قبلی مشکلی نخواهم داشت؟ خیلی ممنون.
هیچ تفاوتی در نحوه کار با اندروید استودیو ایجاد نشده. ساده ش اینه که نامگذاری کتابخانه ها قبلا با support شروع میشد الان androidx
خودم باورم نمیشه پروژه به این سنگینی که حتی از سوکت و خیلی جزئیات دیگه استفاده میکرد، بدون حتی یک خطا کاملا تبدیل شد. 🙂
سلام اندروید استودیو اخرین نسخه رو نصب داشتم. دو روز کار نکردم بعد اومدم نرم افزارو اجرا کنم نرم افزار بالا نمیاد و ارور میده
این ارور :
Internal error :
java. net.bindExeption:Address already in use:bind
at sun.nio.ch.Net.bin0(Native Method)
اسکرین شات بدید لطفا. ببینم کجا ارور گرفتید
سلام استاد وقت تون بخیر….
چرا داخل AndroidX چیدمان صفحه Relativelayout
ازادنه نیست و پلت ها ازادانه در هرجای صفحه قرار نمیگیرند؟؟؟؟؟؟؟؟؟؟؟
نباید تفاوتی باشه بین androidx و support. سورسهایی که androidx نیستن، کد xml یک اکتیویتی رو کپی کنید داخل پروژه ببینید مشکل داره یا نه (البته فقط کد مربوط به ویجت های داخل layout)
سلام . نسخه اندروید استودیو من ۳٫۵٫۱ هستت و همه چیش به Android x تغییر پیدا کرده . مشکل زیادی واسم به بار اورد . مثلا کتبخونه های دیزاین ( ساپورت ) رو ارور میده میگه واسه نسخه قبلیه و سایر کتابخونه ها هم همینطور … به طوری که مجبور شدم یه نسخه برگردم عقب یعنی ۲۹ رو کردم ۲۸ تا مثل قبل شد . الان دوباره میخوام برگردم ۲۹ اما هنوز نمیتونم مشکل کتابخونه هارو رفع کنم . لیست کتاب خونه های منطبق با اندروید ایکس به خصوص کتابخونه دیزاین و کارد ویو و … رو از کجا میتونم تهیه کنم و به گریدل اضافه کنم ؟
این پک جت پک که گفتید شامل این ها هست ؟ چطور ازش استفاده کنم ؟
اگه پاس خ تایید نشد لطفا حتما بهم جیمیل کنید پاسخ رو چون دو هفتست از کار هام به خاطر این مشکل عقب افتادم . ممنون از سایت فوق العاده عالیتون 🙂
اگر به درستی migrate کرده باشید نباید برای کتابخانه های ساپورت اروری بگیرید. مگه اینکه استثنائی باشه. ارورهایی که میگیرید رو ترجمه کنید. اگه متوجه اشکال نشدید سرچ کنید. اگه بازم به جواب نرسیدید اینجا ارورها رو اعلام بفرمائید راهنمایی کنیم
سلام و خسته نباشید خدمت شما استاد گرامی
ورژن اندروید استودیو من ۳٫۴٫۲ هست و طبق گفته شما به صورت پیش فرض از اندروید x استفاده میکنه ولی وقتی حتی یک پروژه جدید میسازم و در صفحه دیزاین لیوت ویدجیت هارو درگ میکنم توی پروژه اونا با استفاده از کتابخونه ساپورت واارد پروژه میشن و من مجبورم دونه به دونه اونارو مطابق با کتابخونه های اندروید x تبدیل کنم.
ممنون میشم اگر بتونید برای حل این مشکل راهنماییم کنید.
مطمئنید androidx روی پروژه فعاله؟ داخل build.gradle کتابخونه ها androidx هستن؟
مثلا این مشکل :
Caused by: android.view.InflateException: Binary XML file line #18: Error inflating class android.support.design.widget.BottomNavigationView
اگه پروژه تبدیل به androidx شده چطور android.support.design هست تگتون؟
سلام ممنون از توضیحاتتون
من همه کارای بالا رو انجام دادم ولی دیگه برنامه روی گوشی با اندروید ۴٫۲ اجرا نمیشه ؟؟؟؟….چکار باید کرد؟؟؟
سلام. بزرگوار موقع اجرا Logcat رو بررسی کنید ببینید چه اروری میگیرید.
Caused by: android.view.InflateException: Binary XML file line #18: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView
کامنت قبلیتونو دیروز جواب دادم نمیدونم چرا اینجا نشون نمیده.
اگه پروژه تبدیل به androidx شده چطور android.support.design هست تگتون؟