شاید قبلا در مورد کتابخانههای برتر اندرویدی مقالاتی را خوانده و یا چیزهایی را شنیده باشید. با این حال ممکن است از آن زمان پلتفرم اندروید تغییرات زیادی را داشته باشد. همانطور که میدانید در زمینه پرسرعت توسعه نرمافزار همه چیز با سرعت رعد برق تغییر میکند و تکامل مییابد. به همین دلیل تصمیم گرفتیم لیستی بروز از کتابخانههای اندرویدی را ارائه دهیم.
بدون اطلاعات بیشتر، بیاید مستقم به سراغ لیست برویم. ما با یکی از قدیمیترینها شروع خواهیم کرد و فکر میکنم که یکی از مفیدترینها هم است.
1- Retrofit
رتروفیت یک کلاینت Http مطمئن است که به اشما این امکان را میدهد که Rest Api خود را بهعنوان واسط تعریف کنید. شما میتوانید بدنه، هدر، پارامترهای کوئری و موارد دیگر درخواست خود را با حاشیهگذاری دستکاری کنید، که همه چیز را تمیز و ساده میکند همچنین اجازه اجرای Api به صورت همزمان و ناهمزمان را میدهد.
interface ApiService {
@GET("movie/{id}")
fun getMovieDetails(@Path("id") id: String) : Call<MovieDetails>
}
رتروفیت یک ماژول جداگانه Rx ارائه میدهد، اگر از Rx در برنامه خود استفاده میکنید، این ماژول هنگام فراخوانی API یک Observable برمیگرداند که میتوانید آن را به بقیه برنامه خود متصل کنید. اینها فقط برخی از دلایلی هستند که ما هنوز رتروفیت را دوست داریم و از آن استفاده میکنیم.
2- Moshi
Moshi کتابخانهای است که JSON را به مدلهای جاوا و کاتلین تبدیل میکند. بسیاری از افراد از Moshi بهعنوان GSON 3.0 یاد میکنند. این کتابخانه از جنبههای مختلف نسبت به GSON برتری دارد: سریعتر است، از کاتلین پشتیبانی میکند، exceptionهای قابل پیشبینی را throw میکند و بهطور پیشفرض از آداپتور DateTime شکسته استفاده نمیکند. بهعلاوه تبدیل JSON به مدل جاوا و برعکس با Moshi ساده است.
val moshi = Moshi.Builder().build()
val jsonAdapter = moshi.adapter(Model::class.java)
/* JSON to Model */
val model = jsonAdapter.fromJson(json)
/* Model to JSON */
val json = jsonAdapter.toJson(model)
ما همچنین Moshi را به خاطر پشتیبانی از JSON API میپسندیم. JSON API مخصوص ساختن API است، همچنین بسیاری از APiهایی که با آنها کار میکنیم با استفاده از آن نوشته شدهاند. Moshi JSON API زندگی مار ا آسانتر میکند زیرا پاسخ JSON API را به شیء جاوا با معنی تبدیل میکند.
3- Chuck
Chuck یک بازرس Http اندروید است، که به شما این امکان را میدهد که تاریخچه Http برنامه خود را بر روی تلفنهمراه ببینید. Http log را بهصورت اعلان نمایش میدهد، که میتوانید آن را برای مشاهده UI کامل chuck باز کنید. هنگامی که از chuck استفاده میکنید تیم تضمین کیفیت، شما را تحسین میکنند، زیرا میتوانند ببینند که آیا مشکل در سمت اندروید است یا سمت backend. این کتابخانه گاهیاوقات از logcat مفیدتر است. دلیل آن هم این است که تاریخچه Http حتی اگر برنامه از بین برود هم ادامه دارد، درحالیکه lgcat گاهیاوقات پس از راهاندازی مجدد برنامه تاریخچه را پاک میکند.
4- Glide
همانطور که احتمالا تاکنون میدانید، بارگذاری تصویر و مدیریت API آن بسیار وحشتناک است. این یک کابوس است که بدون گرفتن "OutOfMemoryException" اندازه یک تصویر را تغییر دهیم. Glide یک کتابخانه بارگذاری تصویر است که یک یک Api بسیار خوب دارد، و به شما امکان میدهد که تصویر خود را هرچقدر میخواهید تغییر دهید.
GlideApp.with(context)
.load(url)
.centerCrop()
.placeholder(R.drawable.ic_placeholder)
.into(imageView)
5- ThreeTen
این یک کتابخانه تاریخ و زمان برای اندروید است. که از JSR-310 پشتیبانی میکند، که در جاوا 8 بهعنوان پکیج java.time استاندارد ارائه شده است. ما این کتابخانه را دوست داریم، زیرا استفاده از Api تقویم اندروید یک کابوس است.
/* Current DateTime */
LocalDateTime.now()
/* String to DateTime */
val localDateTimeString = "2011-12-03T10:15:30"
val localDateTime = LocalDateTime.parse(localDateTimeString)
ThreeTen بسیار کوچکتر از JodaTime از نظر تعداد متد و اندازه باینری است. Api آن نیز مختصرتر از JodaTime است. اگر در حال حاضر از JodaTime استفاده میکنید، احتمالا ارزش ندارد که آنرا به ThreeTen تغییر دهید. با این حال اگر شما در حال شروع یک پروژه جدید هستید من به شدت پیشنهاد میکنم که ThreeTen را امتحان کنید.
6- Timber
Timber یک کتابخانه برای Log زدن که بسیار قدرتمند و در عین حال ساده است، که در بالای کلاس Log اندروید ساخته شده است. که به شما این امکان را میدهد به آسانی log را خاموش یا روشن کنید. همچنین پشتیبانی خوبی را برای فرمت Stringها و exceptionها را ارائه میدهد. به دلیل همه این مزایا است که timber را بهعنوان کتابخانه اصلی، تقریبا در تمام پروژههای خود استفاده میکنیم.
/* Log error */
Timber.e("Error happened")
/* Log warning with params */
Timber.w("Your variable value is %s", variable)
/* Log exception */
try {
...
} catch (e: Exception) {
Timber.e(e)
}
7- Room
Room یک ORM رسمی اندروید است، و دلایل زیادی برای آن وجود دارد. این کتابخانه دارای یک API بسیار زیبا، مشابه رتروفیت است. همچنین به حاشیه نویسیها و استاندارد SQL متکی است.
@Dao
interface MovieDao {
@Query("SELECT details FROM movies WHERE id = :id")
fun getMovieDetails(id: String): MovieDetails
}
علاوه بر این، room از RX و LiveData پشتیبانی میکند، بنابراین میتوانید هر طور که میخواهید از آن استفاده کنید. مزیت اصلی room نسبت به سایر ORMها سادگی آن است. سایر ORMها دارای API بسیار پیچیدهتری هستند که شما را مجبور میکنند قبل از استفاده از آنها تمام اسناد آن را بخوانید. به دلیل استاندارد SQL این کتابخانه، درک room بسیار ساده است، و به شما اجازه میدهد که به جای صرف ساعتها خواندن اسناد آن به سادگی وارد آن شوید.
8- RxJava
RxJava یک پیادهسازی جاوا از API، ReactiveX است که به شما این امکان را میدهد تا کارهای ناهمزمان را به ترتیبی از Observableها متصل کنید. کاربران انتظار دارند برنامههای مدرن دادهها را در زمان واقعی نمایش دهند. بهعبارت دیگر، آنها میخواهند دادهها را به صورت خودکار بروزرسانی کنند. این جایی است که RxJava میتواند کمک کنید.
هنگام دریافت دادهها در زمان واقعی، بسیار دشوار است که چندین API را ادغام کنیم، threadها را عوض کنیم و خطاها را کنترل کنیم. این جا است که RxJava میدرخشد و بههمین دلیل است که ما شروع به استفاده از این کتابخانه کردیم. اعتراف میکنم که RxJava گیجکننده است و یادگیری آن سخت است، اما ارزش وقت شما را دارد. حتی بعد از رفتن از جاوا به کاتلین استفاده از RxJava را به دلیل مزایای آن ادامه دادیم. همراه با کاتلین API آن به دلیل توابع extention بهتر نیز میشود.
Single.zip(
/* Execute first API call and retry twice if it fails */
apiService.getMovieActors(id).retry(2),
/* Execute second API call and retry twice if it fails */
apiService.getMovieDetails(id).retry(2),
/* Receive successful results and merge them into single model */
BiFunction<List<Actor>, MovieDetails, Movie> { actors, details -> Movie(details, actors) }
)
/* Execute API calls on IO thread */
.subscribeOn(Schedulers.io())
/* Receive results on MainThread */
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(
onError = { /* Handle error */ },
onSuccess = { /* Handle full movie data */ }
)
سعی کنید چیزی ساده مشابه موارد فوق را با جاوا انجام دهید.
9- AndroidKTX
AndroidKTX مجموعهای از extentionهای کاتلین است که API اندروید را بستهبندی و آن را کاربرپسندتر میکند. هدف اصلی این کتابخانه این است که استفاده از API اندروید را لذتبخشتر کند. این کتابخانه متدها و ویژگیهای جدید کاتلین را اضافه میکند، مانند نامگذاری پارامترها، لامبدا و مقادیر پیشفرض پارامترها.
/* Display View */
view.isVisible = true
/* Apply padding to all sides */
view.setPadding(padding)
/* Update padding on any side */
view.updatePadding(left = newPadding, right = newPadding)
/* Quick Toast */
toast("Display test toast")
/* New way to create bundle */
bundleOf {
"key1" to item1
"key2" to item2
}
/* Better way to use SharedPreferences */
sharedPreferences.edit {
putString("key1", "value1")
putString("key2", "value2")
}
AndroidKTX دارای توابع extention زیادی است و تنها راه برای یادگیری در مورد آن، بررسی کد کتابخانهها برای فهمیدن نحوه بهبود APIهای اندروید است. این کتابخانه روش استفاده از API اندروید را تغییر میدهد و به همین دلیل باید به هسته اصلی هر برنامه اندروید که با کاتلین نوشته شده است تبدیل شود.
10- Dagger
بدون dagger لیست 10 کتابخانه برتر ما ناقص خواهد بود. Dagger یک کتابخانه تزریق وابستگی ثابت و در زمان کامپایل است. همانند RxJava درک این کتابخانه هم دشوار است، اما کاملا ارزش وقت و تلاش شما را دارد.
تزریق وابستگی راهی است برای تهیه اجزای کوچکتر به مدلهای دیگر و چسباندن آنها با حداقل تلاش. بهعنوان مثال اگر یک مدل به نام Car دارید، میتوانید تایرهای لازم برای آن را تهیه کنید و به راحتی عملکرد تایرها را در آینده جایگزین کنید. همه این کارها بدون تغییر یک خط کد در مدل Car است.
هنگام توسعه برنامههای بزرگتر شما نمیخواهید تزریق وابستگی را خودتان انجام دهید، زیرا کد به سرعت رشد میکند و نگهداری آن بسیار دشوار میشود. Dagger به شما کمک میکند تا از این امر جلوگیری کنید، زیرا نمودار تزریق وابستگی را در زمان کامپایل از طریق پردازش حاشیه نویسها ایجاد میکند.
در سال گذشته، گوگل همچنین یک ماژول جداگانه dagger ارائه داد که این امکان را میدهد که کدهای تکراری کمتری بنویسید و وابستگیها را راحتتر تزریق کنید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید