AndroidManifest.xml — τι είναι, κύρια στοιχεία και διαμόρφωση manifest

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

Το AndroidManifest.xml είναι το υποχρεωτικό αρχείο ρυθμίσεων κάθε εφαρμογής Android, που περιγράφει τα στοιχεία, τις άδειες και τα μεταδεδομένα της. Το σύστημα Android διαβάζει αυτό το αρχείο κατά την εγκατάσταση και εκκίνηση κάθε εφαρμογής. Σύμφωνα με το Android Developers, 2025, χωρίς σωστό manifest η εφαρμογή δεν εγκαθίσταται στη συσκευή. Το AndroidManifest.xml καταχωρεί Activity, Service, BroadcastReceiver και ContentProvider για το λειτουργικό σύστημα.

Κύρια σημεία

  • AndroidManifest.xml — αρχείο XML που δηλώνει όλα τα στοιχεία και τις απαιτήσεις της εφαρμογής Android
  • Activity, Service, BroadcastReceiver, ContentProvider καταχωρούνται εντός της ετικέτας application
  • Άδειες καθορίζονται μέσω των ετικετών uses-permission και uses-permission-sdk-23
  • Intent Filters καθορίζουν ποιες ενέργειες συστήματος μπορεί να επεξεργαστεί κάθε στοιχείο
  • Το χαρακτηριστικό exported ελέγχει τη διαθεσιμότητα του στοιχείου για άλλες εφαρμογές

Τι είναι το AndroidManifest.xml

Το AndroidManifest.xml είναι το κύριο αρχείο ρυθμίσεων σε μορφή XML που κάθε έργο Android πρέπει να περιέχει στον κατάλογο app/src/main. Το σύστημα Android το αναλύει πριν εκτελέσει οποιονδήποτε κώδικα της εφαρμογής — στο στάδιο ανάλυσης APK κατά την εγκατάσταση. Εάν υπάρχει συντακτικό σφάλμα στο manifest ή λείπει υποχρεωτική δήλωση, η εγκατάσταση διακόπτεται με μήνυμα σφάλματος.

Το αρχείο περιέχει την πλήρη δήλωση της εφαρμογής: λίστα όλων των στοιχείων (Activity, Service, BroadcastReceiver, ContentProvider), ζητούμενες άδειες, ελάχιστη έκδοση SDK, απαιτήσεις υλικού και ρύθμιση θεμάτων και στυλ. Κάθε στοιχείο που μπορεί να κληθεί από το σύστημα ή άλλες εφαρμογές πρέπει να δηλώνεται ρητά στο manifest. Αυτή είναι απαίτηση ασφαλείας: χωρίς ρητή δήλωση, το στοιχείο δεν είναι διαθέσιμο για κλήση.

Χωρίς σωστά ρυθμισμένο manifest, η εφαρμογή δεν μπορεί να εγκατασταθεί μέσω Google Play ή sideloading. Το σύστημα ελέγχει το manifest στο στάδιο ανάλυσης APK και απορρίπτει την εγκατάσταση σε περίπτωση σφαλμάτων. Το Google Play σαρώνει επίσης το manifest για μη ασφαλείς ρυθμίσεις: για exported=true σε στοιχείο χωρίς intent-filter εκδίδεται προειδοποίηση, και εάν λείπουν υποχρεωτικές άδειες για targetSdk 34+, η δημοσίευση μπλοκάρεται. Επομένως, η κατανόηση της δομής του manifest είναι υποχρεωτική δεξιότητα για τον προγραμματιστή Android.

Στοιχεία εφαρμογής στο manifest

Κάθε στοιχείο της εφαρμογής Android πρέπει να καταχωρείται ρητά στο manifest. Αυτή είναι υποχρεωτική απαίτηση της πλατφόρμας για όλους τους τέσσερις τύπους στοιχείων. Χωρίς καταχώρηση, το στοιχείο δεν μπορεί να δημιουργηθεί από το σύστημα και η προσπάθεια εκκίνησής του θα οδηγήσει σε εξαίρεση ActivityNotFoundException ή παρόμοια. Τα στοιχεία καταχωρούνται εντός της ετικέτας application με σειρά που δεν επηρεάζει τη λειτουργία τους.

Activity

Η ετικέτα activity καταχωρεί την οθόνη της εφαρμογής. Το χαρακτηριστικό exported καθορίζει εάν άλλες εφαρμογές μπορούν να εκκινήσουν αυτήν την Activity. Από το Android 12, η απουσία exported παρουσία intent-filter προκαλεί σφάλμα μεταγλώττισης — αυτή είναι απαίτηση ασφαλείας. Το σημείο εισόδου ορίζεται μέσω intent-filter με action MAIN και category LAUNCHER. Κάθε Activity πρέπει να έχει μοναδικό android:name που αντιστοιχεί στο πλήρες ή σχετικό όνομα κλάσης.

xml
<activity
    android:name=".MainActivity"
    android:exported="true"
    android:windowSoftInputMode="adjustResize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Service

Η ετικέτα service ορίζει μια υπηρεσία παρασκηνίου. Από το Android 8, οι υπηρεσίες παρασκηνίου έχουν αυστηρούς περιορισμούς: η foreground service απαιτεί υποχρεωτική ειδοποίηση με εικονίδιο ορατό στον χρήστη, και η bound service ζει μόνο όταν υπάρχει συνδεδεμένος πελάτης. Οι υπηρεσίες που εκτελούνται στο παρασκήνιο χωρίς ειδοποίηση τερματίζονται αυτόματα από το σύστημα λίγα λεπτά μετά τη μετάβαση της εφαρμογής σε λειτουργία παρασκηνίου. Για μακροχρόνιες εργασίες, χρησιμοποιήστε WorkManager αντί για Service.

xml
<service
    android:name=".SyncService"
    android:exported="false"
    android:foregroundServiceType="dataSync" />

BroadcastReceiver

Η ετικέτα receiver δηλώνει έναν δέκτη συστημικών ή προσαρμοσμένων εκπομπών. Από το Android 8, οι περισσότερες σιωπηρές εκπομπές δεν παραδίδονται πλέον σε στατικά δηλωμένους δέκτες στο manifest. Αντ' αυτού, συνιστάται η δυναμική καταχώρηση δεκτών μέσω Context.registerReceiver στον κώδικα. Εξαίρεση αποτελούν ορισμένες συστημικές εκπομπές, όπως η BOOT_COMPLETED, που απαιτούν ακόμα στατική καταχώρηση στο manifest.

xml
<receiver
    android:name=".ConnectivityReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

Άδειες (Permissions) στο Android

Κάθε επικίνδυνη άδεια στο Android απαιτεί δήλωση στο manifest μέσω της ετικέτας uses-permission. Από το Android 6, οι επικίνδυνες άδειες ζητούνται κατά τον χρόνο εκτέλεσης μέσω διαλόγου με τον χρήστη, αλλά η δήλωση στο manifest παραμένει υποχρεωτική. Χωρίς αυτήν, η μέθοδος requestPermissions προκαλεί εξαίρεση SecurityException. Οι άδειες κανονικού επιπέδου, όπως INTERNET και ACCESS_NETWORK_STATE, παρέχονται αυτόματα κατά την εγκατάσταση.

ΆδειαΣκοπός
CAMERAΠρόσβαση στην κάμερα της συσκευής για φωτογραφίες και βίντεο
ACCESS_FINE_LOCATIONΑκριβής γεωτοποθεσία μέσω GPS και δικτύου
RECORD_AUDIOΕγγραφή ήχου από το μικρόφωνο της συσκευής
READ_CONTACTSΑνάγνωση επαφών από τον τηλεφωνικό κατάλογο
POST_NOTIFICATIONSΑποστολή ειδοποιήσεων σε Android 13+

Η ετικέτα uses-permission-sdk-23 καθορίζει άδειες που απαιτούνται μόνο σε Android 6.0+. Αυτό επιτρέπει τη διατήρηση συμβατότητας με παλαιότερες εκδόσεις χωρίς αίτηση ανύπαρκτων αδειών. Για παράδειγμα, το POST_NOTIFICATIONS είναι διαθέσιμο μόνο σε Android 13+, επομένως πρέπει να καθορίζεται μέσω uses-permission-sdk-33 ώστε σε παλαιότερες συσκευές να μην υπάρχει σφάλμα άγνωστης άδειας. Το χαρακτηριστικό maxSdkVersion στο uses-permission επιτρέπει την αυτόματη ανάκληση περιττών αδειών κατά την ενημέρωση της εφαρμογής σε νεότερες εκδόσεις Android.

Οι άδειες κανονικού επιπέδου (INTERNET, ACCESS_NETWORK_STATE) παρέχονται αυτόματα κατά την εγκατάσταση και δεν απαιτούν αίτηση κατά τον χρόνο εκτέλεσης. Δηλώνονται επίσης μέσω uses-permission, αλλά δεν εμφανίζονται στον χρήστη σε διάλογο. Για τον έλεγχο πρόσβασης σε στοιχεία της εφαρμογής από άλλες εφαρμογές, χρησιμοποιείται ο μηχανισμός permission-protected components: μπορεί να καθοριστεί προσαρμοσμένη άδεια σε επίπεδο Activity ή Service που θα ελέγχεται από το σύστημα όταν το στοιχείο καλείται από εξωτερική πηγή. Αυτό παρέχει ένα πρόσθετο επίπεδο ασφαλείας για τη διαδιεργασιακή επικοινωνία.

Intent Filters και βαθιοί σύνδεσμοι

Η ετικέτα intent-filter στο manifest δηλώνει ποια σιωπηρά intent μπορεί να επεξεργαστεί ένα στοιχείο. Αυτός είναι ο μηχανισμός μέσω του οποίου το Android συνδέει ενέργειες συστήματος ή προσαρμοσμένες ενέργειες με την εφαρμογή. Το intent filter αποτελείται από τρία στοιχεία: action (ενέργεια), category (κατηγορία) και data (δεδομένα). Και τα τρία μπορούν να συνδυαστούν για την ακριβή περιγραφή του ποια intent πρέπει να λαμβάνει το στοιχείο. Το σύστημα επιλέγει το κατάλληλο στοιχείο βάσει του πιο συγκεκριμένου φίλτρου.

xml
<activity android:name=".DeepLinkActivity">
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="https"
            android:host="itsectr.com"
            android:pathPrefix="/app" />
    </intent-filter>
</activity>

Το χαρακτηριστικό autoVerify ενεργοποιεί την επαλήθευση Android App Links: το σύστημα επικοινωνεί με τον διακομιστή για επιβεβαίωση της κυριότητας του τομέα. Χωρίς επαλήθευση, οι βαθιοί σύνδεσμοι λειτουργούν μέσω του τυπικού διαλόγου επιλογής, όπου ο χρήστης επιλέγει με ποια εφαρμογή θα ανοίξει τον σύνδεσμο. Μετά από επιτυχή επαλήθευση, οι σύνδεσμοι ανοίγουν απευθείας στην εφαρμογή χωρίς διάλογο. Το Google Search Console χρησιμοποιεί επίσης το autoVerify για την ευρετηρίαση deep links και την εμφάνισή τους στα αποτελέσματα αναζήτησης.

Τα φίλτρα με action.VIEW και κατηγορίες DEFAULT και BROWSABLE χειρίζονται συνδέσμους από το πρόγραμμα περιήγησης, email και άλλες εφαρμογές. Αυτός είναι ο κύριος μηχανισμός υλοποίησης βαθιών συνδέσμων στο Android. Για υποστήριξη προσαρμοσμένων σχημάτων URL, π.χ. myapp://, αρκεί να καθοριστεί το scheme χωρίς host. Ωστόσο, η Google συνιστά τη χρήση HTTPS βαθιών συνδέσμων αντί για προσαρμοσμένα σχήματα, καθώς είναι ασφαλέστερα και δεν απαιτούν πρόσθετες άδειες. Τα προσαρμοσμένα σχήματα μπορούν να υποκλαπούν από οποιαδήποτε εφαρμογή έχει καταχωρήσει το ίδιο σχήμα.

Χαρακτηριστικά εφαρμογής και μεταδεδομένα

Η ρίζα manifest περιέχει τα χαρακτηριστικά του πακέτου, της έκδοσης και του SDK. Η ετικέτα application αποθηκεύει καθολικές ρυθμίσεις: θέμα, εικονίδιο, ετικέτα και σημαίες εντοπισμού σφαλμάτων. Τα χαρακτηριστικά manifest καθορίζουν την έκδοση σε επίπεδο πακέτου, ενώ τα χαρακτηριστικά application ορίζουν την εμφάνιση και συμπεριφορά της εφαρμογής στο σύνολό της. Οι τιμές μπορεί να είναι αναφορές σε πόρους μέσω σύνταξης @ ή συμβολοσειρές.

xml
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itsectr.myapp"

    <uses-sdk
        android:minSdkVersion="24"
        android:targetSdkVersion="34" />

    <application
        android:label="MyApp"
        android:icon="@mipmap/ic_launcher"
        android:theme="@style/Theme.MyApp"
        android:supportsRtl="true"
        android:allowBackup="true">
        <!--  Στοιχεία εφαρμογής  -->
    </application>
</manifest>

Η ετικέτα meta-data εντός του application επιτρέπει την αποθήκευση αυθαίρετων ζευγών κλειδιού-τιμής. Αυτό είναι βολικό για τη ρύθμιση βιβλιοθηκών τρίτων: κλειδιά API, διευθύνσεις endpoint και σημαίες λειτουργικότητας. Τα δεδομένα από το meta-data είναι προσβάσιμα μέσω PackageManager.getApplicationInfo().metaData κατά τον χρόνο εκτέλεσης. Για παράδειγμα, τα Firebase και Google Maps χρησιμοποιούν meta-data για τη μεταφορά κλειδιών πρόσβασης χωρίς σκληρή κωδικοποίηση στον πηγαίο κώδικα. Τα κλειδιά καθορίζονται στο manifest και μπορεί να διαφέρουν για διαφορετικές παραλλαγές μεταγλώττισης.

Το χαρακτηριστικό android:extractNativeLibs ελέγχει την εξαγωγή εγγενών βιβλιοθηκών από το APK. Για εφαρμογές με targetSdk 34+, αυτό το χαρακτηριστικό πρέπει να καθορίζεται ρητά, διαφορετικά η μεταγλώττιση μπορεί να αποτύχει με σφάλμα INSTALL_FAILED_INVALID_APK. Εάν extractNativeLibs=false, οι εγγενείς βιβλιοθήκες παραμένουν εντός του APK χωρίς εξαγωγή, μειώνοντας το μέγεθος της εγκατεστημένης εφαρμογής αλλά αυξάνοντας τον χρόνο φόρτωσης των βιβλιοθηκών. Για τις περισσότερες σύγχρονες εφαρμογές, συνιστάται extractNativeLibs=false για εξοικονόμηση χώρου στον δίσκο του χρήστη.

Το χαρακτηριστικό android:networkSecurityConfig επιτρέπει τον καθορισμό ενός αρχείου ρυθμίσεων ασφαλείας δικτύου. Αυτό είναι ιδιαίτερα σημαντικό για εφαρμογές με targetSdk 28+, όπου η κυκλοφορία HTTP είναι αποκλεισμένη από προεπιλογή. Το αρχείο ρυθμίσεων καθορίζει αξιόπιστα πιστοποιητικά, τομείς για συνδέσεις HTTP και κανόνες καρφιτσώματος πιστοποιητικών. Αυτό αντικαθιστά το παρωχημένο χαρακτηριστικό android:usesCleartextTraffic και παρέχει έναν πιο ευέλικτο μηχανισμό διαχείρισης της ασφάλειας συνδέσεων σε επίπεδο λειτουργικού συστήματος.

Το χαρακτηριστικό android:largeHeap ζητά αυξημένο μέγεθος σωρού για την εφαρμογή. Από προεπιλογή, το Android εκχωρεί σε κάθε εφαρμογή περιορισμένη ποσότητα μνήμης, ανάλογα με τη συσκευή και την έκδοση λειτουργικού συστήματος. Εάν η εφαρμογή λειτουργεί με βαριές εικόνες, βίντεο ή μεγάλα σύνολα δεδομένων, το largeHeap μπορεί να αποτρέψει το OutOfMemoryError. Ωστόσο, η κατάχρηση αυτού του χαρακτηριστικού είναι επιβλαβής: μια εφαρμογή με υψηλή κατανάλωση μνήμης τερματίζεται ταχύτερα από το σύστημα σε περίπτωση έλλειψης πόρων. Χρησιμοποιήστε το largeHeap μόνο μετά από δημιουργία προφίλ και επιβεβαίωση αναγκαιότητας.

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

Τι συμβαίνει εάν δεν καθορίσω το exported για το Activity;

Από το Android 12, η απουσία του χαρακτηριστικού exported παρουσία intent-filter προκαλεί σφάλμα μεταγλώττισης. Το σύστημα απαιτεί ρητό καθορισμό ορατότητας για κάθε στοιχείο με intent-filter — αυτό είναι ένα μέτρο ασφαλείας για την αποτροπή τυχαίου ανοίγματος στοιχείων από άλλες εφαρμογές. Για Activity χωρίς intent-filter, το exported είναι εξ ορισμού false.

Μπορώ να έχω πολλαπλές Activity με intent-filter LAUNCHER;

Ναι, αλλά στον εκκινητή θα εμφανιστούν πολλά εικονίδια της εφαρμογής. Κάθε Activity με MAIN/LAUNCHER γίνεται ξεχωριστό σημείο εισόδου. Αυτό χρησιμοποιείται για τη δημιουργία συντομεύσεων σε διαφορετικά τμήματα της εφαρμογής, για παράδειγμα για άμεση μετάβαση στις ρυθμίσεις ή δημιουργία νέας εγγραφής. Κάθε εικονίδιο ανοίγει απευθείας την αντίστοιχη Activity.

Πώς λειτουργεί η συγχώνευση manifest στο Android;

Το Android συγχωνεύει τα manifest από βιβλιοθήκες με το κύριο manifest της εφαρμογής. Σε περίπτωση σύγκρουσης χαρακτηριστικών, χρησιμοποιείται tools:replace ή tools:node="merge" για επίλυση. Αυτός ο μηχανισμός είναι αυτόματος: κατά την προσθήκη βιβλιοθήκης μέσω Gradle, το manifest της συγχωνεύεται με το κύριο. Για ακύρωση ή αντικατάσταση χαρακτηριστικού από βιβλιοθήκη, χρησιμοποιήστε tools:node="remove" ή tools:replace="attributeName".

Γιατί δεν εμφανίζεται ο διάλογος άδειας;

Τυπικές αιτίες: η άδεια δεν έχει δηλωθεί στο manifest μέσω uses-permission, χρησιμοποιείται άδεια κανονικού επιπέδου (χωρίς αίτηση κατά τον χρόνο εκτέλεσης), ο χρήστης επέλεξε "Να μην ρωτηθεί ξανά" και η άδεια απορρίφθηκε μόνιμα, ή το targetSdkVersion είναι κάτω από 23, όπου οι άδειες ζητούνται κατά την εγκατάσταση. Για διάγνωση, ελέγξτε το manifest και τα αρχεία καταγραφής μέσω adb logcat.

Τι είναι το debuggable στο manifest;

Το χαρακτηριστικό android:debuggable ενεργοποιεί τον εντοπισμό σφαλμάτων της εφαρμογής μέσω ADB. Για εκδόσεις κυκλοφορίας στο Google Play πρέπει να είναι false. Εάν debuggable=true σε μια έκδοση κυκλοφορίας, ένας εισβολέας μπορεί να συνδεθεί στην εφαρμογή μέσω ADB, να διαβάσει δεδομένα και να εκτελέσει αυθαίρετο κώδικα. Το Google Play αποκλείει αυτόματα τη δημοσίευση εκδόσεων με debuggable=true.

Σύνοψη

  • AndroidManifest.xml — υποχρεωτικό αρχείο ρυθμίσεων με δήλωση όλων των στοιχείων εφαρμογής Android
  • Activity, Service, Receiver, Provider καταχωρούνται εντός της ετικέτας application με χαρακτηριστικά ορατότητας και ρύθμισης
  • Άδειες δηλώνονται μέσω uses-permission, οι επικίνδυνες ζητούνται κατά τον χρόνο εκτέλεσης μετά το Android 6.0
  • Intent Filters με autoVerify ενεργοποιούν τα Android App Links για απευθείας βαθιούς συνδέσμους χωρίς διάλογο επιλογής
  • uses-sdk ορίζει minSdkVersion και targetSdkVersion για έλεγχο συμβατότητας με εκδόσεις Android
  • exported είναι υποχρεωτικό για όλα τα στοιχεία με intent-filter από το Android 12
  • Συγχώνευση manifest συνδυάζει ρυθμίσεις από modules και βιβλιοθήκες με υποστήριξη παράκαμψης χαρακτηριστικών

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

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

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

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