"Bağlamaq" tərtibatçılar arasında mövcud layihəyə yeni funksionallıq əlavə etmək, qoşmaq və ya inteqrasiya etmək deməkdir. Termin geniş spektrli hərəkətləri təsvir etmək üçün istifadə olunur: üçüncü tərəf kitabxanasını qoşmaqdan tutmuş yeni istifadəçi interfeysi əlavə etməyə qədər. Android Developers məlumatlarına görə, müasir layihələrin əksəriyyəti asılılıq menecerlərindən istifadə edir ki, bu da kitabxanaların "bağlanması" prosesini standart və proqnozlaşdırıla bilən edir. Yeni komponentin inteqrasiyası layihə arxitekturasını və versiya uyğunluğunu başa düşməyi tələb edir.
Əsas məqamlar
Bağlamaq — mövcud sistemə yeni funksional blokun birləşdirilməsi mənasını verən bir metaforadır. "Əlavə etmək" sözündən fərqli olaraq, "bağlamaq" komponentin sıfırdan cari arxitektura üçün planlaşdırılmadığını, xarici həll kimi inteqrasiya edildiyini nəzərdə tutur. Bu, kitabxana, framework, API müştərisi və ya hazır UI elementi ola bilər.
Tərtibatçılar komponentləri bir neçə səbəbdən "bağlayırlar": təkəri yenidən icad etməmək, inkişafı sürətləndirmək və ya komandanın özbaşına həyata keçirə bilmədiyi funksionallığı əlavə etmək. Asılılıqların idarə edilməsi ilə iş o qədər standartlaşıb ki, "kitabxananı bağlamaq" dəqiqələr çəkir, günlər yox. Lakin səhv inteqrasiya versiya münaqişələrinə, tətbiq ölçüsünün artmasına və təhlükəsizlik problemlərinə səbəb ola bilər.
Termin universaldır və istənilən platformaya aiddir: iOS, Android, Web. iOS-da CocoaPods və SPM asılılıq menecerləri, Android-də Gradle, Web-də npm-dir. Bağlama prosesi bir neçə addımı əhatə edir: komponent seçimi, uyğunluğun yoxlanması, menecer vasitəsilə qoşulma, konfiqurasiya və test etmə.
Asılılıq menecerləri — xarici kitabxanaların layihəyə qoşulmasını avtomatlaşdıran alətlər. Onlar üç vəzifəni həll edir: kitabxana kodunun yüklənməsi, keçid asılılıqlarının həlli və versiyaların idarə edilməsi. Menecer olmadan tərtibatçı faylları əl ilə endirməli, layihəyə köçürməli və yeniləmələri izləməli olardı.
Hər platforma öz menecerindən istifadə edir: iOS — Swift Package Manager (SPM) və ya CocoaPods, Android — Maven Central ilə Gradle, Flutter — pub.dev. İş prinsipi eynidir: konfiqurasiya faylında paket adını və versiyanı göstərirsiniz, menecer asılılıqları endirir və qurulmanı konfiqurasiya edir.
Retrofit — Android üçün HTTP müştərisi əlavə edək. Modul səviyyəsindəki build.gradle faylına asılılıq əlavə etmək, layihəni sinxronizasiya etmək lazımdır və kitabxana istifadəyə hazırdır. Gradle avtomatik olaraq Retrofit-in özünü və onun keçid asılılıqlarını: OkHttp, Gson konvertorunu endirəcək.
dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.11.0'
}
iOS layihələrində Swift Package Manager vasitəsilə kitabxana Xcode-dan əlavə olunur: File → Add Packages. Alternativ olaraq — Package.swift vasitəsilə. Şəbəkə ilə işləmək üçün məşhur kitabxana olan Alamofire üçün repository URL-i və versiyanı göstərmək kifayətdir. SPM özü mənbə kodlarını endirib qurulmaya əlavə edəcək.
// Package.swift
let package = Package(
name: "MyApp",
dependencies: [
.package(url: "https://github.com/Alamofire/Alamofire.git",
from: "5.9.0")
]
)
API inteqrasiyası — mobil inkişafda "bağlama" nın ən geniş yayılmış ssenarilərindən biridir. Demək olar ki, hər tətbiq serverlə qarşılıqlı əlaqədə olur: məlumat göndərir, məzmun alır, istifadəçiləri doğrulayır. API-ni bağlamaq müştəri və server arasında şəbəkə əlaqəsini qurmaq, cavabları və xətaları idarə etmək deməkdir.
Proses üç mərhələni əhatə edir: HTTP müştərisinin seçilməsi, endpointlərin konfiqurasiyası və cavabların idarə edilməsi. Retrofit (Android) və Alamofire (iOS) kimi müasir müştərilər sorğuları təsvir etmək üçün deklarativ API və cavabların avtomatik serializasiyasını təmin edir. Müştərini bağladıqdan sonra tərtibatçı xam JSON sətirləri ilə deyil, tipləşdirilmiş məlumat modelləri ilə işləyir.
// API interfeysini Retrofit ilə təyin edin
interface GithubApi {
@GET("users/{username}/repos")
suspend fun getRepos(
@Path("username") username: String
): List<Repo>
}
İnterfeysi təsvir etdikdən sonra Retrofit-in nüsxəsini yaratmaq, əsas URL-i ötürmək və loglama, autentifikasiya və xəta idarəsi üçün interceptorlar əlavə etmək qalır. Sonra müştəri nüsxəsi repository və ya ViewModel-ə yeridilir. API bağlaması, tətbiq sorğunu uğurla göndərdikdə və cavabı düzgün idarə etdikdə tamamlanmış sayılır.
UI komponentləri hazır kitabxanalardan — "bağlama" nın digər bir geniş yayılmış obyektidir. Xüsusi elementi sıfırdan çəkmək əvəzinə, tərtibatçı hazır idarəetmələrlə kitabxana qoşur: kartlar, düymələr, daxiletmə sahələri, naviqasiya menyuları. Bu, inkişafı sürətləndirir və interfeysin vahidliyini təmin edir.
Android-də bunun üçün Material Components — Google-dan Material Design-ı tətbiq edən kitabxana istifadə olunur. iOS-da — standart UIKit və ya SnapKit kimi üçüncü tərəf kitabxanaları. Flutter-də bütün UI vidjetlərdir və yeni komponent bağlamaq çox vaxt onu vidjet ağacına əlavə etmək və parametrləri konfiqurasiya etmək deməkdir.
SnapKit — DSL vasitəsilə Auto Layout üçün kitabxanadır. SPM vasitəsilə əlavə etdikdən sonra constraintləri Interface Builder olmadan deklarativ şəkildə təsvir edə bilərsiniz. Bu, düzəni sürətləndirir və kodu daha oxunaqlı edir. SnapKit-i bağlamaq — beş dəqiqəlik işdir, bundan sonra bütün layihə vahid düzən stilindən istifadə edir.
import SnapKit
let button = UIButton()
view.addSubview(button)
button.snp.makeConstraints { make in
make.center.equalTo(superview)
make.width.equalTo(200)
make.height.equalTo(48)
}
Hər hansı komponenti bağlamazdan əvvəl üç parametri yoxlayın: hədəf platforma versiyası, lisenziya və dəstək dinamikası. İki ildir yenilənməyən kitabxana aşkar edilməmiş zəifliklər ehtiva edə bilər. Köhnəlmiş API yeni SDK versiyası ilə kompilyasiya olunmaya bilər. Lisenziya kommersiya istifadəsini qadağan edə bilər.
Hətta sadə "kitabxananı bağlamaq" əməliyyatı saatlarla debug etməyə çevrilə bilər. Asılılıqların inteqrasiyası zamanı tərtibatçıların qarşılaşdığı dörd tipik problemi və onların həlli yollarını nəzərdən keçirək.
İki kitabxana eyni paketin müxtəlif versiyalarını tələb edə bilər. Android-də Gradle ConflictException atır, Swift Package Manager isə münaqişəni avtomatik həll etməyə çalışır, lakin həmişə uğurla nəticələnmir. Həll — force-version istifadə etmək və ya keçid asılılığını exclude vasitəsilə istisna etmək. Bəzən alternativ kitabxana tapmaq daha asandır.
implementation('com.example:library-a:2.0.0') {
exclude group: 'com.example', module: 'conflicting-lib'
}
Bir neçə böyük kitabxana əlavə edildikdə metod sayı 65K limitini keçə bilər. Android build.gradle-da multidex işə salınmasını və MultidexApplication əlavə edilməsini tələb edir. Bu olmadan tətbiq işə düşərkən "Cannot fit requested classes in a single dex file" xətası ilə çökəcək.
Bəzi yerli kitabxanalar yalnız fiziki cihazlar üçün imzalanmış kod ehtiva edir. iOS-da bu, simulyator üçün arm64 arxitekturası olan kitabxanaları qoşduqda özünü göstərir. Həll — simulyator arxitekturasını fat-framework-dən istisna etmək və ya .xcframework dəstəyi olan versiyanı gözləmək.
Hər bağlanmış kitabxana qurulma vaxtını artırır. Kotlin üçün annotasiya prosessoru olan KAPT — Gradle-i xüsusilə nəzərəçarpacaq dərəcədə yavaşladır. Həll — KAPT əvəzinə KSP istifadə etmək, dinamik feç-modulların sayını minimuma endirmək və asılılıqları keşləmək. İlk kitabxananı bağladıqdan sonra qurulma vaxtını baseline olaraq ölçün.
Tez-tez verilən suallar
Bağlamaq — mövcud layihəyə yeni funksionallıq əlavə etmək, kitabxana, API və ya UI komponenti qoşmaq. Termin qeyri-formaldır, rusdilli tərtibatçı mühitində geniş yayılmışdır.
iOS — SPM və CocoaPods. Android — Gradle. Flutter — pub.dev. Web — npm, yarn. Bütün menecerlərin iş prinsipi oxşardır: konfiqurasiya → yükləmə → qurma.
Lisenziyanı, SDK versiyasını, dəstək aktivliyini, ölçüsünü və keçid asılılıqlarını yoxlayın. Asılılıqları təhlil etmək və lisenziya uyğunluğunu yoxlamaq üçün deps.dev kimi saytlardan istifadə edin.
Gradle-də force resolve və ya exclude istifadə edin, hər iki kitabxananı son versiyalara yeniləyin və ya alternativ tapın. SPM-də hansı keçid asılılığının münaqişəyə səbəb olduğunu yoxlayın.
Minification (Android-də ProGuard/R8, iOS-da stripping) istifadə edin, kitabxanaların istifadə olunmayan resurslarını silin, kitabxana modul arxitekturasını dəstəkləyirsə yalnız lazımi modulları qoşun.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun