Jetpack — τι είναι, εξαρτήματα αρχιτεκτονικής

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-05-01 Χρόνος ανάγνωσης: 9 λεπ

Jetpack — είναι ένα σύνολο βιβλιοθηκών Android από την Google που απλοποιούν την ανάπτυξη και επιταχύνουν τη δημιουργία σταθερών εφαρμογών. Εξαρτήματα όπως τα ViewModel, Room και Navigation λύνουν τυπικές εργασίες: διαχείριση κύκλου ζωής, αποθήκευση δεδομένων και πλοήγηση. Σύμφωνα με Android Developers (2026), το Jetpack καλύπτει περισσότερες από 50 βιβλιοθήκες, καθεμία από τις οποίες είναι συμβατή προς τα πίσω με Android 5.0 (API 21) μέσω του AndroidX — της βιβλιοθήκης συμβατότητας που αντικατέστησε το Support Library.

Κύρια Σημεία

  • Android Jetpack — ένα σύνολο 50+ βιβλιοθηκών που επιταχύνουν την ανάπτυξη εφαρμογών Android και παρέχουν συμβατότητα προς τα πίσω μέσω του AndroidX.
  • ViewModel επιζεί από περιστροφές οθόνης και διατηρεί δεδομένα κατά την αναδημιουργία Activity, αποτρέποντας την απώλεια εισαγωγής δεδομένων από τον χρήστη.
  • Room — ένα επίπεδο ORM πάνω από το SQLite με έλεγχο ερωτημάτων SQL κατά τη μεταγλώττιση και υποστήριξη coroutines.
  • Navigation Component διαχειρίζεται μεταβάσεις μεταξύ οθονών μέσω γράφων πλοήγησης με type-safe ορίσματα.
  • Lifecycle επιτρέπει την αντίδραση σε συμβάντα κύκλου ζωής Activity/Fragment χωρίς boilerplate κώδικα στους ελεγκτές.

Τι είναι το Android Jetpack;

Android Jetpack — είναι μια συλλογή βιβλιοθηκών, εργαλείων και αρχιτεκτονικών συστάσεων από την Google, που παρουσιάστηκε το 2018 στο Google I/O. Το Jetpack αντικατέστησε τα Support Library και Android Architecture Components, ενώνοντάς τα σε ένα ενιαίο οικοσύστημα. Πριν από το Jetpack, κάθε βιβλιοθήκη Android ενημερωνόταν ανεξάρτητα, προκαλώντας συγκρούσεις εκδόσεων. Το Jetpack συγχρόνισε τις εκδόσεις υπό ένα ενιαίο αναγνωριστικό AndroidX και εισήγαγε ένα μοντέλο σταθερών κύριων εκδόσεων με μικρότερες διορθώσεις.

Οι βιβλιοθήκες Jetpack χωρίζονται σε τέσσερις κατηγορίες: Architecture (ViewModel, Room, Navigation, WorkManager), UI (Fragment, Compose, Animation, Palette), Behavior (DownloadManager, Media, Permissions, Sharing), Foundation (Android KTX, Multidex, AppCompat). Κάθε κατηγορία λύνει εργασίες ενός συγκεκριμένου επιπέδου εφαρμογής — από τη διαχείριση δεδομένων έως τη διεπαφή χρήστη.

Φιλοσοφία του Jetpack

Η Google προωθεί τρεις αρχές του Jetpack: accelerate development (λιγότερος boilerplate κώδικας, περισσότερη επιχειρηματική λογική), eliminate boilerplate (το ViewModel εξαλείφει τη χειροκίνητη αποθήκευση κατάστασης, το Room — τη συγγραφή SQLiteOpenHelper) και build with confidence (κάθε βιβλιοθήκη περνά από 15+ χιλιάδες δοκιμές πριν από την κυκλοφορία). Σύμφωνα με το Android Developers (2026), οι εφαρμογές στο Jetpack έχουν 30% λιγότερες συντριβές που σχετίζονται με τον κύκλο ζωής.

Το AndroidX ως βάση

Όλες οι βιβλιοθήκες Jetpack διανέμονται υπό το αναγνωριστικό AndroidX (τεχνουργήματα της μορφής androidx.*). Το AndroidX αντικατέστησε το Support Library (τεχνουργήματα com.android.support.*), διαιρώντας τη μονολιθική βιβλιοθήκη σε αρθρωτά τεχνουργήματα με ανεξάρτητη έκδοση. Η μετεγκατάσταση στο AndroidX γίνεται μέσω της επιλογής android.useAndroidX=true στο gradle.properties — το Android Studio μετατρέπει αυτόματα τα imports.

Εξαρτήματα Αρχιτεκτονικής: ViewModel, Lifecycle, LiveData

ViewModel — το κεντρικό εξάρτημα της αρχιτεκτονικής Jetpack που αποθηκεύει δεδομένα UI. Σε αντίθεση με το Activity, το οποίο καταστρέφεται κατά την περιστροφή της οθόνης, το ViewModel παραμένει στη μνήμη. Ο χρήστης συμπληρώνει μια φόρμα, γυρίζει το τηλέφωνο — τα δεδομένα δεν χάνονται. Το ViewModel καθαρίζεται αυτόματα όταν το LifecycleOwner (Activity ή Fragment) ολοκληρώνει οριστικά τον κύκλο ζωής του (finish).

kotlin
class ProfileViewModel : ViewModel() {

    private val _userName = MutableLiveData<String>()
    val userName: LiveData<String> = _userName

    fun loadProfile(userId: String) {
        viewModelScope.launch {
            val user = repository.getUser(userId)
            _userName.value = user.name
        }
    }
}

@OptIn(ExperimentalLifecycleApi::class)
class MyObserver : LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onStart() {
        println("Η οθόνη ξεκίνησε")
    }
}

LiveData — ένα παρατηρήσιμο δοχείο για δεδομένα που λαμβάνει υπόψη τον κύκλο ζωής. Εάν η οθόνη δεν είναι ορατή (onStop), το LiveData δεν στέλνει ενημερώσεις — αυτό αποτρέπει διαρροές μνήμης και συντριβές κατά την προσπάθεια ενημέρωσης μιας ανύπαρκτης Activity. Lifecycle — μια κλάση που αποθηκεύει την τρέχουσα κατάσταση (CREATED, STARTED, RESUMED) και επιτρέπει σε άλλα εξαρτήματα να εγγραφούν σε αλλαγές κατάστασης. Μαζί, τα ViewModel, LiveData και Lifecycle αποτελούν το θεμέλιο της αντιδραστικής αρχιτεκτονικής Android.

ViewModelScope και coroutines

viewModelScope — ένα ενσωματωμένο CoroutineScope συνδεδεμένο με τον κύκλο ζωής του ViewModel. Όλα τα coroutines που ξεκινούν σε αυτό το scope ακυρώνονται αυτόματα κατά τον καθαρισμό του ViewModel. Αυτό εξαλείφει τη χειροκίνητη διαχείριση των Disposable και CompositeDisposable σε κάθε ViewModel. Για εργασία με το viewModelScope απαιτείται η εξάρτηση androidx.lifecycle:lifecycle-viewmodel-ktx.

Room: εργασία με βάση δεδομένων στο Android

Room — είναι μια βιβλιοθήκη ORM του Jetpack που παρέχει ένα αφηρημένο επίπεδο πάνω από το SQLite. Αντί να γράφετε ακατέργαστα ερωτήματα SQL και να μετατρέπετε χειροκίνητα το Cursor σε αντικείμενα, ο προγραμματιστής δηλώνει Entity (πίνακα), DAO (Data Access Object) και Database (σημείο εισόδου). Το Room ελέγχει τα ερωτήματα SQL κατά τη μεταγλώττιση μέσω του σχολιασμού @Query — εάν οι πίνακες ή οι στήλες δεν υπάρχουν, η δημιουργία αποτυγχάνει με ένα κατανοητό σφάλμα.

kotlin
@Entity
data class User(
    @PrimaryKey val id: String,
    val name: String,
    val email: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM User WHERE id = :userId")
    suspend fun getUser(userId: String): User?

    @Insert
    suspend fun insertUser(user: User)
}

@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

Το Entity User περιγράφει έναν πίνακα με τρεις στήλες. Το DAO δηλώνει συναρτήσεις suspend για εργασία με coroutines — το ερώτημα εκτελείται αυτόματα σε νήμα παρασκηνίου. Room υποστηρίζει μεταναστεύσεις μέσω του σχολιασμού @Migration: ο προγραμματιστής περιγράφει το σενάριο SQL μετάβασης μεταξύ εκδόσεων και το Room το εκτελεί χωρίς απώλεια δεδομένων. Ελλείψει μετανάστευσης, το Room ρίχνει IllegalStateException — έτσι τα έργα προστατεύονται από τυχαία απώλεια δεδομένων κατά την ενημέρωση του σχήματος.

TypeConverters και σχέσεις

Το Room αποθηκεύει μόνο πρωτόγονους τύπους και τα περιτυλίγματά τους. Για αποθήκευση λιστών, Date ή προσαρμοσμένων αντικειμένων χρησιμοποιείται @TypeConverter — μια στατική μέθοδος που μετατρέπει τον τύπο σε String (JSON) ή Long (timestamp). Οι σχέσεις μεταξύ πινάκων μοντελοποιούνται μέσω ένθετων αντικειμένων με σχολιασμό @Relation και βοηθητικών κλάσεων POJO με @Transaction για αποτελεσματικά ερωτήματα join.

Navigation Component — μια βιβλιοθήκη Jetpack για τη διαχείριση μεταβάσεων μεταξύ οθονών. Αντί για χειροκίνητη κλήση FragmentTransaction, ο προγραμματιστής δημιουργεί έναν γράφο πλοήγησης (αρχείο XML με κόμβους-προορισμούς) και το σύστημα παράγει την κλάση Directions με type-safe μεθόδους μετάβασης. Το Navigation Component εγγυάται τη σωστή λειτουργία των back stack, deep links και μεταφοράς ορισμάτων μεταξύ οθονών.

kotlin
// nav_graph.xml
// <fragment android:id="@+id/profileFragment"
//     android:name=".ProfileFragment">
//     <argument android:name="userId"
//         android:defaultValue="-1"
//         app:argType="integer" />
// </fragment>

// Στον κώδικα του fragment:
class ProfileFragment : Fragment() {
    private val args: ProfileFragmentArgs by navArgs()

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        loadProfile(args.userId)
    }
}

Τα ορίσματα userId μεταβιβάζονται στον γράφο πλοήγησης με καθορισμό τύπου (integer) και προεπιλεγμένης τιμής. Η κλάση ProfileFragmentArgs παράγεται αυτόματα από το πρόσθετο Navigation Safe Args — περιέχει όλα τα ορίσματα με τους σωστούς τύπους Kotlin. Βαθιοί σύνδεσμοι διαμορφώνονται στον γράφο: app:deepLink="app://profile/{userId}". Το Navigation Component αναλύει μόνο του το URL και δημιουργεί το back stack σαν ο χρήστης να είχε πλοηγηθεί μέσω της διεπαφής.

Bottom Navigation και Conditional Navigation

Το Navigation Component ενσωματώνεται με το BottomNavigationView μέσω του NavController: κάθε στοιχείο μενού συνδέεται με έναν προορισμό στον γράφο. Η μετάβαση μεταξύ καρτελών δεν αναδημιουργεί το fragment — το Navigation Component διατηρεί την κατάσταση μέσω του NavBackStackEntry. Για υπό συνθήκη πλοήγηση (εμφάνιση σύνδεσης εάν δεν είναι εξουσιοδοτημένος) χρησιμοποιείται navController.navigate(condition) με έλεγχο στο onCreate.

AndroidX: Support Library νέας γενιάς

AndroidX — είναι μια ανασχεδιασμένη αρχιτεκτονική του Support Library, στην οποία κάθε βιβλιοθήκη έλαβε το δικό της τεχνούργημα με ανεξάρτητη έκδοση. Αντί για ένα ενιαίο com.android.support:appcompat-v7:28.0.0, το AndroidX προσφέρει androidx.appcompat:appcompat:1.7.0, androidx.recyclerview:recyclerview:1.4.0 και ούτω καθεξής. Αυτό εξάλειψε το πρόβλημα όπου διαφορετικές εξαρτήσεις τραβούσαν διαφορετικές εκδόσεις του Support Library, προκαλώντας σύγκρουση.

Η μετεγκατάσταση στο AndroidX γίνεται αυτόματα στο Android Studio 3.2+ μέσω του μενού Refactor → Migrate to AndroidX. Το Studio αντικαθιστά όλα τα imports σε αρχεία Java/Kotlin, manifest και πόρους. Συμβατότητα προς τα πίσω — το κύριο πλεονέκτημα του AndroidX: οι βιβλιοθήκες λειτουργούν σε Android 5.0 (API 21) και άνω, καλύπτοντας το 97% των ενεργών συσκευών σύμφωνα με το Google Play Console (2025).

Κύρια τεχνουργήματα AndroidX

Τα πιο συχνά χρησιμοποιούμενα τεχνουργήματα: appcompat (σκοτεινό θέμα, Material Design σε παλιά API), recyclerview (προσαρμοστικές λίστες με ViewHolder), constraintlayout (ευέλικτο δοχείο με επίπεδη ιεραρχία), cardview (κάρτες Material Design), preference (οθόνη ρυθμίσεων σε στυλ Material). Κάθε τεχνούργημα έχει ανεξάρτητη έκδοση, επιταχύνοντας τη λήψη διορθώσεων χωρίς ενημέρωση ολόκληρου του πακέτου.

Άλλες σημαντικές βιβλιοθήκες Jetpack

Εκτός από τα Architecture και AndroidX, το Jetpack περιλαμβάνει πολλές εξειδικευμένες βιβλιοθήκες για τυπικές εργασίες ανάπτυξης κινητών. WorkManager — για εργασίες παρασκηνίου με εγγυημένη εκτέλεση (συγχρονισμός, φόρτωση αρχείων καταγραφής), υποστηρίζει περιοδικές και καθυστερημένες εργασίες, καθώς και περιορισμούς δικτύου και μπαταρίας. DataStore — αντικατάσταση του SharedPreferences βασισμένη σε coroutines, που υποστηρίζει τυποποιημένες ιδιότητες (Preferences DataStore) και Protocol Buffers (Proto DataStore).

  • Hilt — ένα πλαίσιο DI βασισμένο στο Dagger, που απλοποιεί την έγχυση εξαρτήσεων μέσω των σχολιασμών @HiltViewModel, @Inject, @Module. Ενσωματωμένη ενοποίηση με ViewModel και Navigation.
  • Paging 3 — βιβλιοθήκη για σελιδοποιημένη φόρτωση δεδομένων από δίκτυο/ΒΔ με υποστήριξη RemoteMediator (δίκτυο + cache), StateFlow και Compose.
  • CameraX — API για εργασία με κάμερα, που αφαιρεί τις διαφορές κατασκευαστών (Samsung, Xiaomi, Honor) μέσω μιας ενιαίας διεπαφής CameraController.
  • Security Crypto — κρυπτογράφηση δεδομένων μέσω EncryptedSharedPreferences και EncryptedFile βασισμένη σε AES-256 με κύριο κλειδί στο Android Keystore.

Κάθε βιβλιοθήκη έχει το δικό της ελάχιστο SDK και τεχνούργημα. Η Google κυκλοφορεί κύριες εκδόσεις μία φορά το χρόνο (συμπίπτοντας με την κυκλοφορία του Android) και ενημερώσεις ασφαλείας — ανά τρίμηνο. Σύσταση — συνδέστε μόνο τις απαραίτητες βιβλιοθήκες για να μην αυξήσετε το μέγεθος του APK. Το Jetpack συνολικά (όλα τα τεχνουργήματα) ζυγίζει πάνω από 20 MB, αλλά μια τυπική εφαρμογή χρησιμοποιεί 5-7 βιβλιοθήκες, προσθέτοντας 3-5 MB στο APK.

Συχνές Ερωτήσεις

Είναι απαραίτητη η μετεγκατάσταση από το Support Library στο AndroidX;

Ναι, η Google σταμάτησε την υποστήριξη του Support Library το 2019. Όλες οι νέες βιβλιοθήκες Jetpack και Google Play Services απαιτούν AndroidX. Η μετεγκατάσταση γίνεται σε 30-60 λεπτά μέσω του Android Studio.

Μπορεί να χρησιμοποιηθεί το Jetpack με Java ή μόνο με Kotlin;

Το Jetpack είναι πλήρως συμβατό με Java. Ωστόσο, πολλές λειτουργίες (viewModelScope, coroutines, Compose) είναι διαθέσιμες μόνο σε Kotlin. Η Google συνιστά Kotlin για νέα έργα.

Σε τι διαφέρει το ViewModel από το onSaveInstanceState;

ViewModel αποθηκεύει αντικείμενα στη μνήμη και επιζεί από περιστροφή. Το onSaveInstanceState είναι κατάλληλο μόνο για σειριοποιήσιμες πρωτόγονες τιμές (Bundle). Το ViewModel δεν διατηρείται κατά τη διακοπή της διεργασίας — για αυτό χρειάζεται το SavedStateHandle.

Πότε να χρησιμοποιείται το WorkManager αντί για coroutines;

WorkManager — για εργασίες που πρέπει να εκτελεστούν ακόμη και μετά το κλείσιμο της εφαρμογής: συγχρονισμός, φόρτωση αρχείων καταγραφής, αποστολή αναλυτικών στοιχείων. Coroutines — για εργασίες που συνδέονται με την οθόνη.

Πώς να κάνετε μετεγκατάσταση από SharedPreferences σε DataStore;

Αντικαταστήστε τα imports SharedPreferences με DataStore<Preferences>. Ανάγνωση μέσω dataStore.data.first() (suspend), εγγραφή μέσω dataStore.edit { ... }. Το DataStore είναι ασύγχρονο και προστατεύεται από ANR.

Περίληψη

  • Android Jetpack — ένα σύνολο 50+ βιβλιοθηκών για ανάπτυξη Android, ενοποιημένων υπό το AndroidX με συμβατότητα προς τα πίσω έως API 21.
  • ViewModel επιζεί από περιστροφές οθόνης και διατηρεί δεδομένα UI, και το Lifecycle ειδοποιεί τα εξαρτήματα για αλλαγή κατάστασης Activity/Fragment.
  • Room — type-safe ORM πάνω από το SQLite με έλεγχο ερωτημάτων κατά τη μεταγλώττιση, μεταναστεύσεις και υποστήριξη coroutines.
  • Navigation Component διαχειρίζεται μεταβάσεις μέσω γράφων με type-safe ορίσματα και αυτόματο deep link.
  • WorkManager εγγυάται την εκτέλεση εργασιών παρασκηνίου ακόμη και μετά το κλείσιμο της εφαρμογής, το DataStore αντικαθιστά το SharedPreferences.
  • Jetpack χωρίζεται σε τέσσερις κατηγορίες: Architecture, UI, Behavior, Foundation — κάθε μία καλύπτει το δικό της επίπεδο εφαρμογής.
  • Οι εφαρμογές στο Jetpack έχουν 30% λιγότερες συντριβές που σχετίζονται με τον κύκλο ζωής και αναπτύσσονται ταχύτερα χάρη σε έτοιμες αρχιτεκτονικές λύσεις.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης