Jetpack — είναι ένα σύνολο βιβλιοθηκών Android από την Google που απλοποιούν την ανάπτυξη και επιταχύνουν τη δημιουργία σταθερών εφαρμογών. Εξαρτήματα όπως τα ViewModel, Room και Navigation λύνουν τυπικές εργασίες: διαχείριση κύκλου ζωής, αποθήκευση δεδομένων και πλοήγηση. Σύμφωνα με Android Developers (2026), το Jetpack καλύπτει περισσότερες από 50 βιβλιοθήκες, καθεμία από τις οποίες είναι συμβατή προς τα πίσω με Android 5.0 (API 21) μέσω του AndroidX — της βιβλιοθήκης συμβατότητας που αντικατέστησε το Support Library.
Κύρια Σημεία
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). Κάθε κατηγορία λύνει εργασίες ενός συγκεκριμένου επιπέδου εφαρμογής — από τη διαχείριση δεδομένων έως τη διεπαφή χρήστη.
Η Google προωθεί τρεις αρχές του Jetpack: accelerate development (λιγότερος boilerplate κώδικας, περισσότερη επιχειρηματική λογική), eliminate boilerplate (το ViewModel εξαλείφει τη χειροκίνητη αποθήκευση κατάστασης, το Room — τη συγγραφή SQLiteOpenHelper) και build with confidence (κάθε βιβλιοθήκη περνά από 15+ χιλιάδες δοκιμές πριν από την κυκλοφορία). Σύμφωνα με το Android Developers (2026), οι εφαρμογές στο Jetpack έχουν 30% λιγότερες συντριβές που σχετίζονται με τον κύκλο ζωής.
Όλες οι βιβλιοθήκες Jetpack διανέμονται υπό το αναγνωριστικό AndroidX (τεχνουργήματα της μορφής androidx.*). Το AndroidX αντικατέστησε το Support Library (τεχνουργήματα com.android.support.*), διαιρώντας τη μονολιθική βιβλιοθήκη σε αρθρωτά τεχνουργήματα με ανεξάρτητη έκδοση. Η μετεγκατάσταση στο AndroidX γίνεται μέσω της επιλογής android.useAndroidX=true στο gradle.properties — το Android Studio μετατρέπει αυτόματα τα imports.
ViewModel — το κεντρικό εξάρτημα της αρχιτεκτονικής Jetpack που αποθηκεύει δεδομένα UI. Σε αντίθεση με το Activity, το οποίο καταστρέφεται κατά την περιστροφή της οθόνης, το ViewModel παραμένει στη μνήμη. Ο χρήστης συμπληρώνει μια φόρμα, γυρίζει το τηλέφωνο — τα δεδομένα δεν χάνονται. Το ViewModel καθαρίζεται αυτόματα όταν το LifecycleOwner (Activity ή Fragment) ολοκληρώνει οριστικά τον κύκλο ζωής του (finish).
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 — ένα ενσωματωμένο CoroutineScope συνδεδεμένο με τον κύκλο ζωής του ViewModel. Όλα τα coroutines που ξεκινούν σε αυτό το scope ακυρώνονται αυτόματα κατά τον καθαρισμό του ViewModel. Αυτό εξαλείφει τη χειροκίνητη διαχείριση των Disposable και CompositeDisposable σε κάθε ViewModel. Για εργασία με το viewModelScope απαιτείται η εξάρτηση androidx.lifecycle:lifecycle-viewmodel-ktx.
Room — είναι μια βιβλιοθήκη ORM του Jetpack που παρέχει ένα αφηρημένο επίπεδο πάνω από το SQLite. Αντί να γράφετε ακατέργαστα ερωτήματα SQL και να μετατρέπετε χειροκίνητα το Cursor σε αντικείμενα, ο προγραμματιστής δηλώνει Entity (πίνακα), DAO (Data Access Object) και Database (σημείο εισόδου). Το Room ελέγχει τα ερωτήματα SQL κατά τη μεταγλώττιση μέσω του σχολιασμού @Query — εάν οι πίνακες ή οι στήλες δεν υπάρχουν, η δημιουργία αποτυγχάνει με ένα κατανοητό σφάλμα.
@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 — έτσι τα έργα προστατεύονται από τυχαία απώλεια δεδομένων κατά την ενημέρωση του σχήματος.
Το 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 και μεταφοράς ορισμάτων μεταξύ οθονών.
// 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 σαν ο χρήστης να είχε πλοηγηθεί μέσω της διεπαφής.
Το Navigation Component ενσωματώνεται με το BottomNavigationView μέσω του NavController: κάθε στοιχείο μενού συνδέεται με έναν προορισμό στον γράφο. Η μετάβαση μεταξύ καρτελών δεν αναδημιουργεί το fragment — το Navigation Component διατηρεί την κατάσταση μέσω του NavBackStackEntry. Για υπό συνθήκη πλοήγηση (εμφάνιση σύνδεσης εάν δεν είναι εξουσιοδοτημένος) χρησιμοποιείται navController.navigate(condition) με έλεγχο στο onCreate.
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).
Τα πιο συχνά χρησιμοποιούμενα τεχνουργήματα: appcompat (σκοτεινό θέμα, Material Design σε παλιά API), recyclerview (προσαρμοστικές λίστες με ViewHolder), constraintlayout (ευέλικτο δοχείο με επίπεδη ιεραρχία), cardview (κάρτες Material Design), preference (οθόνη ρυθμίσεων σε στυλ Material). Κάθε τεχνούργημα έχει ανεξάρτητη έκδοση, επιταχύνοντας τη λήψη διορθώσεων χωρίς ενημέρωση ολόκληρου του πακέτου.
Εκτός από τα Architecture και AndroidX, το Jetpack περιλαμβάνει πολλές εξειδικευμένες βιβλιοθήκες για τυπικές εργασίες ανάπτυξης κινητών. WorkManager — για εργασίες παρασκηνίου με εγγυημένη εκτέλεση (συγχρονισμός, φόρτωση αρχείων καταγραφής), υποστηρίζει περιοδικές και καθυστερημένες εργασίες, καθώς και περιορισμούς δικτύου και μπαταρίας. DataStore — αντικατάσταση του SharedPreferences βασισμένη σε coroutines, που υποστηρίζει τυποποιημένες ιδιότητες (Preferences DataStore) και Protocol Buffers (Proto DataStore).
Κάθε βιβλιοθήκη έχει το δικό της ελάχιστο SDK και τεχνούργημα. Η Google κυκλοφορεί κύριες εκδόσεις μία φορά το χρόνο (συμπίπτοντας με την κυκλοφορία του Android) και ενημερώσεις ασφαλείας — ανά τρίμηνο. Σύσταση — συνδέστε μόνο τις απαραίτητες βιβλιοθήκες για να μην αυξήσετε το μέγεθος του APK. Το Jetpack συνολικά (όλα τα τεχνουργήματα) ζυγίζει πάνω από 20 MB, αλλά μια τυπική εφαρμογή χρησιμοποιεί 5-7 βιβλιοθήκες, προσθέτοντας 3-5 MB στο APK.
Συχνές Ερωτήσεις
Ναι, η Google σταμάτησε την υποστήριξη του Support Library το 2019. Όλες οι νέες βιβλιοθήκες Jetpack και Google Play Services απαιτούν AndroidX. Η μετεγκατάσταση γίνεται σε 30-60 λεπτά μέσω του Android Studio.
Το Jetpack είναι πλήρως συμβατό με Java. Ωστόσο, πολλές λειτουργίες (viewModelScope, coroutines, Compose) είναι διαθέσιμες μόνο σε Kotlin. Η Google συνιστά Kotlin για νέα έργα.
ViewModel αποθηκεύει αντικείμενα στη μνήμη και επιζεί από περιστροφή. Το onSaveInstanceState είναι κατάλληλο μόνο για σειριοποιήσιμες πρωτόγονες τιμές (Bundle). Το ViewModel δεν διατηρείται κατά τη διακοπή της διεργασίας — για αυτό χρειάζεται το SavedStateHandle.
WorkManager — για εργασίες που πρέπει να εκτελεστούν ακόμη και μετά το κλείσιμο της εφαρμογής: συγχρονισμός, φόρτωση αρχείων καταγραφής, αποστολή αναλυτικών στοιχείων. Coroutines — για εργασίες που συνδέονται με την οθόνη.
Αντικαταστήστε τα imports SharedPreferences με DataStore<Preferences>. Ανάγνωση μέσω dataStore.data.first() (suspend), εγγραφή μέσω dataStore.edit { ... }. Το DataStore είναι ασύγχρονο και προστατεύεται από ANR.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης