تا چندسال پیش برنامه نویسی اندروید سختی‌های زیادی داشت. مثلاً مدیریت FragmentTransaction پیچیده بود یا به خاطر مشکلات طراحی اگر کاربر گوشی خودش را از حالت عمودی به افقی می‌چرخاند اطلاعات روی صفحه پاک می‌شدند. برای کارهای پس زمینه باید با AsyncTask ها و Loader ها درگیر می‌شدیم و در بیشتر اوقات نگرانی این بود که نشت حافظه (Memory leak) رخ ندهد. به خاطر همین هر تیمی روش خودش را برای حل این مشکلات داشت و روش استانداردی وجود نداشت. به عبارتی کار پیش می‌رفت ولی با دردسرهای زیاد.

شرکت گوگل با معرفی Jetpack این پیچیدگی ها را از بین برد. یعنی یک راه حل استاندارد برای حل مشکلات گفته شده ارائه کرد.

Jetpack چیست؟(جعبه ابزار گوگل)

اولین نکته در مورد jetpack این است که jetpack یک کتابخانه یا یک فریمورک یا یک زبان برناه نویسی جدید نیست بلکه یک مجموعه است.

Jetpack یک مجموعه (suite) از کتابخانه‌ها و ابزارها و راهنماها است که توسط گوگل ارائه شده تا به ما کمک کند اپلیکیشن های قوی‌تر و بهتر و با کیفیت تری بسازیم البته با دردسر کمتر.

اگر اپلیکیشن را یک خانه در نظر بگیریم که ما در حال ساختن آن هستیم jetpack یک جعبه ابزار از بهترین ابزارها است که می‌توانیم برای ساخت از آن‌ها استفاده کنیم. قبل از آن باید ابزارها را یا خودمان می ساختیم یا از ابزارهای متفرقه استفاده می کردیم.

هدف اصلی jetpack چیست؟

همانطورکه گفتیم jetpack برای کمتر شدن پیچیدگی های برنامه نویسی اندروید ارائه شده است که این کار را با روش‌های زیر انجام می دهد.

۱. دنبال کردن best practice ها

به روش‌های خوبی که برای حل یک مسأله وجود دارند best practice می گوییم. در jetpack اندروید شما را مجبور می‌کند که از الگوی معماری درست استفاده کنید مثل MVVM زیرا که این معماری یکی از پرکاربردترین معماری ها در طراحی اپلیکیشن ها است.

۲. کاهش کدهای تکراری (Boilerplate)

قبل از jetpack برای انجام بعضی کارها شاید لازم بود صدها خط کد نوشته شود (مثل نگهداری state ها و سازگاری با نسخه های مختلف) ولی با jetpack با چند خط کد این کار شدنی است.

۳. سازگاری با نسخه های قدیمی

سازگاری برنامه با نسخه های قدیمی کاری بسیار پردردسر بود ولی jetpack و کتابخانه AndroidX بسیاری از کارها را خودش انجام می دهد. قبل از jetpack و کتابخانه AndroidX کتابخانه‌هایی که برای پشتیبانی نسخه های مختلف اندروید استفاده می‌شد در پکیج android.support وجود داشت که دردسرها و پیچیدگی هایی داشت ولی الان همه موارد مربوط به پشتیبانی نسخه های مختلف در کتابخانه AndroidX وجود دارد که این کار به گوگل اجازه می‌دهد که کتابخانه‌ها را مستقل از نسخه سیستم عامل بروزرسانی کند.

دسته بندی کتابخانه‌های jetpack

برای درک راحت‌تر jetpack کتابخانه‌های آن در 4 دسته مختلف قرار داده شده اند. که هر دسته را در ادامه توضیح می دهیم.

معماری(Architecture)

این بخش مهم‌ترین و انقلابی ترین بخش jetpack است. کتابخانه‌های این بخش به شما کمک می‌کند که اپلیکیشن های با معماری قوی و قابل تست بسازید که نگهداری آن‌ها راحت‌تر خواهد شد. از کتابخانه‌هایی که در بخش معماری jetpack وجود دارد می‌توان به موارد زیر اشاره کرد

Viewmodel برای حفظ داده‌های UI

LiveData برای مدیریت داده‌های واکنشی

Room یک ORM بسیار مفید و قوی برای ارتباط با پایگاه داده و عملیات آن

Navigation برای مدیریت جابه جایی بین صفحات مختلف برنامه

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

رابط کاربری (UI)

این ابزارها و کتابخانه‌ها برای ساخت رابط کاربری (UI) جذاب و مدرن و روان کمک می‌کنند که کتابخانه‌های مهمی از جمله کتابخانه زیر در آن‌ها وجود دارد

Jetpack Compose یک روش کاملاً جدید و اعلانی (declarative) برای ساخت رابط کاربری

Material components برای پیاده‌سازی Material design

Fragment برای شکستن رابط کاربری به اجزای کوچکتر و مدیریت راحت‌تر

رفتار (beahavior)

کتابخانه‌های این بخش برای تعامل بهتر با سرویس های سیستم عامل به کار می‌روند و این ارتباط را راحت‌تر می کنند. چند تا این کتابخانه‌ها و ابزارها عبارتند از:

Notification: برای مدیریت نوتیفیکیشن ها و اعلان ها

Permissions: برای مدیریت مجوز ها و دسترسی ها

Preferences: برای کار با تنظیمات و ذخیره آن‌ها

CameraX: برای راحت‌تر شدن کار با دوربین

هسته (Foundation)

ابزارهای هسته ابزارهای پایه و زیرساختی هستند که ممکن است که برنامه نویس مستقیماً با آن‌ها کار نکند ولی وجود آن‌ها برای بقیه لازم و ضروری است. از کتابخانه‌های این بخش عبارتند از

AppCompat برای سازگاری با نسخه های قدیمی

Multidex برای اپلیکیشن های بزرگ

Test برای تست کردن اپلیکیشن ها.

محبوب‌ترین کتابخانه‌های jetpack که زندگی شما را عوض می‌کند

همانطور که گفته شد jetpack کتابخانه‌های زیادی دارد اما چند تا از این کتابخانه‌ها تقریباً در هر پروژه مدرنی استفاده می‌شوند پس آن‌ها را بیشتر توضیح می‌دهیم.

ViewModel

وظیفه ViewModel نگهداری داده‌های مربوط به UI است. حال این نگهداری باعث می‌شود که داده‌ها در برابر تغییرات UI مثل چرخش زاویه گوشی و حفظ شود. همچنین Viewmodel ارتباط بین لایه دیتا و رابط کاربری را برقرار می‌کند و رابط کاربری با لایه داده‌ها به صورت مستقیم ارتباط نمی‌گیرد.

Room

یک ORM است و وظیفه آن این است که ما را از پیچیدگی های ارتباط با دیتابیس و لود کردن داده‌های آن و پیچیدگی های کوئری نویسی رها می‌کند. شما دیگر با جدول ها و دیتابیس ها کار نمی‌کنید و همه داده‌ها را به شکل کلاس و شی تعریف می‌کنید و Room آن‌ها را تبدیل به کوئری و جدول و داده‌های جدول می کند.

Navigation Component

وظیفه این کتابخانه مدیریت جابه جایی بین Fragment ها است. با این کتابخانه مدیریت فرگمنت ها بسیار ساده شده است و دیگر نیازی به نوشتن FragmentTransaction نیست. فقط باید یک navigation graph طراحی کنید و جابه جایی انجام می شود.

LiveData

یک کلاس نگهدارنده است که از چرخه حیات Activity/Fragment شما آگاه است (lifecycle-Aware) یعنی فقط زمانی که Activity یا فرگمنت شما فعال است داده‌ها را به UI ارسال می‌کند. این کار از کرش کردن برنامه و نشت حافظه جلوگیری می کند.

Jetpack Compose

این شاید هیجان انگیزترین بخش Jetpack باشد. Compose یک روش مدرن و اعلانی برای طراحی و ساخت UI است. دیگر شما با استفاده از xml رابط کاربری طراحی نمی‌کنید شما مستقیماً UI را در کد تعریف و توصیف می کنید. یادگیری اولیه آن شاید کمی چالشی باشد ولی سرعت توسعه را بسیار بالا می برد.

چطور شروع به استفاده از jetpack بکنیم؟

اگر می‌خواهید شروع کنید و از این مجموعه استفاده کنید لازم نیست زحمت زیادی بکشید زیرا که وقتی پروژه جدیدی را در اندروید استودیو شروع می‌کنید، آن پروژه به صورت پیش‌فرض با کتابخانه‌های اصلی jetpack مثل (AppCompat, Material components) ساخته می‌شود و برای اینکه کتابخانه دیگر را استفاده کنید (مانند Room) فقط باید ماژول آن را در فایل build.gradle اضافه کنید.

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