APK (Android Package Kit) είναι μια μορφή αρχείου που χρησιμοποιείται για τη διανομή και εγκατάσταση εφαρμογών σε Android. Κάθε εφαρμογή που ο χρήστης κατεβάζει από το Google Play ή εγκαθιστά χειροκίνητα είναι ένα αρχείο APK. Σύμφωνα με το Android Open Source Project, 2026, η μορφή βασίζεται στο πρότυπο ZIP και περιέχει μεταγλωττισμένο κώδικα, πόρους, δήλωση και ψηφιακή υπογραφή.
Κύρια σημεία
APK (Android Package Kit) είναι μια μορφή αρχείου στην οποία συσκευάζεται η εφαρμογή Android για διανομή. Τεχνικά, το APK είναι ένα αρχείο ZIP με συγκεκριμένη δομή που περιέχει όλα τα απαραίτητα στοιχεία για τη λειτουργία της εφαρμογής στη συσκευή.
Η μορφή APK εμφανίστηκε μαζί με την πρώτη έκδοση του Android το 2008. Ως βάση λήφθηκε το πρότυπο JAR (Java Archive), το οποίο με τη σειρά του βασίζεται στο ZIP. Αυτή η κληρονομιά εξασφάλισε συμβατότητα με τα υπάρχοντα εργαλεία αρχειοθέτησης — οποιοδήποτε αρχειοθέτηση ανοίγει το APK ως συνηθισμένο ZIP.
Google Play — το κύριο κανάλι διανομής APK, αλλά η μορφή χρησιμοποιείται και σε άλλα σενάρια: άμεση εγκατάσταση μέσω προγράμματος περιήγησης (sideloading), εταιρικά καταστήματα εφαρμογών, δοκιμή σε συσκευές προγραμματιστών και εγκατάσταση σε εξομοιωτές. Σύμφωνα με τη Statista, περίπου 15% των εγκαταστάσεων εφαρμογών Android το 2025 γίνονται εκτός Google Play.
Η εσωτερική δομή του APK είναι αυστηρά καθορισμένη: κάθε εφαρμογή πρέπει να περιέχει συγκεκριμένα αρχεία και καταλόγους. Η παραβίαση της δομής οδηγεί σε σφάλμα εγκατάστασης.
| Αρχείο/κατάλογος | Σκοπός |
|---|---|
| AndroidManifest.xml | Δήλωση εφαρμογής: δικαιώματα, στοιχεία, έκδοση SDK |
| classes.dex | Μεταγλωττισμένος bytecode DEX (μπορεί να είναι πολλά αρχεία) |
| resources.arsc | Μεταγλωττισμένοι πόροι: συμβολοσειρές, στυλ, διατάξεις |
| res/ | Μη μεταγλωττισμένοι πόροι: εικόνες, γραμματοσειρές, XML |
| lib/ | Εγγενείς βιβλιοθήκες (.so) για διαφορετικές αρχιτεκτονικές CPU |
| META-INF/ | Μεταδεδομένα: πιστοποιητικά, λίστες αρχείων, hashes |
Η δήλωση είναι το κεντρικό αρχείο διαμόρφωσης της εφαρμογής. Σε μεταγλωττισμένη δυαδική μορφή (όχι σε αναγνώσιμο XML) περιέχει το όνομα πακέτου, έκδοση, λίστα δραστηριοτήτων, υπηρεσιών, δικαιωμάτων και απαιτήσεις SDK. Χωρίς δήλωση, το σύστημα δεν γνωρίζει πώς να εκτελέσει την εφαρμογή.
Ο πηγαίος κώδικας σε Java ή Kotlin μεταγλωττίζεται σε αρχεία DEX (Dalvik Executable). Το κύριο αρχείο ονομάζεται classes.dex. Εάν ο bytecode υπερβαίνει το όριο των 64K μεθόδων, δημιουργούνται classes2.dex, classes3.dex και ούτω καθεξής — ο μηχανισμός multidex.
Ο κατάλογος lib/ περιέχει μεταγλωττισμένες βιβλιοθήκες C/C++ για διαφορετικές αρχιτεκτονικές: armeabi-v7a, arm64-v8a, x86, x86_64. Κάθε βιβλιοθήκη έχει επέκταση .so (Shared Object). Οι σύγχρονες εφαρμογές συνήθως παρέχουν μόνο arm64-v8a.
Η κατασκευή APK είναι μια πολυσταδιακή διαδικασία αυτοματοποιημένη από το σύστημα κατασκευής Gradle και το Android Gradle Plugin. Κάθε στάδιο μετατρέπει τα αρχεία πηγής σε στοιχεία του τελικού αρχείου.
Ο πηγαίος κώδικας μεταγλωττίζεται σε bytecode Java (.class), στη συνέχεια μετατρέπεται σε DEX μέσω του εργαλείου d8 (προηγουμένως dx). Οι πόροι μεταγλωττίζονται σε δυαδική μορφή μέσω του AAPT2. Όλα τα στοιχεία συσκευάζονται σε αρχείο ZIP και υπογράφονται με ψηφιακή υπογραφή.
// build.gradle.kts — βασική διαμόρφωση κατασκευής APK
android {
defaultConfig {
applicationId = "com.example.app"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0.0"
}
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt")
)
}
}
}
ProGuard ή R8 συσκοτίζουν τον κώδικα, αφαιρούν αχρησιμοποίητες κλάσεις και μεθόδους, μειώνοντας το μέγεθος του APK. Χωρίς συσκότιση, το APK περιέχει πλήρη ονόματα κλάσεων, γεγονός που διευκολύνει την απομεταγλώττιση. Το R8 εκτελεί επίσης βελτιστοποίηση bytecode σε επίπεδο DEX.
Η ψηφιακή υπογραφή είναι υποχρεωτικό στοιχείο του APK. Το Android δεν εγκαθιστά μη υπογεγραμμένα πακέτα. Η υπογραφή εγγυάται ότι η εφαρμογή δεν έχει τροποποιηθεί μετά τη δημοσίευση και καθορίζει σε ποιον ανήκει το πακέτο.
v1 (JAR signing) — αρχικό σχήμα που βασίζεται στην υπογραφή κάθε αρχείου στο αρχείο. Αδυναμία: τα αρχεία μπορούν να αφαιρεθούν από το META-INF χωρίς ανίχνευση. v2 (APK Signature Scheme v2) εμφανίστηκε στο Android 7.0 — υπογράφεται ολόκληρο το αρχείο, αποτρέποντας την τροποποίηση. v3 υποστηρίζει περιστροφή κλειδιών, και v4 — σταδιακή εγκατάσταση.
Το Google Play απαιτεί v2 ή υψηλότερη για όλες τις νέες εφαρμογές από τον Αύγουστο του 2021. Συνιστάται η υπογραφή APK και με τα τρία σχήματα για μέγιστη συμβατότητα με διαφορετικές εκδόσεις Android.
Στο build.gradle καθορίζεται το keystore, ο κωδικός πρόσβασης και το ψευδώνυμο. Το ιδιωτικό κλειδί αποθηκεύεται σε κρυπτογραφημένο χώρο αποθήκευσης. Για δημοσίευση στο Google Play χρησιμοποιείται το App Signing — η Google αποθηκεύει το ιδιωτικό κλειδί και ο προγραμματιστής ανεβάζει το υπογεγραμμένο APK.
Η εγκατάσταση APK πραγματοποιείται μέσω του διαχειριστή πακέτων συστήματος PackageManager. Η διαδικασία περιλαμβάνει επαλήθευση υπογραφής, ανάλυση δήλωσης, αντιγραφή αρχείων και βελτιστοποίηση DEX μέσω dex2oat.
Το εργαλείο ADB (Android Debug Bridge) επιτρέπει την εγκατάσταση APK απευθείας από τον υπολογιστή του προγραμματιστή. Η εντολή `adb install app.apk` αντιγράφει το αρχείο στη συσκευή και ξεκινά την εγκατάσταση. Η σημαία -r επανεγκαθιστά την εφαρμογή διατηρώντας τα δεδομένα, η σημαία -d επιτρέπει την εγκατάσταση έκδοσης με χαμηλότερο versionCode.
Από το Android 8.0, το σύστημα απαιτεί επιβεβαίωση εγκατάστασης από άγνωστες πηγές για κάθε εφαρμογή ξεχωριστά. Android 14 ενίσχυσε τον έλεγχο: η εγκατάσταση APK μέσω καταστημάτων τρίτων είναι δυνατή μόνο μετά από ρητή άδεια στις ρυθμίσεις. Το Google Play Protect σαρώνει κάθε APK κατά την εγκατάσταση για κακόβουλο κώδικα.
Για εφαρμογές μεγαλύτερες από 150 MB, το Google Play υποστηρίζει Expansion Files — πρόσθετα πακέτα OBB έως 2 GB το καθένα. Τα αρχεία OBB δεν αποτελούν μέρος του APK, αλλά κατεβαίνουν ξεχωριστά μετά την εγκατάσταση. Η μορφή υποστηρίζει δύο τύπους: main (βασικοί πόροι) και patch (ενημερώσεις).
// Έλεγχος έκδοσης APK μέσω PackageManager
val pm = packageManager
val info = pm.getPackageInfo(
"com.example.app",
PackageManager.GET_ACTIVITIES
)
Log.d("APK", "Έκδοση: ${info.versionName}")
Σε συσκευές με ART (Android Runtime) μετά την εγκατάσταση ξεκινά η μεταγλώττιση DEX σε εγγενή κώδικα μέσω dex2oat. Η διαδικασία μπορεί να διαρκέσει μερικά δευτερόλεπτα και αυξάνει το μέγεθος της εγκατεστημένης εφαρμογής, αλλά επιταχύνει την εκκίνησή της.
AAB (Android App Bundle) — μορφή που προωθεί η Google ως εναλλακτική του APK για δημοσίευση στο Google Play. Η διαφορά είναι θεμελιώδης: το AAB δεν εγκαθίσταται άμεσα, αλλά λειτουργεί ως δοχείο από το οποίο το Google Play δημιουργεί βελτιστοποιημένα APK.
| Παράμετρος | APK | AAB |
|---|---|---|
| Μέγεθος λήψης | Πλήρες αρχείο | Μόνο απαραίτητα στοιχεία |
| Άμεση εγκατάσταση | Ναι | Όχι (δημιουργία APK) |
| Διανομή | Οποιοδήποτε κανάλι | Google Play |
| Έλεγχος εκδόσεων | Έκδοση στη δήλωση | Dynamic Delivery |
| Δημοσίευση | Google Play + τρίτα | Google Play |
Google Play απαιτεί AAB από τον Αύγουστο του 2021 για νέες εφαρμογές. Ωστόσο, το APK παραμένει η κύρια μορφή για διανομή εκτός Google Play — μέσω ιστοσελίδων, εταιρικών καταστημάτων και δοκιμών.
Οι προγραμματιστές αντιμετωπίζουν τακτικά προβλήματα κατά την κατασκευή και εγκατάσταση APK. Τα περισσότερα σχετίζονται με ασυμβατότητα εκδόσεων, υπογραφή ή δομή αρχείου.
Το σφάλμα προκύπτει κατά την προσπάθεια εγκατάστασης APK με το ίδιο όνομα πακέτου αλλά διαφορετική υπογραφή. Android δεν επιτρέπει επανεγκατάσταση εφαρμογής με τροποποιημένο πιστοποιητικό. Λύση — αφαιρέστε την παλιά έκδοση πριν από την εγκατάσταση.
Εάν το έργο υπερβαίνει το όριο των 65536 μεθόδων, η κατασκευή αποτυγχάνει με σφάλμα dex. Λύση — ενεργοποιήστε το multidex στο build.gradle ή βελτιστοποιήστε τις εξαρτήσεις αφαιρώντας αχρησιμοποίητες βιβλιοθήκες.
Το Google Play περιορίζει το μέγεθος APK στα 150 MB. Για μεγαλύτερες εφαρμογές χρησιμοποιούνται APK Expansion Files (OBB). Συνιστάται η μείωση μεγέθους μέσω R8, εικόνων WebP και Android App Bundle. Κάθε επιπλέον megabyte επηρεάζει αρνητικά τη μετατροπή εγκατάστασης: σύμφωνα με την Google, κάθε 10 MB μειώνει τη μετατροπή κατά 1%.
Το APK μπορεί να απομεταγλωττιστεί με εργαλεία JADX, APKTool ή Bytecode Viewer. JADX ανακτά τον αρχικό κώδικα Java από το DEX, καθιστώντας τις εφαρμογές χωρίς συσκότιση πλήρως αναγνώσιμες. Για προστασία κώδικα χρησιμοποιείται ProGuard/R8, το οποίο μετονομάζει κλάσεις, μεθόδους και πεδία σε σύντομα δυσανάγνωστα ονόματα και αφαιρεί πληροφορίες εντοπισμού σφαλμάτων.
Για ανάλυση περιεχομένου APK χρησιμοποιούνται Android Studio Profiler, apkanalyzer (εργαλείο CLI από το Android SDK) και βοηθητικά προγράμματα τρίτων. apkanalyzer δείχνει το μέγεθος κάθε στοιχείου APK: DEX, πόροι, εγγενείς βιβλιοθήκες και υπογραφή. Η ανάλυση βοηθά στον εντοπισμό των εξαρτήσεων που καταλαμβάνουν τον περισσότερο χώρο και στη λήψη απόφασης για αντικατάσταση ή αφαίρεσή τους.
Συχνές ερωτήσεις
Ναι, οποιοδήποτε πρόγραμμα αρχειοθέτησης (7-Zip, WinRAR) ανοίγει το APK ως ZIP. Μπορείτε να δείτε το περιεχόμενο, αλλά για απομεταγλώττιση κώδικα απαιτούνται ειδικά εργαλεία — JADX ή apktool.
XAPK — ανεπίσημη μορφή που χρησιμοποιείται από ορισμένα καταστήματα τρίτων. Συνδυάζει το APK με πρόσθετα αρχεία OBB σε ένα αρχείο. Το Google Play και η επίσημη τεκμηρίωση Android δεν χρησιμοποιούν το XAPK.
Android Studio υπογράφει αυτόματα την έκδοση εντοπισμού σφαλμάτων με debug.keystore κατά την εκτέλεση στη συσκευή. Για διανομή δοκιμαστικής έκδοσης στην ομάδα απαιτείται υπογραφή με κλειδί έκδοσης ή χρήση App Signing.
Χρησιμοποιήστε R8 για συσκότιση και ελαχιστοποίηση, μετατρέψτε εικόνες σε WebP, αφαιρέστε αχρησιμοποίητους πόρους μέσω Lint και για μεγάλα έργα μεταβείτε σε Android App Bundle με Dynamic Delivery.
Όχι — οποιαδήποτε αλλαγή στο APK μετά την υπογραφή καταστρέφει την ψηφιακή υπογραφή. Για ενημέρωση πρέπει να δημιουργηθεί και να υπογραφεί νέα έκδοση με αυξημένο versionCode.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης