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

برترین کتابخانه های اندروید که هر برنامه نویس اندروید باید بداند

برترین کتابخانه های اندروید

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

  • سرعت توسعه را افزایش دهد
  • کیفیت کد را بالا ببرد
  • احتمال بروز خطا را کم کند
  • و تجربهٔ کاربری را ارتقا دهد

به همین دلیل، شناخت کتابخانه‌های کاربردی اندروید یک مهارت ضروری برای هر برنامه‌نویسی است که می‌خواهد اپلیکیشن‌های حرفه‌ای تولید کند. در این مقاله، یک نسخهٔ کامل، بازنویسی شده و ارتقایافته از ۱۰ کتابخانهٔ مهم اندروید را می‌خوانید.

برای نصب و راه اندازی ابزارهای برنامه نویسی اندروید با جزئیات بیشتر آموزش نصب و راه اندازی اندروید به این صفحه مراجعه کنید.

کتابخانه (Library) در اندروید چیست؟

کتابخانه‌ها مجموعه‌ای از کلاس‌ها، ابزارها، APIها و قابلیت‌های آماده هستند که توسعه‌دهنده می‌تواند آن‌ها را مانند یک پکیج آماده وارد پروژه کند. هدف کتابخانه‌ها این است که نیاز به اختراع دوبارهٔ چرخ وجود نداشته باشد.

چرا باید از کتابخانه‌ها استفاده کنیم؟

  • کاهش حجم کدهای تکراری
  • استانداردسازی ساختار پروژه
  • افزایش سرعت توسعه
  • پشتیبانی بهتر از معماری‌های جدید
  • حل مشکلات پیچیده مانند شبکه، تصاویر، تاریخ، دیتابیس و …

مثال‌هایی مثل Retrofit، Glide، Moshi، RxJava، Room جزء مشهورترین ابزارها هستند که در پروژه‌های حرفه‌ای زیاد استفاده می‌شوند.

روش افزودن کتابخانه‌ها در Gradle

افزودن کتابخانه‌ها در Gradle در اندروید ساده است. تمام وابستگی‌ها در فایل build.gradle (ماژول app) اضافه می‌شود.

۱) یافتن فایل Gradle

مسیر:

1
app/build.gradle

۲) ساختار اصلی dependencies

1
2
3
dependencies {
    implementation 'package:version'
}

۳) مثال واقعی — افزودن Retrofit

1
2
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

10 کتابخانه برتر اندرویدی که هر…

۴) سینک کردن پروژه

پس از افزودن کدها، باید روی Sync Now کلیک کنید تا Gradle کتابخانه‌ها را دانلود کند.

فهرست برترین کتابخانه های اندروید

1. Retrofit – بهترین کتابخانه برای شبکه و API

Retrofit یکی از قدرتمندترین کتابخانه‌های HTTP برای اندروید است. این ابزار به شما اجازه می‌دهد REST APIها را به‌صورت کاملاً ساده، خوانا و ماژولار مدیریت کنید.

Retrofit یک سرویس گیرنده امن HTTP است که به شما اجازه می‌دهد تا REST API را به عنوان یک رابط تعریف کنید . شما می‌توانید درخواست API بدنه ، headers ، پارامترهای پرس و جو و موارد دیگر را با استفاده از annotations دستکاری کنید ، این امر باعث می شود همه چیز تمیز و ساده شود. همچنین Retrofit امکان اجرای فراخوانی API همزمان و ناهمزمان را می دهد.

قابلیت‌های مهم Retrofit

  • نوشتن API به صورت Interface
  • پشتیبانی از annotationهایی مثل
    @GET@POST@Header@Query
  • پشتیبانی از پاسخ‌های synchronous و asynchronous
  • سازگاری عالی با RxJava
  • پشتیبانی از JSON از طریق Moshi و Gson

نمونه کد

1
2
3
4
interface ApiService {
  @GET("movie/{id}")
  fun getMovieDetails(@Path("id") id: String): Call<MovieDetails>
}
retrofit در اندروید

 

2. Moshi – تبدیل JSON به Kotlin و Java

کتابخانه Moshi نسخهٔ مدرن‌تر و سبک‌تر Gson است. سرعت بالاتری دارد، از Kotlin به‌صورت کامل پشتیبانی می‌کند و خروجی‌های قابل پیش‌بینی‌تری تولید می‌کند.

Moshi کتابخانه‌ای است که JSON را به جاوا و Kotlin تبدیل می‌کند . بسیاری از مردم به Moshi به عنوان GSON 3.0 اشاره می‌کنند . این کتابخانه نسبت به GSON در چندین جنبه برتری دارد: سریعتر است ، از Kotlin پشتیبانی و آن را حفظ می کند، استثنائات قابل پیش بینی را به همراه می آورد و به طور پیش فرض از آداپتور DateTime منقضی استفاده نمی کند. علاوه بر این، تبدیل JSON به جاوا (و بالعکس) با Moshi ساده است.

نمونه کد تبدیل JSON

1
2
3
4
5
val moshi = Moshi.Builder().build()
val jsonAdapter = moshi.adapter(Model::class.java)
val model = jsonAdapter.fromJson(json)
val json = jsonAdapter.toJson(model)
moshi در اندروید

3. Chuck – نمایش درخواست‌ها و پاسخ‌های HTTP روی موبایل

کتابخانه Chuck یک ابزار عالی برای توسعه‌دهندگان است که تمامی درخواست‌های HTTP را در موبایل نمایش می‌دهد. حتی اگر برنامه بسته شود، تاریخچه حفظ می‌شود.

Chuck یک بازرس HTTP برای اندروید است که امکان می دهد تاریخچه HTTP برنامه خود را بر روی تلفن همراه ببینید. فایل HTTP به عنوان یک اعلان نمایش داده می‌شود ، که شما می‌توانید برای باز کردن رابط Chuck UI، آن را گسترش دهید . زمانی که از Chuck استفاده می‌کنید , تیم تضمین کیفیت شما را تحسین خواهد کرد در حالی که آن‌ها قادر خواهند بود ببینند، آیا یک مساله بر روی اندروید یا backend ادامه دارد یا خیر.

این کتابخانه گاهی از logcat نیز مفیدتر است . به این دلیل است که تاریخچه HTTP شما حتی اگر برنامه پایان پذیرد همچنان ادامه دارد ، در حالی که logcat پس از راه اندازی مجدد برنامه ، تاریخچه خود را پاک می کند.

این ابزار برای تیم QA فوق‌العاده است.
10 کتابخانه برتر اندرویدی که هر…

4. Glide – محبوب‌ترین کتابخانه مدیریت تصویر

کتابخانه Glide یکی از بهترین ابزارها برای بارگذاری و کش کردن تصاویر در اندروید است.

همانطور که می‌دانید ، بارگذاری تصویر در اندروید و مدیریت تصویر API بسیار وحشتناک است . این یک کابوس است که حتی اندازه تصویر را بدون گرفتن ” OutOfMemoryException ” تغییر داد. Glide یک کتابخانه بارگذاری تصویری است که API خوبی را در معرض نمایش قرار می دهد و به شما این امکان را می‌دهد که تصویر خود را هرچقدر که می خواهید تغییر دهید.

مزایا

  • جلوگیری از OutOfMemory
  • پشتیبانی از placeholder
  • پشتیبانی از تغییر اندازه تصویر
  • caching پیشرفته
  • بارگذاری سریع تصاویر

نمونه کد

1
2
3
4
5
GlideApp.with(context)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.ic_placeholder)
    .into(imageView)

5. ThreeTenABP – مدیریت تاریخ و زمان

این کتابخانه نسخهٔ اندرویدی JSR-310 از Java 8 است و جایگزینی برای Calendar سنتی اندروید محسوب می‌شود.

ThreeTen یک کتابخانه تاریخ و زمان برای اندروید است. این یک قانون از JSR-310 است ، که در جاوا 8 به عنوان یک بسته استاندارد ” java.time.*” درج شده است. ما این کتابخانه را دوست داریم زیرا استاندارد API تقویم اندروید کابوسی برای این کار است.

ThreeTen از لحاظ تعداد و اندازه باینری بسیار کوچک‌تر از JodaTime است . API آن نیز کوتاه تر نسبت به API JodaTime است. اگر در حال حاضر از JodaTime استفاده می‌کنید ، ارزش تعویض به ThreeTen را ندارد. با این حال ، اگر یک پروژه جدید را شروع می‌کنید ، توصیه می‌کنم که به جای آن ThreeTen را امتحان کنید .

نمونه کد

1
2
3
LocalDateTime.now()
val localDateTimeString = "2011-12-03T10:15:30"
LocalDateTime.parse(localDateTimeString)

6. Timber – حرفه‌ای‌ترین کتابخانه برای مدیریت Log در اندروید

کتابخانه Timber یکی از بهترین ابزارها برای مدیریت Logهاست. ساختار حرفه‌ای، ساده و استانداردی دارد.

Timber کتابخانه قدرتمند و در عین حال ساده است ، که در بالای کلاس ” Log” اندروید ساخته شده است و این امکان را به شما می دهد تا ورود به سیستم را به راحتی روشن یا خاموش کنید. هم چنین پشتیبانی خوبی را برای رشته‌ها و استثناها پیشنهاد می‌کند . به خاطر همه این مزایا ، Timber یکی از کتابخانه های اصلی است که تقریباً در تمام پروژه های Android خود استفاده می کنیم.

1
2
Timber.e("Error happened")
Timber.w("Your variable value is %s", variable)

7. Room – بهترین ORM رسمی اندروید

Room یکی از مهم‌ترین و قدرتمندترین کتابخانه‌های Jetpack برای کار با دیتابیس محلی در اندروید است. این کتابخانه درواقع یک لایهٔ abstraction بر روی SQLite می‌سازد و باعث می‌شود بدون نیاز به نوشتن کوئری‌های پیچیده، بتوانید به‌صورت کاملاً ساخت‌یافته با دیتابیس کار کنید.

Room سادگی ORMهای سبک را با قدرت بالای SQLite ترکیب می‌کند. این یعنی هم خوانایی و سرعت توسعه بالا می‌رود و هم امکان استفاده از کوئری‌های SQL واقعی را دارید.

 ویژگی‌های مهم Room

✔ ساختار بسیار ساده و قابل‌درک

برخلاف ORMهای قدیمی مانند ORMLite یا GreenDAO، کتابخانه Room API پیچیده ندارد و یادگیری آن سریع است. استفاده از annotationها مانند @Entity@Dao@Query باعث شده فرآیند توسعه دیتابیس شفاف و ساده باشد.

✔ پشتیبانی کامل از RxJava، LiveData و Flow

Room امکان اتصال مستقیم به جریان‌های داده را فراهم می‌کند.
به‌صورت انتخابی می‌توانید خروجی را این‌گونه دریافت کنید:

  • LiveData
  • RxJava2 (Flowable, Single, Maybe)
  • Kotlin Flow
  • List معمولی (suspend function)
✔ بررسی خطاها در زمان کامپایل

Room حتی کوئری‌های SQL شما را در زمان کامپایل بررسی می‌کند، بنابراین بسیاری از خطاهایی که در SQLite دیده می‌شود قبل از اجرا شناسایی می‌شوند.

✔ پشتیبانی از Migrations

برای تغییر ساختار دیتابیس نیازی به حذف آن نیست. Room از migrationهای حرفه‌ای پشتیبانی می‌کند.

✔ سرعت بالا و مصرف حافظه پایین

به دلیل استفاده مستقیم از SQLite و معماری Jetpack، عملکرد آن بسیار مناسب است.

 ساختار Room: سه بخش اصلی

Room از سه بخش محوری تشکیل شده است:

1) Entity

تعریف جدول‌ها در دیتابیس.

1
2
3
4
5
6
@Entity(tableName = "users")
data class User(
    @PrimaryKey(autoGenerate = true) val id: Int,
    val name: String,
    val age: Int
)
2) DAO (Data Access Object)

تمام عملیات دیتابیس از این بخش انجام می‌شود.

1
2
3
4
5
6
7
8
9
10
11
12
@Dao
interface UserDao {
    @Insert
    suspend fun insertUser(user: User)
    @Query("SELECT * FROM users")
    fun getAllUsers(): Flow<List<User>>
    @Delete
    suspend fun deleteUser(user: User)
}
3) Database

کلاسی که همهٔ Entityها و DAOها را مدیریت می‌کند.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
    companion object {
        @Volatile
        private var INSTANCE: AppDatabase? = null
        fun getInstance(context: Context): AppDatabase {
            return INSTANCE ?: synchronized(this) {
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    AppDatabase::class.java,
                    "sample_db"
                ).build()
                INSTANCE = instance
                instance
            }
        }
    }
}

 نحوه استفاده از Room در اکتیویتی یا ViewModel

مثال استفاده با Flow و ViewModel

1
2
3
4
5
6
7
8
9
10
class UserViewModel(private val userDao: UserDao) : ViewModel() {
    val users: Flow<List<User>> = userDao.getAllUsers()
    fun addUser(name: String, age: Int) {
        viewModelScope.launch {
            userDao.insertUser(User(0, name, age))
        }
    }
}

 چرا Room بهترین انتخاب برای دیتابیس در اندروید است؟

● سادگی یادگیری

ساختار آن مبتنی بر Kotlin و annotation است، بنابراین فهم آن برای برنامه‌نویس بسیار ساده‌تر از سایر ORMهاست.

Toast در اندروید
خواندن این مقاله
● سازگاری عالی با معماری MVVM

استفاده از LiveData، Flow و Rx آن را کاملاً سازگار با معماری مدرن می‌کند.

● کیفیت بالا به‌دلیل توسعه توسط گوگل

به دلیل اینکه بخشی از Jetpack است، در پروژه‌های حرفه‌ای گزینهٔ رسمی و پیش‌فرض محسوب می‌شود.

● امکان استفاده مستقیم از SQL

برخلاف ORMهای دیگر، Room اجازه می‌دهد کوئری‌های پیچیده SQL را همچنان بنویسید.

Room در اندروید

8. RxJava / RxAndroid – برنامه‌نویسی واکنش‌گرا

کتابخانه RxJava امکان مدیریت جریان داده‌ها، multithreading و عملیات پیچیده را بسیار آسان می‌کند.

RxJava یک کاربرد جاوا از  ReactiveX APIاست که به شما اجازه می‌دهد تا وظایف و رویداده‌ای غیر همزمان را به توالی‌ های قابل‌ مشاهده متصل کنید. کاربران انتظار دارند برنامه های مدرن، داده ها را در زمان واقعی نمایش دهند. به عبارت دیگر ، آن‌ها می‌خواهند به طور خودکار اطلاعات به روز را ببینند . این جایی است که RxJava می‌تواند به آن کمک کند.

هنگام بارگیری داده های بلادرنگ ، ادغام چندین فراخوانی API ، تغییر موضوعات و رسیدگی به خطاها بسیار دشوار می شود. اینجاست که RxJava می‌درخشد و به همین دلیل ما شروع به استفاده از این کتابخانه کرده‌ایم . اعتراف می‌کنم که RxJava گیج‌کننده و سخت است ، اما ارزش زمان شما را دارد . حتی بعد از اینکه ما به Kotlin رسیدیم ، به دلیل مزایای آن، به استفاده از RxJava ادامه دادیم . همراه با Kotlin ، API به دلیل توابع پسوند اضافی بهتر نیز هست.

این کتابخانه با Retrofit و Room سازگاری فوق‌العاده‌ای دارد.

9. Kotlin KTX – توسعه سریع‌تر با توابع Extension

کتابخانه KTX مجموعه‌ای از extension functions برای اندروید است که کدنویسی Kotlin را بسیار ساده‌تر می‌کند.

Android KTX دارای ویژگی های زیادی است و تنها راه برای یادگیری آن، جستجو در کد کتابخانه و دیدن API Android است. این کتابخانه روشی را که ما از API اندروید استفاده می‌کنیم تغییر می‌دهد و به همین دلیل باید به هر برنامه اندرویدی که در کاتلین نوشته می شود، تبدیل شود.

10. Picasso – بارگذاری تصاویر (نسخه قدیمی اما قابل استفاده)

Picasso یکی از قدیمی‌ترین و درعین‌حال محبوب‌ترین کتابخانه‌های مدیریت تصویر در اندروید است که توسط Square توسعه داده شد. قبل از اینکه Glide و Coil فراگیر شوند، Picasso تقریباً انتخاب اول توسعه‌دهندگان بود و هنوز هم در بسیاری از پروژه‌ها به‌خاطر سادگی و پایداری استفاده می‌شود.

Picasso با وجود قدیمی‌تر بودن نسبت به Glide، همچنان به‌عنوان یک ابزار سریع و سبک برای بارگذاری، کش کردن و نمایش تصاویر شناخته می‌شود و برای پروژه‌هایی که نیاز به قابلیت‌های پیچیده ندارند، انتخاب مناسبی است.

 ویژگی‌های مهم Picasso

 سادگی در استفاده

Picasso یکی از ساده‌ترین APIها را برای بارگذاری تصاویر دارد. یک خط کد کافی است تا تصویر از شبکه، حافظه یا فایل بارگذاری شود.

 مدیریت خودکار حافظه

Picasso برای جلوگیری از خطای OutOfMemory، به‌طور هوشمند تصاویر را کش و مدیریت می‌کند.

 پشتیبانی از Placeholder و Error Image

به سادگی می‌توان تصویر پیش‌فرض یا تصویر خطا تعیین کرد.

 قابلیت Resize و Transform

Picasso امکان تغییر اندازه، برش و اعمال Transformations روی تصاویر را فراهم می‌کند.

 کش قوی

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

 نمونه کد استفاده از Picasso

1
2
3
4
5
6
7
Picasso.get()
    .placeholder(R.drawable.ic_placeholder)
    .error(R.drawable.ic_error)
    .resize(400, 400)
    .centerCrop()
    .into(imageView)

 چه زمانی باید از Picasso استفاده کنیم؟

  • زمانی که پروژه سبک است و نیازی به قابلیت‌های پیشرفته Glide یا Coil ندارید
  • زمانی که سادگی و خوانایی کد برایتان اولویت دارد
  • زمانی که حجم کتابخانه مهم است و می‌خواهید برنامه سبک‌تر باشد

 مقایسه کلی Picasso با Glide و Coil

کتابخانه مزایا معایب
Picasso سبک، ساده، پایدار سرعت کمتر نسبت به Glide، امکانات پیشرفته کمتر
Glide سریع، بهینه، انیمیشن و GIF، کش قوی کمی سنگین‌تر
Coil سریع، مناسب Kotlin، بسیار مدرن پشتیبانی کمتر نسبت به Glide

 نتیجه‌گیری

کتابخانه‌ها یکی از مهم‌ترین ابزارها برای توسعه‌دهندگان اندروید هستند. داشتن تسلط بر مجموعه‌ای از کتابخانه‌های ضروری مثل:

  • Retrofit
  • Moshi
  • Glide
  • Room
  • RxJava
  • Timber

باعث می‌شود هم سرعت توسعه بیشتر شود و هم کیفیت نهایی اپلیکیشن افزایش یابد.

دیدگاهتان را بنویسید

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