Αρχείο μανιφέστου Android Υποστηρίζει διαφορετικές αναλύσεις. Απαγόρευση αλλαγής προσανατολισμού

AndroidManifest.xml- ένα απαραίτητο αρχείο για όλους Εφαρμογές Android. Βρίσκεται στο φάκελο της εφαρμογής και περιγράφει τις καθολικές τιμές για το πακέτο σας, συμπεριλαμβανομένων των στοιχείων της εφαρμογής (δραστηριότητες, υπηρεσίες κ.λπ.), τι εκθέτει το πακέτο στον «έξω κόσμο», ποια δεδομένα μπορεί να επεξεργαστεί κάθε μια από τις Δραστηριότητες της εφαρμογής, και πώς μπορούν να ξεκινήσουν.

Ένα σημαντικό πράγμα που πρέπει να αναφέρουμε σχετικά με αυτό το αρχείο είναι τα λεγόμενα IntentFilters του. Αυτά τα φίλτρα περιγράφουν πού και πότε μπορεί να ξεκινήσει μια Δραστηριότητα. Όταν Δραστηριότητα (ή λειτουργικό σύστημα) θέλει να εκτελέσει μια ενέργεια, όπως το άνοιγμα μιας ιστοσελίδας ή το άνοιγμα μιας οθόνης επιλογής, αυτό δημιουργεί ένα αντικείμενο Intent. Αυτό το Intent μπορεί να αποθηκεύσει πληροφορίες που περιγράφουν τι θέλετε να κάνετε, ποια δεδομένα χρειάζονται για να το επιτύχετε και άλλες πληροφορίες. Το Android συγκρίνει τις πληροφορίες στο αντικείμενο Intent με τα IntentFilters που εκτίθενται από κάθε εφαρμογή και βρίσκει τις Δραστηριότητες που ταιριάζουν για την επεξεργασία των δεδομένων ή των ενεργειών που ορίζονται πρόγραμμα κλήσης. Εάν υπάρχουν περισσότερες από μία εφαρμογές ικανές να επεξεργαστούν αυτήν την Πρόθεση, ο χρήστης ερωτάται ποια εφαρμογή θα προτιμούσε να τη χειριστεί.

Εκτός από τη δήλωση της Δραστηριότητας, του Παρόχου Περιεχομένου, της Υπηρεσίας και των Αποδεκτών Πρόθεσης της εφαρμογής σας, μπορείτε επίσης να ορίσετε δικαιώματα στο AndroidManifest.xml.

Βασικά

Ένα πολύ απλό AndroidManifest.xml μοιάζει με αυτό:

android:label="@string/app_name">

Σχεδόν κάθε AndroidManifest.xml (καθώς και πολλά άλλα αρχεία Android XML) θα περιλαμβάνει μια δήλωση χώρου ονομάτων στο πρώτο του στοιχείο. Αυτό καθιστά έναν αριθμό τυπικών χαρακτηριστικών Android διαθέσιμα στο αρχείο, τα οποία θα χρησιμοποιηθούν για την παροχή των περισσότερων δεδομένων για τα στοιχεία σε αυτό το αρχείο.

Σχεδόν κάθε AndroidManifest.xml περιλαμβάνει ένα single μια ετικέτα που περιέχει απευθείας πολλές ετικέτες που περιγράφουν τις Εφαρμογές, τους IntentReceivers κ.λπ. που είναι διαθέσιμα σε αυτήν την εφαρμογή.

Εάν θέλετε να κάνετε τη Δραστηριότητα να ξεκινήσει απευθείας μέσω του χρήστη, τότε θα πρέπει να της εκχωρήσετε υποστήριξη για την ΚΥΡΙΑ ενέργεια και την κατηγορία ΕΚΚΙΝΗΣΗ. Το αποτέλεσμα είναι όπως φαίνεται εδώ:

Άμεσα εκκίνηση Δραστηριότητα.

Αυτό που ακολουθεί είναι μια λεπτομερής ανάλυση της δομής του αρχείου AndroidManifest με περιγραφή όλων των διαθέσιμων , με ένα παράδειγμα για όλους. (Τα παραδείγματα δεν υπάρχουν παντού, αλλά σίγουρα δεν έχασα τίποτα. Και η φράση «για όλους» στην αγγλική έκδοση («για κάθε») ήταν επίσης εκεί. Δεν ξέρω πού έχασαν αυτά τα παραδείγματα. - σημείωση μεταφραστή ). Ποιος είναι ο απόγονος του οποίου μπορεί να προσδιοριστεί από την εσοχή:

Αυτός είναι ο ριζικός κόμβος κάθε AndroisManifest.xml. Περιέχει ένα πακέτο χαρακτηριστικών που οδηγεί σε ένα συγκεκριμένο πακέτο στη Δραστηριότητα (αποδείχθηκε ότι δεν είναι αρκετά στα ρωσικά, αλλά, γενικά, το κόλπο είναι ότι υπάρχει ένα πακέτο Δραστηριότητας στον κώδικα, αλλά οι παράμετροι αυτού του πακέτου περιγράφονται στο αυτή η ετικέτα - περίπου. Μια άλλη διαδρομή προς τις Δραστηριότητες θα βασίζεται σε σχέση με την αξία της.

Περιγράφει τα δικαιώματα ασφαλείας που πρέπει να παραχωρηθούν στο πακέτο σας. Η ποσότητα δεν είναι περιορισμένη.

Δηλώνει μια άδεια ασφαλείας που μπορεί να χρησιμοποιηθεί για να καθορίσει ποιες εφαρμογές μπορούν να έχουν πρόσβαση σε στοιχεία ή δυνατότητες αυτού του πακέτου. Η ποσότητα δεν είναι περιορισμένη.

Δηλώνει τον κωδικό ενός στοιχείου οργάνων που είναι διαθέσιμο για δοκιμή λειτουργικότητααυτό ή άλλο πακέτο. Δείτε Εξοπλισμός για περισσότεροΛεπτομέριες. Η ποσότητα δεν είναι περιορισμένη.

< εφαρμογή>

Το ριζικό στοιχείο που περιέχει τις δηλώσεις συστατικών σε επίπεδο περιέχεται στη συσκευασία. Αυτό το στοιχείο μπορεί επίσης να περιλαμβάνει καθολικό ή/και προεπιλογή χαρακτηριστικά για την εφαρμογή όπως ετικέτα, εικονίδιο, θέμα, απαίτηση άδειας κ.λπ. Ποσότητα - από μηδέν έως ένα.

Μια Δραστηριότητα είναι το πρωταρχικό στοιχείο για την αλληλεπίδραση μιας εφαρμογής με τον χρήστη. Η οθόνη που βλέπει ο χρήστης κατά την εκκίνηση της εφαρμογής είναι η Δραστηριότητα και οι περισσότερες από τις άλλες οθόνες που χρησιμοποιούν θα υλοποιηθούν ως ξεχωριστές ενέργειες, δηλωμένες με πρόσθετες ετικέτες δραστηριότητας.

Σημείωση: Κάθε Δραστηριότητα πρέπει να έχει ετικέτα στο μανιφέστο, είτε είναι εκτεθειμένο στον κόσμο είτε προορίζεται για χρήση μόνο στο δικό του πακέτο. Εάν η Δραστηριότητα δεν έχει καμία αντίστοιχη ετικέτα στο μανιφέστο της, τότε δεν θα μπορείτε να τη χρησιμοποιήσετε.

Δηλώνει ποιες Intents υποστηρίζει το στοιχείο. Εκτός από τα διάφορα είδη τιμών που μπορούν να οριστούν σε αυτό το στοιχείο, εδώ μπορούν να δοθούν χαρακτηριστικά για την παροχή μιας μοναδικής ετικέτας, εικονιδίου και άλλων πληροφοριών για την ενέργεια που περιγράφεται.

Το είδος της ενέργειας που υποστηρίζει το στοιχείο. Παράδειγμα:

< κατηγορία>

Ο τύπος MIME, το σχήμα URI ή η διαδρομή URI της υποστήριξης στοιχείου.

Μπορείτε επίσης να συνδέσετε 1+ κομμάτια μεταδεδομένων με τη δραστηριότητά σας:

Προσθέτει ένα νέο τμήμα μεταδεδομένων στη Δραστηριότητα, το οποίο οι πελάτες μπορούν να ανακτήσουν μέσω του ComponentInfo.metaData.

Το IntentReceiver επιτρέπει σε μια εφαρμογή να αναφέρει την αντικατάσταση δεδομένων ή τις δραστηριότητες που πραγματοποιούνται ακόμα κι αν η εφαρμογή δεν εκτελείται αυτήν τη στιγμή. Όπως και με την ετικέτα δραστηριότητας, μπορείτε προαιρετικά να συμπεριλάβετε περισσότερες από μία ή , όπως ακριβώς και με .

Η υπηρεσία είναι ένα στοιχείο που εκτελείται στο παρασκήνιο για αυθαίρετο χρονικό διάστημα. Σε αυτήν την ετικέτα, όπως και στην ετικέτα δραστηριότητας, μπορείτε προαιρετικά να συμπεριλάβετε μία ή περισσότερες ή .

Το ContentProvider είναι ένα στοιχείο που διαχειρίζεται μόνιμα δεδομένα και τα καθιστά διαθέσιμα σε άλλες εφαρμογές. Μπορείτε επίσης προαιρετικά να επισυνάψετε ένα ή περισσότερα , όπως και στη δραστηριότητα. ΟΧΙ εδω.

Φυσικά τα πάντα<теги>πρέπει να είναι ή έτσι, ή έτσι,<напрямую/>.



Μερικές φορές ορισμένες εφαρμογές στο Android δεν ταιριάζουν με κάποιο τρόπο στον χρήστη. Ένα παράδειγμα είναι η παρεμβατική διαφήμιση. Και συμβαίνει επίσης το πρόγραμμα να είναι καλό για όλους, αλλά η μετάφραση σε αυτό είτε είναι στραβή είτε απουσιάζει εντελώς. Ή, για παράδειγμα, το πρόγραμμα είναι δοκιμαστικό, αλλά δεν υπάρχει τρόπος να αποκτήσετε την πλήρη έκδοση. Πώς να αλλάξετε την κατάσταση;

Εισαγωγή

Σε αυτό το άρθρο θα μιλήσουμε για το πώς να αποσυναρμολογήσουμε ένα πακέτο APK με μια εφαρμογή, να δούμε την εσωτερική του δομή, να αποσυναρμολογήσουμε και να απομεταγλωττίσουμε τον bytecode και επίσης να προσπαθήσουμε να κάνουμε αρκετές αλλαγές στις εφαρμογές που μπορούν να μας φέρουν το ένα ή το άλλο όφελος.

Για να τα κάνετε όλα αυτά μόνοι σας, θα χρειαστείτε τουλάχιστον βασικές γνώσεις της γλώσσας Java, στην οποία είναι γραμμένες οι εφαρμογές Android, και της γλώσσας XML, που χρησιμοποιείται παντού στο Android - από την περιγραφή της ίδιας της εφαρμογής και των δικαιωμάτων πρόσβασής της μέχρι την αποθήκευση συμβολοσειρών που θα εμφανιστεί στην οθόνη. Θα χρειαστείτε επίσης τη δυνατότητα χρήσης εξειδικευμένου λογισμικού κονσόλας.

Λοιπόν, τι είναι ένα πακέτο APK στο οποίο διανέμεται απολύτως όλο το λογισμικό Android;

Αποσυμπίεση εφαρμογής

Σε αυτό το άρθρο, δουλέψαμε μόνο με αποσυναρμολογημένο κώδικα εφαρμογής, αλλά αν γίνουν πιο σοβαρές αλλαγές σε μεγάλες εφαρμογές, η κατανόηση του κώδικα smali θα είναι πολύ πιο δύσκολη. Ευτυχώς, μπορούμε να απομεταγλωττίσουμε τον κώδικα dex σε κώδικα Java, ο οποίος, αν και δεν είναι πρωτότυπος και δεν έχει μεταγλωττιστεί ξανά, είναι πολύ πιο εύκολο να διαβαστεί και να κατανοηθεί η λογική της εφαρμογής. Για να το κάνουμε αυτό, θα χρειαστούμε δύο εργαλεία:

  • Το dex2jar είναι ένας μεταφραστής του bytecode Dalvik σε bytecode JVM, βάσει του οποίου μπορούμε να λάβουμε κώδικα στη γλώσσα Java.
  • Το jd-gui είναι ένας ίδιος ο απομεταγλωττιστής που σας επιτρέπει να λαμβάνετε αναγνώσιμο κώδικα Java από τον bytecode JVM. Εναλλακτικά, μπορείτε να χρησιμοποιήσετε το Jad (www.varaneckas.com/jad). Αν και είναι αρκετά παλιό, σε ορισμένες περιπτώσεις δημιουργεί πιο ευανάγνωστο κώδικα από το Jd-gui.

Έτσι πρέπει να χρησιμοποιούνται. Αρχικά, εκκινούμε το dex2jar, καθορίζοντας τη διαδρομή προς το πακέτο apk ως όρισμα:

% dex2jar.sh mail.apk

Ως αποτέλεσμα, το πακέτο Java mail.jar θα εμφανιστεί στον τρέχοντα κατάλογο, ο οποίος μπορεί ήδη να ανοίξει στο jd-gui για να προβάλετε τον κώδικα Java.

Τακτοποίηση πακέτων APK και λήψη τους

Το πακέτο εφαρμογών Android είναι ουσιαστικά ένα κανονικό αρχείο ZIP, δεν χρειάζεται να δείτε τα περιεχόμενα ή να το αποσυμπιέσετε. ειδικά εργαλείαδεν απαιτείται. Αρκεί να έχετε έναν αρχειοθέτη - 7zip για Windows ή αποσυμπίεση κονσόλας στο Linux. Αλλά πρόκειται για το περιτύλιγμα. Τι είναι μέσα? Γενικά, έχουμε την ακόλουθη δομή στο εσωτερικό:

  • META-INF/- περιέχει ένα ψηφιακό πιστοποιητικό της εφαρμογής, που ταυτοποιεί τον δημιουργό της και αθροίσματα ελέγχου των αρχείων του πακέτου.
  • res/ - διάφορους πόρους, που χρησιμοποιεί η εφαρμογή στην εργασία της, για παράδειγμα, εικόνες, δηλωτική περιγραφή της διεπαφής, καθώς και άλλα δεδομένα.
  • AndroidManifest.xml- περιγραφή της αίτησης. Αυτό περιλαμβάνει, για παράδειγμα, μια λίστα με τα απαιτούμενα δικαιώματα, την απαιτούμενη έκδοση Android και την απαιτούμενη ανάλυση οθόνης.
  • τάξεις.dex- μεταγλωττισμένο bytecode εφαρμογής για την εικονική μηχανή Dalvik.
  • πόροι.arsc- επίσης πόροι, αλλά διαφορετικού είδους - συγκεκριμένα, συμβολοσειρές (ναι, αυτό το αρχείο μπορεί να χρησιμοποιηθεί για ρωσοποίηση!).

Τα αρχεία και οι κατάλογοι που αναφέρονται βρίσκονται, αν όχι σε όλα, τότε, ίσως, στη συντριπτική πλειοψηφία των APK. Ωστόσο, υπάρχουν μερικά ακόμη όχι και τόσο συνηθισμένα αρχεία/κατάλογοι που αξίζει να αναφερθούν:

  • περιουσιακά στοιχεία- ανάλογο πόρων. Η κύρια διαφορά είναι ότι για να αποκτήσετε πρόσβαση σε έναν πόρο πρέπει να γνωρίζετε το αναγνωριστικό του, αλλά η λίστα των στοιχείων μπορεί να ληφθεί δυναμικά χρησιμοποιώντας τη μέθοδο AssetManager.list() στον κώδικα της εφαρμογής.
  • lib- εγγενείς βιβλιοθήκες Linux γραμμένες με χρήση NDK (Native Development Kit).

Αυτός ο κατάλογος χρησιμοποιείται από παραγωγούς παιχνιδιών, τοποθετώντας εκεί τη μηχανή παιχνιδιών γραμμένη σε C/C++, καθώς και από δημιουργούς εφαρμογών υψηλής απόδοσης (για παράδειγμα, Google Chrome). Καταλάβαμε τη συσκευή. Πώς όμως αποκτάτε το αρχείο πακέτου της εφαρμογής που σας ενδιαφέρει; Δεδομένου ότι δεν είναι δυνατή η λήψη αρχείων APK από τη συσκευή χωρίς root (βρίσκονται στον κατάλογο /data/app) και η ριζοβολία δεν συνιστάται πάντα, υπάρχουν τουλάχιστον τρεις τρόποι για να μεταφέρετε το αρχείο εφαρμογής στον υπολογιστή σας:

  • Επέκταση APK Downloader για Chrome.
  • Πραγματική εφαρμογή APK Leecher.
  • διάφορα αρχεία φιλοξενίας και Varezniks.

Ποιο να χρησιμοποιήσω είναι θέμα γούστου. προτιμάμε να χρησιμοποιούμε μεμονωμένες εφαρμογές, επομένως, θα περιγράψουμε τη χρήση του Real APK Leecher, ειδικά επειδή είναι γραμμένο σε Java και, κατά συνέπεια, θα λειτουργεί είτε σε Windows είτε σε Nix.

Μετά την εκκίνηση του προγράμματος, πρέπει να συμπληρώσετε τρία πεδία: Email, Κωδικός πρόσβασης και Αναγνωριστικό συσκευής - και να επιλέξετε μια γλώσσα. Τα δύο πρώτα είναι το e-mail και ο κωδικός πρόσβασης του λογαριασμού σας Google που χρησιμοποιείτε στη συσκευή. Το τρίτο είναι το αναγνωριστικό συσκευής και μπορείτε να το λάβετε πληκτρολογώντας τον κωδικό στο dialer # #8255## και στη συνέχεια εύρεση της γραμμής Αναγνωριστικό συσκευής. Κατά τη συμπλήρωση, χρειάζεται μόνο να εισαγάγετε το αναγνωριστικό χωρίς το πρόθεμα android.

Μετά τη συμπλήρωση και την αποθήκευση, εμφανίζεται συχνά το μήνυμα "Σφάλμα κατά τη σύνδεση με τον διακομιστή". Δεν έχει να κάνει με Google Play, οπότε μη διστάσετε να το αγνοήσετε και να αναζητήσετε πακέτα που σας ενδιαφέρουν.

Προβολή και Τροποποίηση

Ας υποθέσουμε ότι βρήκατε ένα πακέτο που σας ενδιαφέρει, το κατεβάσατε, το αποσυσκευάσατε... και όταν προσπαθήσατε να δείτε κάποιο αρχείο XML, ανακαλύψατε με έκπληξη ότι το αρχείο δεν ήταν κείμενο. Πώς να το απομεταγλωττίσω και πώς να δουλέψετε με πακέτα γενικά; Είναι πραγματικά απαραίτητη η εγκατάσταση του SDK; Όχι, δεν είναι απαραίτητο να εγκαταστήσετε το SDK καθόλου. Μάλιστα, για όλα τα βήματα του unboxing, της τροποποίησης και της συσκευασίας Πακέτα APKΑπαιτούνται τα ακόλουθα εργαλεία:

  • Αρχειοθέτηση ZIPγια αποσυσκευασία και συσκευασία.
  • smali- Dalvik εικονική μηχανή bytecode assembler/disassembler (code.google.com/p/smali);
  • aapt- ένα εργαλείο για τη συσκευασία πόρων (από προεπιλογή, οι πόροι αποθηκεύονται σε δυαδική μορφή για τη βελτιστοποίηση της απόδοσης της εφαρμογής). Περιλαμβάνεται στο Android SDK, αλλά μπορεί να ληφθεί ξεχωριστά.
  • υπογράφων- ένα εργαλείο για την ψηφιακή υπογραφή ενός τροποποιημένου πακέτου (bit.ly/Rmrv4M).

Μπορείτε να χρησιμοποιήσετε όλα αυτά τα εργαλεία ξεχωριστά, αλλά αυτό είναι άβολο, επομένως είναι καλύτερο να χρησιμοποιείτε λογισμικό υψηλότερου επιπέδου που έχει κατασκευαστεί στη βάση τους. Εάν εργάζεστε σε Linux ή Mac OS X, υπάρχει ένα εργαλείο που ονομάζεται apktool. Σας επιτρέπει να αποσυσκευάζετε πόρους σε πρωτότυπη εμφάνιση(συμπεριλαμβανομένων των δυαδικών αρχείων XML και arsc), δημιουργήστε ξανά το πακέτο με αλλαγμένους πόρους, αλλά δεν γνωρίζει πώς να υπογράφει πακέτα, επομένως θα πρέπει να εκτελέσετε το βοηθητικό πρόγραμμα υπογραφών με μη αυτόματο τρόπο. Παρά το γεγονός ότι το βοηθητικό πρόγραμμα είναι γραμμένο σε Java, η εγκατάστασή του είναι αρκετά μη τυπική. Πρώτα πρέπει να λάβετε το ίδιο το αρχείο jar:

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $ εξαγωγή PATH=~/bin:$PATH

Εάν εργάζεστε σε Windows, τότε υπάρχει ένα εξαιρετικό εργαλείο για αυτό που ονομάζεται Virtuous Ten Studio, το οποίο επίσης συγκεντρώνει όλα αυτά τα εργαλεία (συμπεριλαμβανομένου του ίδιου του apktool), αλλά αντί για μια διεπαφή CLI παρέχει στον χρήστη μια διαισθητική γραφική διεπαφή με την οποία μπορείτε να εκτελέστε λειτουργίες αποσυσκευασίας, αποσυναρμολόγησης και αποσυμπίλησης με λίγα κλικ. Αυτό το εργαλείο είναι Donation-ware, δηλαδή μερικές φορές εμφανίζονται παράθυρα που σας ζητούν να λάβετε άδεια, αλλά τελικά αυτό μπορεί να γίνει ανεκτή. Δεν έχει νόημα να το περιγράψουμε, γιατί μπορείτε να κατανοήσετε τη διεπαφή σε λίγα λεπτά. Αλλά το apktool, λόγω της φύσης της κονσόλας, θα πρέπει να συζητηθεί λεπτομερέστερα.


Ας δούμε τις επιλογές του apktool. Με λίγα λόγια, υπάρχουν τρεις βασικές εντολές: d (αποκωδικοποίηση), b (build) και if (εγκατάσταση πλαισίου). Εάν όλα είναι ξεκάθαρα με τις δύο πρώτες εντολές, τότε τι κάνει η τρίτη, υπό όρους δήλωση; Αποσυσκευάζει το καθορισμένο πλαίσιο διεπαφής χρήστη, το οποίο είναι απαραίτητο σε περιπτώσεις όπου αναλύετε οποιοδήποτε πακέτο συστήματος.

Ας δούμε τις πιο ενδιαφέρουσες επιλογές της πρώτης εντολής:

  • -μικρό- μην αποσυναρμολογείτε αρχεία dex.
  • -r- μην αποσυσκευάζετε πόρους.
  • -σι- μην εισάγετε πληροφορίες εντοπισμού σφαλμάτων στα αποτελέσματα της αποσυναρμολόγησης του αρχείου dex.
  • --πλαίσιο-διαδρομή- χρησιμοποιήστε το καθορισμένο πλαίσιο διεπαφής χρήστη αντί για αυτό που είναι ενσωματωμένο στο apktool. Τώρα ας δούμε μερικές επιλογές για την εντολή b:
  • -φά- αναγκαστική συναρμολόγηση χωρίς έλεγχο αλλαγών.
  • -ένα- υποδείξτε τη διαδρομή προς το aapt (εργαλείο για τη δημιουργία αρχείου APK), εάν για κάποιο λόγο θέλετε να το χρησιμοποιήσετε από άλλη πηγή.

Η χρήση του apktool είναι πολύ απλή για να γίνει αυτό, απλώς καθορίστε μία από τις εντολές και τη διαδρομή προς το APK, για παράδειγμα:

$ apktool d mail.apk

Μετά από αυτό, όλα τα εξαγόμενα και αποσυναρμολογημένα αρχεία του πακέτου θα εμφανιστούν στον κατάλογο αλληλογραφίας.

Παρασκευή. Απενεργοποίηση διαφήμισης

Η θεωρία είναι, φυσικά, καλή, αλλά γιατί χρειάζεται αν δεν ξέρουμε τι να κάνουμε με το μη συσκευασμένο πακέτο; Ας προσπαθήσουμε να εφαρμόσουμε τη θεωρία προς όφελός μας, δηλαδή να τροποποιήσουμε κάποιο λογισμικό ώστε να μην μας δείχνει διαφημίσεις. Για παράδειγμα, ας είναι Virtual Torch - ένας εικονικός φακός. Αυτό το λογισμικό είναι ιδανικό για εμάς, γιατί είναι γεμάτο με ενοχλητικές διαφημίσεις και, επιπλέον, είναι αρκετά απλό για να μην χαθούμε στη ζούγκλα του κώδικα.


Έτσι, χρησιμοποιώντας μία από τις παραπάνω μεθόδους, κατεβάστε την εφαρμογή από την αγορά. Εάν αποφασίσετε να χρησιμοποιήσετε το Virtuous Ten Studio, απλώς ανοίξτε το αρχείο APK στην εφαρμογή και εξαγάγετε το, για το οποίο δημιουργήστε ένα έργο (Αρχείο -> Νέο έργο), στη συνέχεια στο κατάλογος συμφραζόμενωνέργο, επιλέξτε Εισαγωγή αρχείου. Εάν η επιλογή σας έπεσε στο apktool, τότε απλώς εκτελέστε μία εντολή:

$ apktool d com.kauf.particle.virtualtorch.apk

Μετά από αυτό, ένα δέντρο αρχείων παρόμοιο με αυτό που περιγράφεται στην προηγούμενη ενότητα θα εμφανιστεί στον κατάλογο com.kauf.particle.virtualtorch, αλλά με έναν πρόσθετο κατάλογο smali αντί για αρχεία dex και ένα αρχείο apktool.yml. Το πρώτο περιέχει αποσυναρμολογημένο κώδικα του εκτελέσιμου αρχείου dex της εφαρμογής, το δεύτερο περιέχει πληροφορίες υπηρεσίας που είναι απαραίτητες για το apktool να συναρμολογήσει το πακέτο πίσω.

Το πρώτο μέρος που πρέπει να κοιτάξουμε είναι, φυσικά, το AndroidManifest.xml. Και εδώ αμέσως συναντάμε την εξής γραμμή:

Δεν είναι δύσκολο να μαντέψει κανείς ότι είναι υπεύθυνη για τη χορήγηση αδειών στην εφαρμογή για χρήση της σύνδεσης στο Διαδίκτυο. Στην πραγματικότητα, αν θέλουμε απλώς να απαλλαγούμε από τη διαφήμιση, πιθανότατα θα χρειαστεί απλώς να αποκλείσουμε την εφαρμογή από το Διαδίκτυο. Ας προσπαθήσουμε να το κάνουμε αυτό. Διαγράφουμε την καθορισμένη γραμμή και προσπαθούμε να δημιουργήσουμε το λογισμικό χρησιμοποιώντας το apktool:

$ apktool b com.kauf.particle.virtualtorch

Το αρχείο APK που προκύπτει θα εμφανιστεί στον κατάλογο com.kauf.particle.virtualtorch/build/. Ωστόσο, δεν θα είναι δυνατή η εγκατάστασή του, καθώς δεν έχει ψηφιακή υπογραφή και αθροίσματα ελέγχου αρχείων (απλώς δεν έχει κατάλογο META-INF/). Πρέπει να υπογράψουμε το πακέτο χρησιμοποιώντας το βοηθητικό πρόγραμμα apk-signer. Ξεκίνησε. Η διεπαφή αποτελείται από δύο καρτέλες - στην πρώτη (Γεννήτρια κλειδιών) δημιουργούμε κλειδιά, στη δεύτερη (APK Signer) υπογράφουμε. Για να δημιουργήσουμε το δικό μας ιδιωτικό κλειδί, συμπληρώστε τα παρακάτω πεδία:

  • Αρχείο στόχου- αρχείο εξόδου keystore? Συνήθως αποθηκεύει ένα ζευγάρι κλειδιά.
  • Κωδικός πρόσβασηςΚαι Επιβεβαιώνω- κωδικός για την αποθήκευση.
  • Ψευδώνυμο- όνομα του κλειδιού στο χώρο αποθήκευσης.
  • Ψευδώνυμο κωδικόςΚαι Επιβεβαιώνω- κωδικός μυστικού κλειδιού.
  • Εγκυρότητα- περίοδος ισχύος (σε έτη). Η προεπιλεγμένη τιμή είναι η βέλτιστη.

Τα υπόλοιπα πεδία είναι, γενικά, προαιρετικά - αλλά τουλάχιστον ένα πρέπει να συμπληρωθεί.


ΠΡΟΕΙΔΟΠΟΙΗΣΗ

Για να υπογράψετε μια εφαρμογή χρησιμοποιώντας το apk-signer, πρέπει να εγκαταστήσετε το Android SDK και να καθορίσετε πλήρης διαδρομήπριν από αυτό στις ρυθμίσεις της εφαρμογής.

Όλες οι πληροφορίες παρέχονται μόνο για ενημερωτικούς σκοπούς. Ούτε οι συντάκτες ούτε ο συγγραφέας ευθύνονται για κανένα πιθανή βλάβηπου προκαλούνται από τα υλικά αυτού του άρθρου.

Τώρα μπορείτε να υπογράψετε το APK με αυτό το κλειδί. Στην καρτέλα APK Signer, επιλέξτε το αρχείο που δημιουργήθηκε πρόσφατα, εισαγάγετε τον κωδικό πρόσβασης, το ψευδώνυμο κλειδιού και τον κωδικό πρόσβασης για αυτό και, στη συνέχεια, βρείτε αρχείο APKκαι με τόλμη πάτα το κουμπί"Σημάδι" Αν όλα πάνε καλά, το πακέτο θα υπογραφεί.

ΠΛΗΡΟΦΟΡΙΕΣ

Εφόσον υπογράψαμε το πακέτο με το δικό μας κλειδί, θα έρχεται σε διένεξη με την αρχική εφαρμογή, πράγμα που σημαίνει ότι όταν προσπαθήσουμε να ενημερώσουμε το λογισμικό μέσω της αγοράς, θα λάβουμε ένα σφάλμα.

Απαιτείται μόνο ψηφιακή υπογραφή λογισμικό τρίτων, οπότε αν κάνετε τροποποίηση εφαρμογές συστήματος, τα οποία εγκαθίστανται με αντιγραφή στον κατάλογο /system/app/, δεν χρειάζεται να τα υπογράψετε.

Μετά από αυτό, κατεβάστε το πακέτο στο smartphone σας, εγκαταστήστε το και εκκινήστε το. Voila, η διαφήμιση έφυγε! Αντίθετα, όμως, εμφανίστηκε ένα μήνυμα ότι δεν έχουμε Internet ή ότι δεν έχουμε τα κατάλληλα δικαιώματα. Θεωρητικά, αυτό μπορεί να είναι αρκετό, αλλά το μήνυμα φαίνεται ενοχλητικό και, για να είμαστε ειλικρινείς, απλά σταθήκαμε τυχεροί με μια ηλίθια εφαρμογή. Το κανονικά γραμμένο λογισμικό πιθανότατα θα διευκρινίσει τα διαπιστευτήριά του ή θα ελέγξει για σύνδεση στο Διαδίκτυο και διαφορετικά απλώς θα αρνηθεί την εκκίνηση. Πώς να είσαι σε αυτή την περίπτωση; Φυσικά, επεξεργαστείτε τον κώδικα.

Συνήθως, οι συντάκτες εφαρμογών δημιουργούν ειδικές κλάσεις για την εμφάνιση διαφημίσεων και μεθόδους κλήσης αυτών των τάξεων όταν εκκινείται η εφαρμογή ή μία από τις «δραστηριότητές» της (με απλά λόγια, οθόνες εφαρμογών). Ας προσπαθήσουμε να βρούμε αυτές τις τάξεις. Πηγαίνουμε στον κατάλογο smali, μετά com (το org περιέχει μόνο την ανοιχτή βιβλιοθήκη γραφικών cocos2d), μετά kauf (εδώ είναι, γιατί αυτό είναι το όνομα του προγραμματιστή και όλος ο κώδικάς του είναι εκεί) - και εδώ είναι, τον κατάλογο μάρκετινγκ. Μέσα βρίσκουμε ένα σωρό αρχεία με την επέκταση smali. Πρόκειται για κατηγορίες και η πιο αξιοσημείωτη από αυτές είναι η κατηγορία Ad.smali, από το όνομα της οποίας είναι εύκολο να μαντέψει κανείς ότι είναι αυτή που εμφανίζει διαφημίσεις.

Θα μπορούσαμε να αλλάξουμε τη λογική της λειτουργίας του, αλλά θα ήταν πολύ πιο εύκολο να αφαιρέσουμε απλώς τις κλήσεις σε οποιαδήποτε από τις μεθόδους του από την ίδια την εφαρμογή. Επομένως, αφήνουμε τον κατάλογο μάρκετινγκ και πηγαίνουμε στον γειτονικό κατάλογο σωματιδίων και μετά στον εικονικό φακό. Ιδιαίτερη προσοχήΤο αρχείο MainActivity.smali αξίζει αυτό. Αυτό είναι στάνταρ για Κατηγορία Android, το οποίο δημιουργείται από το Android SDK και εγκαθίσταται ως σημείο εισόδου στην εφαρμογή (ανάλογα με την κύρια λειτουργία στο C). Ανοίξτε το αρχείο για επεξεργασία.

Στο εσωτερικό υπάρχει κωδικός smali (τοπικός συναρμολογητής). Είναι αρκετά μπερδεμένο και δύσκολο να διαβαστεί λόγω της φύσης του χαμηλού επιπέδου, επομένως δεν θα το μελετήσουμε, αλλά απλώς θα βρούμε όλες τις αναφορές στην κατηγορία διαφημίσεων στον κώδικα και θα τις σχολιάσουμε. Εισάγουμε τη γραμμή "Διαφήμιση" στην αναζήτηση και φτάνουμε στη γραμμή 25:

Ιδιωτική διαφήμιση πεδίου:Lcom/kauf/μάρκετινγκ/Διαφήμιση;

Εδώ δημιουργείται ένα πεδίο διαφήμισης για την αποθήκευση ενός αντικειμένου κατηγορίας διαφημίσεων. Σχολιάζουμε τοποθετώντας ένα σύμβολο ### μπροστά από τη γραμμή. Συνεχίζουμε την αναζήτηση. Γραμμή 423:

New-instance v3, Lcom/kauf/marketing/Ad;

Εδώ γίνεται η δημιουργία αντικειμένου. Ας σχολιάσουμε. Συνεχίζουμε την αναζήτηση και βρίσκουμε στις γραμμές 433, 435, 466, 468, 738, 740, 800 και 802 κλήσεις σε μεθόδους της κατηγορίας Ad. Ας σχολιάσουμε. Δες ότι αυτό είναι. Αποθηκεύσετε. Τώρα το πακέτο πρέπει να συναρμολογηθεί ξανά και να ελεγχθεί για λειτουργικότητα και παρουσία διαφήμισης. Για την καθαρότητα του πειράματος, επιστρέφουμε τη γραμμή που αφαιρέθηκε από το AndroidManifest.xml, συναρμολογούμε το πακέτο, υπογράφουμε και εγκαθιστούμε.

Το πειραματόζωό μας. Η διαφήμιση είναι ορατή

Ωχ! Η διαφήμιση εξαφανίστηκε μόνο κατά την εκτέλεση της εφαρμογής, αλλά παρέμεινε στο κύριο μενού, το οποίο βλέπουμε όταν εκκινούμε το λογισμικό. Λοιπόν, περιμένετε, αλλά το σημείο εισόδου είναι η κλάση MainActivity και η διαφήμιση εξαφανίστηκε κατά την εκτέλεση της εφαρμογής, αλλά παρέμεινε στο κύριο μενού, άρα το σημείο εισόδου είναι διαφορετικό; Για να προσδιορίσετε το πραγματικό σημείο εισόδου, ανοίξτε ξανά το αρχείο AndroidManifest.xml. Και ναι, περιέχει τις ακόλουθες γραμμές:

Μας λένε (και, πιο σημαντικό, στο android) ότι μια δραστηριότητα με το όνομα Έναρξη πρέπει να ξεκινήσει ως απάντηση στη δημιουργία μιας πρόθεσης (συμβάντος) android.intent.action.MAIN από την κατηγορία android.intent.category.LAUNCHER. Αυτό το συμβάν δημιουργείται όταν πατάτε στο εικονίδιο της εφαρμογής στη λειτουργία εκκίνησης, επομένως καθορίζει το σημείο εισόδου, δηλαδή την κλάση Έναρξη. Πιθανότατα, ο προγραμματιστής πρώτα έγραψε μια εφαρμογή χωρίς κύριο μενού, το σημείο εισόδου της οποίας ήταν η τυπική κλάση MainActivity, και στη συνέχεια πρόσθεσε ένα νέο παράθυρο (δραστηριότητα) που περιέχει το μενού και περιγράφεται στην κλάση Έναρξη, και το έκανε χειροκίνητα την καταχώρηση σημείο.

Ανοίξτε το αρχείο Start.smali και αναζητήστε ξανά τη γραμμή "Ad", βρίσκουμε στις γραμμές 153 και 155 μια αναφορά στην κλάση FirstAd. Είναι επίσης στον πηγαίο κώδικα και, αν κρίνουμε από το όνομα, είναι υπεύθυνος για την εμφάνιση διαφημίσεων στην κύρια οθόνη. Ας δούμε περαιτέρω, υπάρχει η δημιουργία ενός στιγμιότυπου της κλάσης FirstAd και μια πρόθεση που, σύμφωνα με το πλαίσιο, σχετίζεται με αυτήν την περίπτωση, και στη συνέχεια η ετικέτα cond_10, η υπό όρους μετάβαση στην οποία πραγματοποιείται ακριβώς πριν από τη δημιουργία μιας παρουσίας της τάξης:

If-ne p1, v0, :cond_10 .line 74 new-instance v0, Landroid/content/Intent; ... :cond_10

Πιθανότατα, το πρόγραμμα υπολογίζει με κάποιο τρόπο τυχαία εάν η διαφήμιση πρέπει να εμφανίζεται στην κύρια οθόνη και, αν όχι, μεταβαίνει απευθείας στο cond_10. Εντάξει, ας απλοποιήσουμε την εργασία της και ας αντικαταστήσουμε τη μετάβαση υπό όρους με μια άνευ όρων:

#if-ne p1, v0, :cond_10 goto:cond_10

Δεν υπάρχουν περισσότερες αναφορές για το FirstAd στον κώδικα, επομένως κλείνουμε το αρχείο και συναρμολογούμε ξανά τον εικονικό μας φακό χρησιμοποιώντας το apktool. Αντιγράψτε το στο smartphone σας, εγκαταστήστε το, εκκινήστε το. Voila, όλες οι διαφημίσεις έχουν εξαφανιστεί, για το οποίο συγχαίρουμε όλους μας.

Αποτελέσματα

Αυτό το άρθρο είναι απλώς μια σύντομη εισαγωγή στις μεθόδους εισβολής και τροποποίησης εφαρμογών Android. Πολλά ζητήματα παρέμειναν στο παρασκήνιο, όπως η κατάργηση προστασίας, η ανάλυση ασαφούς κώδικα, η μετάφραση και η αντικατάσταση πόρων εφαρμογών, καθώς και η τροποποίηση εφαρμογών που γράφτηκαν με χρήση του Android NDK. Ωστόσο, έχοντας βασικές γνώσεις, είναι μόνο θέμα χρόνου να τα καταλάβουμε όλα.

Λοιπόν, το βιβλίο του Goloshchapov έχει επίσης μια καλή περιγραφή. Επειδή τα άρθρα μπορούν να εξαφανιστούν στο διαδίκτυο, εδώ θα κάνω μια δωρεάν συλλογή όλων των παραπάνω πηγών. Και ταυτόχρονα διορθώνω ανακρίβειες. Δεδομένου ότι η μετάφραση ορισμένων στοιχείων (για παράδειγμα ) Λοιπόν, γενικά δεν είναι καν κοντά στο πρωτότυπο. Βασικά, όλα τα άρθρα είναι copy-paste και δεν είναι ξεκάθαρο ποιος έσπασε ποιον. Αλλά, με τον ένα ή τον άλλο τρόπο, βασικά η περιγραφή αυτού του αρχείου και ο σκοπός του σε αυτά τα άρθρα συμπίπτει με το πρωτότυπο.
Το κάνω αυτό ως υπενθύμιση στον εαυτό μου, και αν είναι χρήσιμο σε οποιονδήποτε άλλο, αυτό είναι καλό.

Το αρχείο AndroidManifest.xml καθορίζει τη διαμόρφωση της εφαρμογής:

  • δηλώνει το όνομα του πακέτου Java της εφαρμογής, το οποίο λειτουργεί ως μοναδικό αναγνωριστικό
  • δηλώνει τα ελάχιστα και μέγιστα επίπεδα API που απαιτούνται για τη λειτουργία της εφαρμογής
  • περιγράφει τα στοιχεία της εφαρμογής (Δραστηριότητα, Υπηρεσία, Δέκτης εκπομπής και πάροχος περιεχομένου)
  • παραθέτει τυχόν βιβλιοθήκες που σχετίζονται με την εφαρμογή (εκτός από τις προεπιλεγμένες βιβλιοθήκες Android)
  • δηλώνει τα δικαιώματα που απαιτούνται για τη λειτουργία της εφαρμογής (για παράδειγμα, πρόσβαση στο δίκτυο, άδεια αποστολής SMS κ.λπ.)
Στο παρακάτω σχήμα μπορείτε να δείτε τη γενική δομή του αρχείου δήλωσης και τα στοιχεία του. Το σχέδιο είναι παρμένο από το βιβλίο του Goloshchapov και δεν περιέχει κάποια στοιχεία. Την περιγραφή των στοιχείων που λείπουν την μετέφρασα μόνος μου. Αλλά κατ 'αρχήν δεν υπάρχουν πολλά από αυτά.

Η πλήρης περιγραφή βρίσκεται στο alma mater, αλλά θα την δώσω και εδώ για μεγαλύτερη σαφήνεια.
. . . . . . . . .
Η σειρά διάταξης των στοιχείων που βρίσκονται στο ίδιο επίπεδο είναι αυθαίρετη. Όλες οι τιμές ορίζονται μέσω των χαρακτηριστικών στοιχείων. Το στοιχείο είναι το κύριο στοιχείο της δήλωσης και περιέχει πολλά θυγατρικά στοιχεία που καθορίζουν τη δομή και τη λειτουργία της εφαρμογής. Στοιχεία , Και είναι υποχρεωτικά. Άλλα στοιχεία είναι προαιρετικά και χρησιμοποιούνται στο μανιφέστο εάν είναι απαραίτητο.

Στοιχείο είναι το ριζικό στοιχείο του αρχείου AndroidManifest.xml. Από προεπιλογή, ο Οδηγός νέου έργου Android στο Eclipse δημιουργεί αυτό το στοιχείο με τέσσερα χαρακτηριστικά:

Αυτά τα χαρακτηριστικά απαιτούνται για οποιαδήποτε εφαρμογή Android και έχουν τον ακόλουθο σκοπό:

xmins: android— ορίζει τον χώρο ονομάτων Android. Αυτή η τιμή είναι πάντα η ίδια για όλες τις εφαρμογές.

πακέτο- Καθορίζει το μοναδικό όνομα του πακέτου εφαρμογής που καθορίσατε κατά τη δημιουργία του έργου.

Γιατί πρέπει να προσδιορίσετε το πακέτο; Εάν θέλετε να ανεβάσετε την εφαρμογή σας στο Google Play, ελέγχει τη μοναδικότητα κατά την αποδοχή της εφαρμογής, επομένως συνιστάται να χρησιμοποιήσετε το όνομά σας για να αποφύγετε διενέξεις με άλλους προγραμματιστές.

android:versionCode- ουσιαστικά αυτή είναι μια έκδοση της εφαρμογής σας. Όταν κυκλοφορείτε μια νέα έκδοση, την υποδεικνύετε σε αυτό το πεδίο, πρέπει να είναι ακέραιος.

Παραπάνω μιλήσαμε για τη μοναδικότητα του πακέτου, επομένως, εάν έχετε ανεβάσει προηγουμένως την εφαρμογή σας στο Google Play, τότε όταν αποφασίσετε να κάνετε λήψη της ενημερωμένης έκδοσης της εφαρμογής, πρέπει να τηρείτε αρκετούς κανόνες. Το όνομα του πακέτου πρέπει να ταιριάζει με αυτό που έχει ήδη ληφθεί από το Google Play και να υποδεικνύει την έκδοση android:versionCodeπολύ ψηλότερα. Αλλά αυτό υπό την προϋπόθεση ότι κυκλοφορείτε μια νέα έκδοση της εφαρμογής, εάν θέλετε να προσθέσετε μια ελαφρώς διορθωμένη έκδοση, τότε διαβάστε παρακάτω.

Με την αλλαγή αυτή η παράμετροςκαι ανεβάζοντας την εφαρμογή στο Google Play, θα προσφερθεί σε όλους τους χρήστες της εφαρμογής σας να ενημερώσουν στη νέα έκδοση της εφαρμογής.

android:Όνομα έκδοσης- υποδεικνύει τον αριθμό έκδοσης χρήστη. Εάν εντοπίσατε πολλά ελαττώματα στην εφαρμογή σας και τα διορθώσετε, τότε σε αυτήν την περίπτωση μπορείτε να καθορίσετε μια νέα έκδοση για αυτό το πεδίο, η οποία θα πει στο Google Play ότι αυτή δεν είναι μια νέα έκδοση της εφαρμογής, αλλά μια βελτιωμένη. Μπορείτε να χρησιμοποιήσετε μια συμβολοσειρά ή έναν πόρο συμβολοσειράς για να ονομάσετε μια έκδοση.

Με την αλλαγή αυτής της παραμέτρου και τη μεταφόρτωση της εφαρμογής στο Google Play, θα προσφερθεί σε όλους τους χρήστες της εφαρμογής σας να ενημερώσουν στην τροποποιημένη έκδοση της εφαρμογής.

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

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

android:name='android.permission.CAMERA'– πρόσβαση στην κάμερα της συσκευής
android:name='android.permission.READ_CONTACTS'– πρόσβαση στη βάση δεδομένων επαφών

Στοιχείο δηλώνει μια άδεια που χρησιμοποιείται για τον περιορισμό της πρόσβασης σε ορισμένα στοιχεία ή λειτουργικότητα μιας δεδομένης εφαρμογής. Αυτή η ενότητα περιγράφει τα δικαιώματα που πρέπει να ζητήσουν άλλες εφαρμογές για να αποκτήσουν πρόσβαση στην αίτησή σας.

Μια εφαρμογή μπορεί επίσης να προστατεύσει τα δικά της στοιχεία (Δραστηριότητα, Υπηρεσία, Δέκτης εκπομπής και πάροχος περιεχομένου) με δικαιώματα. Μπορεί να χρησιμοποιήσει οποιαδήποτε από τις άδειες συστήματος που ορίζονται από το Android (αναφέρονται στο android.Manifest.permission) ή δηλώνονται από άλλες εφαρμογές και μπορεί επίσης να ορίσει τα δικά του δικαιώματα. Το νέο δικαίωμα πρέπει να δηλωθεί στο χαρακτηριστικό android:nameστοιχείο με τον εξής τρόπο:

permisson android:name=”com.samples.custom_permission”

Επιπλέον, χρησιμοποιούνται πρόσθετα χαρακτηριστικά:

android:label— όνομα άδειας που εμφανίζεται στον χρήστη
android:περιγραφή— περιγραφή άδειας
android: εικονίδιο- εικονίδιο άδειας
android:permissionGroup— καθορίζει τη συμμετοχή σε μια ομάδα αδειών
android:protectionLevel— επίπεδο προστασίας

Στοιχείο δηλώνει το όνομα βάσης για το δέντρο αδειών. Αυτό το στοιχείο δεν δηλώνει το ίδιο το δικαίωμα, αλλά μόνο έναν χώρο ονομάτων στον οποίο μπορούν να τοποθετηθούν περαιτέρω δικαιώματα.

Στοιχείο ορίζει ένα όνομα για ένα σύνολο λογικά σχετιζόμενων δικαιωμάτων. Αυτά μπορούν να δηλωθούν και τα δύο στην ίδια δήλωση με το στοιχείο Άδειες όπως διαφημίζονται αλλού. Αυτό το στοιχείο δεν δηλώνει μια άδεια απευθείας, μόνο μια κατηγορία στην οποία μπορούν να τοποθετηθούν δικαιώματα. Ένα δικαίωμα μπορεί να τοποθετηθεί σε μια ομάδα εκχωρώντας το όνομα της ομάδας στο χαρακτηριστικό permissionGroupστοιχείο .

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

Στοιχείο σας επιτρέπει να δηλώσετε τη συμβατότητα μιας εφαρμογής με μια καθορισμένη έκδοση (ή νεότερες εκδόσεις API) πλατφόρμες Android. Το επίπεδο API που δηλώνεται από την εφαρμογή συγκρίνεται με το επίπεδο API του συστήματος κινητής συσκευής στο οποίο είναι εγκατεστημένη η εφαρμογή.

Το κύριο χαρακτηριστικό που χρησιμοποιείται σε ένα στοιχείο είναι android:minSdkVersion, ορίζει το ελάχιστο επίπεδο API που απαιτείται για να λειτουργήσει η εφαρμογή. σύστημα Androidθα εμποδίσει τον χρήστη να εγκαταστήσει την εφαρμογή εάν το επίπεδο API του συστήματος είναι χαμηλότερο από την τιμή που ορίζεται σε αυτό το χαρακτηριστικό. Συνιστάται να δηλώνετε πάντα αυτό το χαρακτηριστικό, για παράδειγμα:

Χαρακτηριστικό android:targetSdkVersionεισήχθη ξεκινώντας με το επίπεδο API 4. Αυτός είναι ένας ακέραιος αριθμός που υποδεικνύει το επίπεδο API για το οποίο προορίζεται η εφαρμογή (στόχος, που σημαίνει σκοπός). Εάν αυτό το χαρακτηριστικό δεν έχει οριστεί, η προεπιλεγμένη τιμή του είναι minSdkVersion.

Αυτό το χαρακτηριστικό ενημερώνει το σύστημα ότι έχετε δοκιμάσει την εφαρμογή με αυτό το επίπεδο API και το σύστημα δεν πρέπει να επιτρέπει συμπεριφορές συμβατότητας, π.χ. εξομοίωση κλήσεων API που παρέχουν ειδικά πρόσθετα επεξεργασία λογισμικούορισμένες κλήσεις API) για τη διατήρηση της συμβατότητας προς τα εμπρός της εφαρμογής με την έκδοση συστήματος προορισμού. Η εφαρμογή μπορεί ακόμα να εκτελείται σε παλαιότερες εκδόσεις (μέχρι εκδόσεις όχι μικρότερες από minSdkVersion).

Καθώς το Android εξελίσσεται με κάθε νέα έκδοση, μπορεί να αλλάξει κάποια συμπεριφορά, ακόμη και η εμφάνιση της εφαρμογής. Ωστόσο, εάν το επίπεδο API της πλατφόρμας είναι υψηλότερο από την έκδοση που καθορίζεται στο targetSdkVersion της εφαρμογής, το σύστημα μπορεί να ενεργοποιήσει συμπεριφορές συμβατότητας για να διασφαλίσει ότι η εφαρμογή σας λειτουργεί όπως αναμένεται. Μπορείτε να αποτρέψετε τέτοιο χειρισμό συμβατότητας καθορίζοντας targetSdkVersion ίσο με το επίπεδο API της πλατφόρμας Android στην οποία εκτελείται η εφαρμογή. Για παράδειγμα, η ρύθμιση αυτής της τιμής σε "11" ή υψηλότερη θα επιτρέψει στο σύστημα να ορίσει ένα νέο προεπιλεγμένο θέμα (Holo) για την εφαρμογή σας όταν εκτελείται σε Android 3.0 ή νεότερη έκδοση και επίσης θα απενεργοποιήσει τη λειτουργία συμβατότητας οθόνης όταν το πρόγραμμα εκτελείται σε μεγάλες οθόνες(επειδή η υποστήριξη επιπέδου 11 API υπονοεί σιωπηρά υποστήριξη για μεγάλες οθόνες).

Υπάρχουν πολλές συμπεριφορές συμβατότητας που το σύστημα μπορεί να επιλύσει με βάση την τιμή αυτού του χαρακτηριστικού. Ορισμένες από αυτές τις συμπεριφορές περιγράφονται στην τεκμηρίωση της σχετικής έκδοσης πλατφόρμας, ανατρέξτε στην ενότητα Build.VERSION_CODES.

Για να διασφαλίσετε ότι η εφαρμογή σας συμμορφώνεται με κάθε νέα έκδοση Android, πρέπει να αυξήσετε την τιμή αυτού του χαρακτηριστικού ώστε να ταιριάζει με το πιο πρόσφατο επίπεδο API και, στη συνέχεια, πρέπει να δοκιμάσετε πλήρως τη συμπεριφορά της εφαρμογής σε αυτήν τη νέα έκδοση της πλατφόρμας.

Χαρακτηριστικό android:maxSdkVersionεισήχθη ξεκινώντας με το επίπεδο API 4. Αυτός είναι ένας ακέραιος αριθμός που υποδεικνύει το μέγιστο επίπεδο API στο οποίο μπορεί να εκτελεστεί η εφαρμογή.

Στις εκδόσεις Android 1.5, 1.6, 2.0 και 2.0.1, το σύστημα ελέγχει την τιμή αυτού του χαρακτηριστικού όταν εγκαθίσταται η εφαρμογή και όταν η εφαρμογή ελέγχεται για συμβατότητα μετά από ενημέρωση συστήματος. Σε κάθε περίπτωση, εάν το χαρακτηριστικό maxSdkVersion της εφαρμογής είναι μικρότερο από το API Επίπεδο συστήματος, τότε η εγκατάσταση της εφαρμογής θα απαγορευτεί. Όταν ελέγχετε μια εφαρμογή για συμβατότητα μετά από ενημέρωση συστήματος, αυτή η περίπτωση αντιστοιχεί στην πλήρη κατάργηση της εφαρμογής από τη συσκευή. Για να δείξετε πώς αυτό το χαρακτηριστικό μπορεί να επηρεάσει μια εφαρμογή μετά από μια ενημέρωση συστήματος, εξετάστε ένα παράδειγμα.

Η εφαρμογή δήλωσε maxSdkVersion="5" στο μανιφέστο της και δημοσιεύτηκε στο Google Play. Χρήστης συσκευές Android 1.6 (API Επίπεδο 4) κατέβασε και εγκατέστησε αυτήν την εφαρμογή. Μετά από αρκετές εβδομάδες, ο χρήστης έλαβε ένα μήνυμα από το over-the-air σύστημα με μια προσφορά να ενημερώσει το σύστημα σε Android 2.0 (API Επίπεδο 5). Μετά την εγκατάσταση αυτής της ενημέρωσης, το σύστημα έλεγξε το χαρακτηριστικό maxSdkVersion της εφαρμογής και επέτρεψε την περαιτέρω χρήση αυτής της εφαρμογής. Η εφαρμογή λειτούργησε καλά μετά από αυτό. Ωστόσο, μετά από κάποιο χρονικό διάστημα, η συσκευή αποδέχτηκε μια άλλη ενημέρωση συστήματος Android 2.0.1 (API Level 6). Μετά την ενημέρωση, το σύστημα δεν επιτρέπει την εκτέλεση της εφαρμογής επειδή το επίπεδο API συστήματος (6) είναι πλέον υψηλότερο από το μέγιστο επίπεδο που μπορεί να υποστηρίξει η εφαρμογή (5). Το σύστημα κάνει την εφαρμογή αόρατη στον χρήστη και την αφαιρεί από τη συσκευή.

Προειδοποίηση: Η χρήση αυτού του χαρακτηριστικού έχει καταργηθεί. Πρώτον, δεν χρειάζεται να ορίσετε αυτό το χαρακτηριστικό ως μέσο αποκλεισμού της εφαρμογής σας από την ανάπτυξη σε νέες εκδόσεις της πλατφόρμας Android, καθώς αυτές γίνονται διαθέσιμες. Για Android, ολοκληρώστε συμβατότητα προς τα πίσωπαλιές εφαρμογές για νέες εκδόσεις Android. Η εφαρμογή σας θα πρέπει να λειτουργεί σωστά σε όλες τις νέες εκδόσεις, αρκεί να χρησιμοποιεί μόνο το τυπικό API και να ακολουθεί τους καλύτερους κανόνες και πρακτικές ανάπτυξης. Δεύτερον, πρέπει να θυμάστε ότι η χρήση αυτού του χαρακτηριστικού θα οδηγήσει σε αυτόματη κατάργηση της εφαρμογής σας από συσκευές χρηστών που ενημερώνουν το σύστημά τους σε υψηλότερο επίπεδο API από αυτό που καθορίζεται στο χαρακτηριστικό. Οι περισσότερες συσκευές στις οποίες είναι πιθανό να εγκατασταθεί η εφαρμογή σας λαμβάνουν περιοδικές ενημερώσεις συστήματος εν κινήσει, στον αέρα, επομένως θα πρέπει να λάβετε υπόψη αυτό το εφέ πριν ορίσετε αυτό το χαρακτηριστικό για την εφαρμογή σας.

Μελλοντικός εκδόσεις Android(πέρα από το Android 2.0.1) δεν θα ελέγχει πλέον το maxSdkVersion και δεν θα επιβάλλει την τιμή του κατά την εγκατάσταση ή τον έλεγχο της συμβατότητας της εφαρμογής. Ωστόσο, το Google Play θα συνεχίσει να χρησιμοποιεί αυτό το χαρακτηριστικό ως φίλτρο όταν καθιστά διαθέσιμες εφαρμογές στους χρήστες για λήψη.

Στοιχείο καθορίζει το υλικό που απαιτείται για την εφαρμογή και διαμόρφωση λογισμικούκινητή συσκευή. Για παράδειγμα, μια εφαρμογή απαιτεί φυσικό πληκτρολόγιο ή trackball για να λειτουργήσει. Η προδιαγραφή χρησιμοποιείται για την αποφυγή εγκατάστασης μιας εφαρμογής σε συσκευές που δεν υποστηρίζουν την απαιτούμενη διαμόρφωση.

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

Μπορείτε να καθορίσετε οποιονδήποτε συνδυασμό περιέχει. παρακάτω συσκευές

reqFiveWayNav- χρησιμοποιήστε το true εάν η εφαρμογή απαιτεί μια συσκευή εισόδου που υποστηρίζει πλοήγηση προς τα επάνω, προς τα κάτω, προς τα αριστερά, προς τα δεξιά και να κάνετε κλικ στο επισημασμένο στοιχείο. Αυτές οι συσκευές περιλαμβάνουν trackballs και D-pads. Βασικά ξεπερασμένο
reqHardKeyboard- χρησιμοποιήστε true εάν η εφαρμογή απαιτεί πληκτρολόγιο υλικού.
reqKeyboardType- σας επιτρέπει να ορίσετε τον τύπο πληκτρολογίου: nokeys, qwerty, twelvekey, undefined
reqNavigation- καθορίστε μία από τις τιμές: nonnav, dpad, trackball, wheel ή undefined εάν απαιτείται συσκευή πλοήγησης
reqΟθόνη αφής- εάν απαιτείται οθόνη αφής, χρησιμοποιήστε την επιθυμητή τιμή από τις πιθανές επιλογές: notouch, stylus, finger, undefined. Τώρα σχεδόν όλες οι συσκευές περιέχουν οθόνη αφής, επομένως είναι επίσης ξεπερασμένη

Η εφαρμογή δεν θα εγκατασταθεί σε μια συσκευή που δεν ταιριάζει με τη διαμόρφωση που έχετε ορίσει. Στην ιδανική περίπτωση, θα πρέπει να αναπτύξετε μια εφαρμογή που θα λειτουργεί με οποιονδήποτε συνδυασμό συσκευών εισόδου. Σε αυτήν την περίπτωση δεν χρειάζεται.

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

android.hardware.camera.front- Απαιτείται κάμερα υλικού

android.hardware.camera.autofocus- Απαιτεί κάμερα με αυτόματη εστίαση

Όλες οι παράμετροι μπορούν να προβληθούν στο alma mater.

Στοιχείο καθορίζει τα μεγέθη οθόνης που απαιτούνται για την κανονική λειτουργία του προγράμματός σας και επιτρέπει την υποστήριξη συμβατότητας οθόνης για μεγέθη οθόνης μεγαλύτερα από αυτά που καθορίζονται σε αυτήν την παράμετρο.

Για μεγαλύτερη σαφήνεια, θα δώσω τη σύνταξη

Καθορίζει τα μεγέθη και τις πυκνότητες οθόνης που είναι συμβατά με την εφαρμογή σας. Μόνο ένα στοιχείο μπορεί να υπάρχει στο αρχείο δήλωσης, αλλά μπορεί να περιέχει πολλά στοιχεία . Για παράδειγμα:
... ...
Το σύστημα Android δεν διαβάζει αυτό το στοιχείο στο αρχείο δήλωσης, ούτε κατά την εγκατάσταση ούτε κατά την εκκίνηση της εφαρμογής.Αυτό το στοιχείο είναι καθαρά ενημερωτικό και χρησιμοποιείται μόνο από εξωτερικές υπηρεσίες όπως το Google Play για να φιλτράρουν την εμφάνιση της εφαρμογής σας στην αγορά. Δηλαδή, εάν ο χρήστης έχει παραμέτρους οθόνης διαφορετικές από αυτές που καθορίζονται σε αυτό το στοιχείο, τότε το Google Play απλά δεν θα του δείξει αυτήν την εφαρμογή.

Γενικά, δεν πρέπει να χρησιμοποιείτε αυτό το στοιχείο.

Αυτό το στοιχείο δηλώνει τη μορφή συμπίεσης μιας μεμονωμένης υφής GL που υποστηρίζεται από την εφαρμογή σας. Εάν η εφαρμογή σας υποστηρίζει πολλές μορφές συμπίεσης υφής, τότε πρέπει να χρησιμοποιήσετε περισσότερα από ένα από αυτά τα στοιχεία. Για παράδειγμα:

Όλες οι τιμές μπορούν να προβληθούν σε αυτόν τον σύνδεσμο. Μπορείτε να διαβάσετε λίγο για αυτήν την παράμετρο στα ρωσικά.

Στοιχείο έχει πολύ πιο περίπλοκη δομή από όλα τα στοιχεία που αναφέρονται. Πήρα τη δομή αυτού του στοιχείου από το βιβλίο του Goloshchapov

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

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

Αυτά τα χαρακτηριστικά στοιχείων είναι υποχρεωτικά και καθορίζουν τα ακόλουθα:

android:name- όνομα τάξης. Το όνομα πρέπει να περιλαμβάνει τον πλήρη προσδιορισμό του πακέτου, αλλά εάν το όνομα του πακέτου έχει ήδη οριστεί στο ριζικό στοιχείο , το όνομα της κλάσης που υλοποιεί τη Δραστηριότητα μπορεί να γραφτεί σε συντομογραφία, παραλείποντας το όνομα του πακέτου.

android:label— μια ετικέτα κειμένου που εμφανίζεται στον χρήστη στην κεφαλίδα Δραστηριότητα.

Στοιχείο περιέχει πολλά άλλα χαρακτηριστικά που καθορίζουν τις αναλύσεις, τον προσανατολισμό της οθόνης κ.λπ. Αλλαγή της διαμόρφωσης κατά την εκτέλεση του προγράμματος

Όταν αλλάξει η γλώσσα, η περιοχή ή η διαμόρφωση υλικού, το Android σταματά όλες τις εφαρμογές και στη συνέχεια τις επανεκκινεί, φορτώνοντας ξανά τιμές από πόρους. Μια τέτοια συμπεριφορά δεν είναι πάντα κατάλληλη ή επιθυμητή. Για παράδειγμα, ορισμένες αλλαγές διαμόρφωσης (προσανατολισμός οθόνης στο διάστημα, προσβασιμότητα πληκτρολογίου) μπορεί να προκύψουν μόνο και μόνο επειδή ο χρήστης περιστρέφει τη συσκευή ή σύρει έξω το πληκτρολόγιο. Μπορείτε να προσαρμόσετε τον τρόπο με τον οποίο η εφαρμογή σας αντιδρά σε τέτοιες αλλαγές ανιχνεύοντάς τις και εκτελώντας τις. δικές τους ενέργειες. Για να αναγκάσετε μια Δραστηριότητα να παρακολουθεί τις αλλαγές διαμόρφωσης καθώς εκτελείται το πρόγραμμα, προσθέστε το χαρακτηριστικό στον κόμβο του στο μανιφέστο android:configChanges, υποδεικνύοντας ποια συμβάντα θέλετε να επεξεργαστείτε.

Ακολουθούν ορισμένες τιμές που μπορούν να χρησιμοποιηθούν για να περιγράψουν τις αλλαγές διαμόρφωσης:

προσανατολισμός— η θέση της οθόνης έχει αλλάξει από κατακόρυφο σε οριζόντιο (ή αντίστροφα).
πληκτρολόγιο Κρυφό— το πληκτρολόγιο είναι εκτεταμένο ή κρυφό.
fontScale— ο χρήστης άλλαξε το προτιμώμενο μέγεθος γραμματοσειράς.
μικρός λοβός— ο χρήστης έχει επιλέξει νέες ρυθμίσεις γλώσσας.
πληκτρολόγιο— ο τύπος πληκτρολογίου έχει αλλάξει. Για παράδειγμα, ένα τηλέφωνο μπορεί να έχει έναν πίνακα 12 πλήκτρων που, όταν περιστρέφεται, αποκαλύπτει ένα πλήρες πληκτρολόγιο.
οθόνη αφήςή πλοήγηση— ο τύπος πληκτρολογίου ή η μέθοδος πλοήγησης έχει αλλάξει. Κατά κανόνα, τέτοια γεγονότα δεν συμβαίνουν.

Σε ορισμένες περιπτώσεις, πολλαπλά συμβάντα θα ενεργοποιηθούν ταυτόχρονα. Για παράδειγμα, όταν ο χρήστης βγάζει το πληκτρολόγιο, οι περισσότερες συσκευές δημιουργούν συμβάντα πληκτρολόγιο ΚρυφόΚαι προσανατολισμός. Μπορείτε να επιλέξετε πολλά συμβάντα που θέλετε να επεξεργαστείτε μόνοι σας, διαχωρίζοντάς τα με το σύμβολο | .

Χαρακτηριστική παρουσία android:configChangesακυρώνει την επανεκκίνηση της εφαρμογής όταν καθορισμένες αλλαγέςδιαμορφώσεις. Αντίθετα, ενεργοποιείται η μέθοδος μέσα στη Δραστηριότητα onConfigurationChanged(). Αντικαταστήστε το για να μπορείτε να χειρίζεστε τις αλλαγές διαμόρφωσης. Χρησιμοποιήστε το αντικείμενο που πέρασε Διαμόρφωσηγια να αποκτήσετε νέες αξίες. Μην ξεχάσετε να καλέσετε την ομώνυμη μέθοδο από τη γονική κλάση και να φορτώσετε ξανά τις αλλαγμένες τιμές από όλους τους πόρους που χρησιμοποιούνται μέσα στη Δραστηριότητα.

@Override public void onConfigurationChanged(Configuration _newConfig) ( super.onConfigurationChanged(_newConfig); [ ... Ενημερώστε τη διεπαφή χρήστη χρησιμοποιώντας δεδομένα από τους πόρους... ] if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPEaction) (... σε αλλαγμένο προσανατολισμό οθόνης... ] ) if (_newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) ( [ ... Αντίδραση στην ώθηση προς τα έξω/ανάσυρση του πληκτρολογίου... ] ) )
Οποιεσδήποτε αλλαγές διαμόρφωσης που δεν έχουν επισημανθεί ρητά για επεξεργασία στην εφαρμογή σας θα έχουν ως αποτέλεσμα την επανεκκίνηση της Δραστηριότητας, παρακάμπτοντας την κλήση μεθόδου onConfigurationChanged .

Στοιχείο υποστηρίζει ένθετους κόμβους . Στοιχείο ορίζει τους τύπους προθέσεων στους οποίους μπορεί να ανταποκριθεί ένας Δέκτης Δραστηριότητας, Υπηρεσίας ή Εκπομπής. Ένα φίλτρο πρόθεσης παρέχει τη δυνατότητα στα στοιχεία πελάτη να ανακτούν τα Intents ενός δηλωμένου τύπου, φιλτράροντας αυτά που δεν έχουν νόημα για το στοιχείο και περιέχει θυγατρικά στοιχεία , , .


Στοιχείο προσθέτει μια ενέργεια στο φίλτρο πρόθεσης. Στοιχείο πρέπει να περιέχει ένα ή περισσότερα στοιχεία . Αν σε στοιχείο Εάν αυτά τα στοιχεία δεν υπάρχουν, τότε τα αντικείμενα intent δεν θα περάσουν μέσα από το φίλτρο. Παράδειγμα δήλωσης δράσης:

Αυτό σημαίνει ότι αυτή η Δραστηριότητα Εφαρμογής είναι η κύρια και όταν το σύστημα στέλνει ένα Intent για εκκίνηση της εφαρμογής, αυτή η Δραστηριότητα θα ανοίξει από προεπιλογή.


Στοιχείο καθορίζει την κατηγορία του στοιχείου που πρέπει να επεξεργαστεί η πρόθεση. Αυτές είναι σταθερές συμβολοσειράς που ορίζονται στην κλάση intent, για παράδειγμα:

Αυτό το χαρακτηριστικό προσδιορίζει ότι αυτή η εφαρμογή θα προστεθεί στον κατάλογο της εφαρμογής στη συσκευή Android. Και θα εμφανίζεται στο παράθυρο Application Launcher της κινητής συσκευής.


Στοιχείο προσθέτει μια προδιαγραφή δεδομένων στο φίλτρο πρόθεσης. Η προδιαγραφή μπορεί να είναι απλώς ένας τύπος δεδομένων (χαρακτηριστικό mimeType), ένα URI ή ένας τύπος δεδομένων συν ένα URI. Η έννοια ενός URI καθορίζεται από ξεχωριστά χαρακτηριστικά για κάθε τμήμα του, π.χ. Το URI χωρίζεται σε μέρη: android:scheme, android:host, android:port, android:path ή android:pathPrefix, android:pathPattern.


Στοιχείο ορίζει ένα ζεύγος ονόματος-τιμής για ένα στοιχείο πρόσθετων αυθαίρετων δεδομένων που μπορούν να παρέχονται στο γονικό στοιχείο. Ένα συστατικό στοιχείο μπορεί να περιέχει οποιοδήποτε αριθμό στοιχείων .


Στοιχείο είναι ένα ψευδώνυμο για τη Δραστηριότητα που ορίζεται στο χαρακτηριστικό targetActivity. Η δραστηριότητα στόχος πρέπει να είναι στην ίδια εφαρμογή με το ψευδώνυμο και πρέπει να δηλωθεί πριν από το ψευδώνυμο δραστηριότητας στο μανιφέστο. Ένα ψευδώνυμο αντιπροσωπεύει τη δραστηριότητα στόχο ως ανεξάρτητη οντότητα. Ένα ψευδώνυμο μπορεί να έχει το δικό του σύνολο φίλτρων πρόθεσης που καθορίζουν ποιες προθέσεις μπορούν να ενεργοποιήσουν τη δραστηριότητα στόχο και πώς το σύστημα θα χειριστεί αυτήν τη δραστηριότητα. Για παράδειγμα, τα φίλτρα πρόθεσης σε ένα ψευδώνυμο δραστηριότητας μπορούν να ορίσουν τις σημαίες android:name="android.intent.action.MAIN" και android:name="android.intent.category.LAUNCHER", προκαλώντας τη φόρτωση της δραστηριότητας στόχου όταν η εφαρμογή ξεκινά ακόμα και όταν αυτές οι σημαίες δεν έχουν οριστεί στα φίλτρα πρόθεσης στη δραστηριότητα προορισμού.

Στοιχεία , Και Δηλώνουν τα στοιχεία Υπηρεσία, Δέκτης εκπομπής και Πάροχος περιεχομένου, αντίστοιχα. Μην ξεχνάτε ότι τα στοιχεία που δεν έχουν δηλωθεί δεν θα εντοπιστούν από το σύστημα και δεν θα εκκινηθούν ποτέ. Αυτά τα στοιχεία έχουν πολλά χαρακτηριστικά που ορίζουν το όνομα, τη διαθεσιμότητα, τα δικαιώματα, τη διαδικασία κ.λπ.


Στοιχείο δηλώνει μια υπηρεσία ως ένα από τα στοιχεία της εφαρμογής. Όλες οι υπηρεσίες πρέπει να αντιπροσωπεύονται από ένα στοιχείο στο αρχείο δήλωσης. Οι υπηρεσίες που δεν έχουν δηλωθεί δεν θα εντοπιστούν από το σύστημα και δεν θα ξεκινήσουν ποτέ. Αυτό το στοιχείο έχει πολλά χαρακτηριστικά που ορίζουν όνομα, προσβασιμότητα, δικαιώματα, διεργασία κ.λπ. Υποστηρίζει ένθετους κόμβους


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


Στοιχείο δηλώνει έναν πάροχο περιεχομένου (πηγή δεδομένων) για τον έλεγχο της πρόσβασης στις βάσεις δεδομένων. Όλοι οι πάροχοι περιεχομένου που αποτελούν μέρος της εφαρμογής πρέπει να αντιπροσωπεύονται στα στοιχεία Στο αρχείο δήλωσης. Αν δεν δηλωθούν, δεν θα λειτουργήσουν γιατί δεν θα μπορεί να τα δει το σύστημα. Στοιχείο Περιέχει το δικό του σύνολο θυγατρικών στοιχείων για τον ορισμό δικαιωμάτων πρόσβασης δεδομένων:
  • ;
  • ;
Αυτό το στοιχείο έχει πολλά χαρακτηριστικά που ορίζουν το όνομα, τη διαθεσιμότητα, τα δικαιώματα, τη διαδικασία κ.λπ.


Στοιχείο είναι παιδί του . Καθορίζει σε ποιον μπορούν να παραχωρηθούν δικαιώματα σε υποσύνολα των δεδομένων του παρόχου περιεχομένου. Η χορήγηση άδειας είναι ένας τρόπος να επιτραπεί σε έναν πελάτη που δεν έχει άδεια πρόσβασης στα πλήρη δεδομένα να έχει πρόσβαση σε ένα υποσύνολο των δεδομένων που παρέχονται από τον πάροχο περιεχομένου. Εάν το χαρακτηριστικό granturiPermissions του παρόχου περιεχομένου είναι αληθές, τότε χορηγείται άδεια για τυχόν δεδομένα που παρέχονται από τον πάροχο περιεχομένου. Ωστόσο, εάν το χαρακτηριστικό οριστεί σε false, η άδεια μπορεί να παραχωρηθεί μόνο σε υποσύνολα των δεδομένων που ορίζονται από αυτό το στοιχείο. Ο πάροχος περιεχομένου μπορεί να περιέχει οποιοδήποτε αριθμό στοιχείων .


Στοιχείο - παιδί στοιχείο για . Καθορίζει τη διαδρομή και τα απαιτούμενα δικαιώματα για ένα συγκεκριμένο υποσύνολο δεδομένων εντός του παρόχου επιχειρησιακές πληροφορίες. Αυτό το στοιχείο μπορεί να οριστεί πολλές φορές για να παρέχει πολλαπλές διαδρομές.


Στοιχείο καθορίζει μια δημόσια βιβλιοθήκη με την οποία θα πρέπει να συνδεθεί η εφαρμογή. Αυτό το στοιχείο δίνει εντολή στο σύστημα να συμπεριλάβει κώδικα βιβλιοθήκης στο πρόγραμμα φόρτωσης κλάσης για το πακέτο εφαρμογής. Κάθε έργο είναι ομαδοποιημένο από προεπιλογή με τις βιβλιοθήκες Android, οι οποίες περιλαμβάνουν τα βασικά πακέτα για τη δημιουργία εφαρμογών (με κατηγορίες γενικού σκοπού όπως Activity, Service, Intent, View, Button, Application, ContentProvider, κ.λπ.). Ωστόσο, ορισμένα πακέτα (όπως χάρτες και awt) βρίσκονται σε ξεχωριστές βιβλιοθήκες που δεν συνδέονται αυτόματα με την εφαρμογή. Εάν η εφαρμογή χρησιμοποιεί πακέτα από αυτές τις βιβλιοθήκες ή άλλα από τρίτους προγραμματιστές, είναι απαραίτητο να γίνει σαφής σύνδεση με αυτές τις βιβλιοθήκες και η δήλωση πρέπει να περιέχει ξεχωριστό στοιχείο .

Όλα περιγράφηκαν εδώ πολύ σύντομα. Διαβάστε περισσότερα για το alma mater σας.

Ονομα Περιγραφή Ανάγκη
γεν Αρχεία που δημιουργούνται από την ίδια την Java. Εδώ είναι ένα σαν αυτό σημαντικό αρχείοόπως η R.java Ναί
AndroidManifest.xml Το αρχείο δήλωσης AndroidManifest.xml παρέχει στο σύστημα βασικές πληροφορίες σχετικά με το πρόγραμμα. Κάθε εφαρμογή πρέπει να έχει το δικό της αρχείο δήλωσης Ναί
src Ο κατάλογος που περιέχει τον πηγαίο κώδικα της εφαρμογής Ναί
περιουσιακά στοιχεία Αυθαίρετη συλλογή καταλόγων και αρχείων Οχι
res Ο κατάλογος που περιέχει πόρους εφαρμογής. Αυτός ο κατάλογος μπορεί να περιέχει υποφακέλους με δυνατότητα σχεδίασης, anim, διάταξη, μενού, τιμές, xml και raw (δείτε παρακάτω) Ναί

1.5.1. Αρχείο μανιφέστου AndroidManifest.xml

Το αρχείο δήλωσης AndroidManifest.xml παρέχει στο σύστημα βασικές πληροφορίες σχετικά με το πρόγραμμα. Κάθε εφαρμογή πρέπει να έχει το δικό της αρχείο AndroidManifest.xml. Μπορείτε να επεξεργαστείτε το αρχείο δήλωσης μη αυτόματα αλλάζοντας τον κώδικα XML ή μέσω οπτικός επεξεργαστής Manifest Editor, που επιτρέπει την οπτική και επεξεργασία κειμένουαρχείο δήλωσης εφαρμογής.

Σκοπός αρχείου:

  • περιγράφει τα στοιχεία της εφαρμογής - Δραστηριότητες, Υπηρεσίες, δέκτες εκπομπής και πάροχοι περιεχομένου.
  • περιέχει μια λίστα με τα απαραίτητα δικαιώματα για πρόσβαση σε προστατευμένα μέρη του API και αλληλεπίδραση με άλλες εφαρμογές.
  • δηλώνει τα δικαιώματα που πρέπει να έχουν οι εφαρμογές τρίτων για να αλληλεπιδρούν με στοιχεία αυτής της εφαρμογής·
  • δηλώνει το ελάχιστο επίπεδο Android API που απαιτείται για τη λειτουργία της εφαρμογής.
  • παραθέτει σχετικές βιβλιοθήκες.

Το ριζικό στοιχείο του μανιφέστου είναι . Εκτός από αυτό το στοιχείο, οι ετικέτες είναι απαραίτητα στοιχεία Και . Στοιχείο είναι το κύριο στοιχείο της δήλωσης και περιέχει πολλά θυγατρικά στοιχεία που καθορίζουν τη δομή και τη λειτουργία της εφαρμογής. Η σειρά διάταξης των στοιχείων που βρίσκονται στο ίδιο επίπεδο είναι αυθαίρετη. Όλες οι τιμές ορίζονται μέσω των χαρακτηριστικών στοιχείων. Εκτός από τα απαιτούμενα στοιχεία που αναφέρονται παραπάνω, η δήλωση χρησιμοποιεί άλλα στοιχεία όπως απαιτείται. Ας παραθέσουμε μερικά από αυτά:

  • είναι το ριζικό στοιχείο του μανιφέστου.

    Από προεπιλογή, το Eclipse δημιουργεί ένα στοιχείο με τέσσερα χαρακτηριστικά:

    Το xmlns:android ορίζει τον χώρο ονομάτων Android.

    Το πακέτο καθορίζει το μοναδικό όνομα του πακέτου εφαρμογής.

    Το android:versionCode δείχνει τον εσωτερικό αριθμό έκδοσης.

    android:versionName καθορίζει τον αριθμό έκδοσης χρήστη.

  • Δηλώνει μια άδεια που χρησιμοποιείται για τον περιορισμό της πρόσβασης σε ορισμένα στοιχεία ή λειτουργικότητα μιας δεδομένης εφαρμογής. Αυτή η ενότητα περιγράφει τα δικαιώματα που πρέπει να ζητήσουν άλλες εφαρμογές για να αποκτήσουν πρόσβαση στην εφαρμογή. Μια εφαρμογή μπορεί επίσης να προστατεύει τα δικά της στοιχεία (Δραστηριότητες, Υπηρεσίες, δέκτες εκπομπής και πάροχοι περιεχομένου) με άδειες. Μπορεί να χρησιμοποιήσει οποιοδήποτε από τα δικαιώματα του συστήματος, συγκεκριμένο Androidή δηλώνεται από άλλες εφαρμογές και μπορεί επίσης να ορίσει τα δικά του δικαιώματα.
  • ζητά τα δικαιώματα που πρέπει να παραχωρηθούν στην εφαρμογή από το σύστημα για να λειτουργήσει σωστά. Τα δικαιώματα παραχωρούνται κατά την εγκατάσταση της εφαρμογής και όχι κατά τη διάρκεια της εκτέλεσης της.

    Τα πιο συνηθισμένα δικαιώματα:

    INTERNET – Πρόσβαση στο Διαδίκτυο

    READ_CONTACTS – ανάγνωση (αλλά όχι εγγραφή) δεδομένων από το βιβλίο διευθύνσεων του χρήστη

    WRITE_CONTACTS – εγγραφή (αλλά όχι ανάγνωση) δεδομένων σε βιβλίο διευθύνσεωνχρήστης

    RECEIVE_SMS – επεξεργασία εισερχόμενων SMS

    ACCESS_FINE_LOCATION – ακριβής προσδιορισμός τοποθεσίας με χρήση GPS

  • Σας επιτρέπει να δηλώσετε τη συμβατότητα μιας εφαρμογής με μια καθορισμένη έκδοση (ή νεότερες εκδόσεις API) της πλατφόρμας Android. Το επίπεδο API που δηλώνεται από την εφαρμογή συγκρίνεται με το επίπεδο API του συστήματος κινητής συσκευής στο οποίο είναι εγκατεστημένη η εφαρμογή.

    Γνωρίσματα:

    android:minSdkVersion ορίζει το ελάχιστο επίπεδο API που απαιτείται για την εκτέλεση της εφαρμογής. Το σύστημα Android θα εμποδίσει τον χρήστη να εγκαταστήσει την εφαρμογή εάν το επίπεδο API του συστήματος είναι χαμηλότερο από την τιμή που ορίζεται σε αυτό το χαρακτηριστικό.

    android:maxSDKVersion σάς επιτρέπει να προσδιορίσετε την πιο πρόσφατη έκδοση που το πρόγραμμα είναι έτοιμο να υποστηρίξει.

    Το targetSDKVersion σάς επιτρέπει να καθορίσετε την πλατφόρμα για την οποία αναπτύχθηκε και δοκιμάστηκε η εφαρμογή.

  • υποδεικνύει τη διαμόρφωση υλικού και λογισμικού της κινητής συσκευής που απαιτείται για την εφαρμογή. Η προδιαγραφή χρησιμοποιείται για την αποφυγή εγκατάστασης μιας εφαρμογής σε συσκευές που δεν υποστηρίζουν την απαιτούμενη διαμόρφωση. Εάν η εφαρμογή σας μπορεί να λειτουργήσει με διαφορετικές διαμορφώσεις συσκευών, πρέπει να συμπεριλάβετε συγκεκριμένα στοιχεία στο μανιφέστο για κάθε διαμόρφωση.
  • δηλώνει ορισμένες λειτουργίες που απαιτούνται για τη λειτουργία της εφαρμογής. Με αυτόν τον τρόπο, η εφαρμογή δεν θα εγκατασταθεί σε συσκευές που δεν έχουν την απαιτούμενη λειτουργικότητα. Για παράδειγμα, μια εφαρμογή μπορεί να καθορίσει ότι απαιτεί κάμερα αυτόματης εστίασης. Εάν η συσκευή σας δεν διαθέτει ενσωματωμένη κάμερα με αυτόματη εστίαση, η εφαρμογή δεν θα εγκατασταθεί.

    Πιθανά χαρακτηριστικά:

    android.hardware.camera – απαιτεί κάμερα υλικού.

    android.hardware.camera.autofocus– Απαιτείται κάμερα με αυτόματη εστίαση.

  • καθορίζει την ανάλυση οθόνης που απαιτείται για τη λειτουργία της εφαρμογής. Προκαθορισμένο σύγχρονη εφαρμογήμε επίπεδο API 4 ή υψηλότερο υποστηρίζει όλα τα μεγέθη οθόνης και θα πρέπει να αγνοήσει αυτό το στοιχείο.
  • ένα από τα κύρια στοιχεία της δήλωσης, που περιέχει μια περιγραφή των στοιχείων της εφαρμογής. Περιέχει παιδικά στοιχεία ( , , , Και άλλα), τα οποία δηλώνουν καθένα από τα συστατικά που απαρτίζουν την εφαρμογή. Μπορεί να υπάρχει μόνο ένα στοιχείο σε μια δήλωση .

1.5.2. Πόροι

Στο Android, είναι κοινή πρακτική η αποθήκευση αντικειμένων όπως εικόνες, σταθερές συμβολοσειρών, χρώματα, κινούμενα σχέδια, στυλ και παρόμοια πηγαίος κώδικας. Το σύστημα υποστηρίζει την αποθήκευση πόρων σε εξωτερικά αρχεία. Οι εξωτερικοί πόροι διατηρούνται, ενημερώνονται και επεξεργάζονται ευκολότερα.

Βασικά, οι πόροι αποθηκεύονται ως αρχεία XML στον κατάλογο res με τιμές υποκαταλόγων, drawable-ldpi, drawable-mdpi, drawable-hdpi, διάταξη. Υπάρχουν όμως και δύο ακόμη τύποι πόρων: ακατέργαστοι και περιουσιακά στοιχεία.

Για ευκολία, το σύστημα δημιουργεί αναγνωριστικά πόρων και τα χρησιμοποιεί στο αρχείο R.java (η κλάση R που περιέχει αναφορές σε όλους τους πόρους του έργου), το οποίο σας επιτρέπει να αναφέρετε πόρους μέσα στον κώδικα του προγράμματος. Μια στατική κλάση R δημιουργείται με βάση τους δεδομένους πόρους και δημιουργείται κατά τη μεταγλώττιση του έργου. Δεδομένου ότι το αρχείο R δημιουργείται αυτόματα, δεν υπάρχει λόγος να το επεξεργαστείτε με μη αυτόματο τρόπο, επειδή όλες οι αλλαγές θα χαθούν όταν δημιουργηθούν ξανά.

Γενικά, οι πόροι είναι ένα αρχείο (όπως μια εικόνα) ή μια τιμή (όπως ένας τίτλος προγράμματος) που σχετίζεται με που δημιουργήθηκε από την εφαρμογή. Η ευκολία χρήσης πόρων είναι ότι μπορούν να αλλάξουν χωρίς να γίνει εκ νέου μεταγλώττιση ή ανάπτυξη της εφαρμογής.

Οι πιο συνηθισμένοι πόροι είναι πιθανώς οι συμβολοσειρές, τα χρώματα και γραφικά σχέδια(bitmap).

Ο παρακάτω πίνακας παραθέτει τους κύριους πόρους μιας εφαρμογής Android:

Τύπος πόρου Κατάλυμα Περιγραφή
Χρωματιστά /res/colors/ Ένα αναγνωριστικό χρώματος που υποδεικνύει έναν κωδικό χρώματος.
Χορδές /res/strings/ Πόροι συμβολοσειρών. Περιλαμβάνουν επίσης συμβολοσειρές σε μορφή java και html.
Μενού /res/menus/ Τα μενού σε μια εφαρμογή μπορούν να οριστούν ως πόροι XML.
Επιλογές /res/values/ Αντιπροσωπεύει τις παραμέτρους ή τις διαστάσεις διαφόρων στοιχείων.
εικόνες /res/drawable/ Πόροι εικόνας. Υποστηρίζει Μορφές JPG, GIF, PNG (τα πιο προτιμώμενα) και άλλα. Κάθε εικόνα είναι ξεχωριστό αρχείο. Το σύστημα υποστηρίζει επίσης τεντώσιμες εικόνες, στις οποίες μπορείτε να αλλάξετε την κλίμακα μεμονωμένων στοιχείων, αφήνοντας τα άλλα στοιχεία αμετάβλητα.

Ζωγραφιζόμενα χρώματα

/res/values/

/res/drawable/

Αντιπροσωπεύει έγχρωμα ορθογώνια που χρησιμοποιούνται ως φόντο κύριας απόδοσης αντικειμένων, όπως bitmaps.
Κινουμένων σχεδίων /res/anim/ Το Android μπορεί να κάνει απλό κινούμενο σχέδιοσε ένα γράφημα ή σε μια σειρά γραφικών εικόνων.
Αυθαίρετα αρχεία XML /res/xml/ Στο Android, αυθαίρετα αρχεία XML μπορούν να χρησιμοποιηθούν ως πόροι.
Τυχαίοι ακατέργαστοι πόροι /res/raw/ Οποιοδήποτε μη μεταγλωττισμένο δυαδικό ή αρχεία κειμένου, για παράδειγμα, βίντεο.

Εκτός από τις εικόνες, ο κατάλογος res/drawable μπορεί να αποθηκεύσει πόρους απλών γεωμετρικών σχημάτων. Εδώ είναι μερικά μόνο από τα πιθανά χαρακτηριστικά:

  • android:shape καθορίζει τον τύπο του σχήματος: ορθογώνιο (ορθογώνιο), οβάλ (οβάλ), γραμμή (γραμμή), δακτύλιος (κύκλος).
  • δημιουργεί στρογγυλεμένες γωνίες για ένα ορθογώνιο.
  • ορίζει ένα ντεγκραντέ γέμισμα για το σχήμα. στο Android μπορείτε να δημιουργήσετε τρεις τύπους διαβαθμίσεων: Γραμμική, Ακτινική και Σάρωση.
  • ορίζει τις διαστάσεις του σχήματος.
  • ορίζει το συμπαγές χρώμα για το σχήμα.

Υπάρχουν δύο τύποι κινούμενων εικόνων στο Android:

  • Κινούμενα σχέδια καρέ - κινούμενα σχέδια καρέ, παραδοσιακή κινούμενη εικόνα που χρησιμοποιεί γρήγορες αλλαγές διαδοχικών εικόνων, όπως σε φιλμ.
  • Tween Animation – το animation μετασχηματισμού μπορεί να εκτελεστεί ως σειρά απλές μεταμορφώσεις: αλλαγή θέσης (κατηγορία TranslateAnimation), μέγεθος (ScaleAnimation), γωνία περιστροφής (RotateAnimation) και επίπεδο διαφάνειας (AlphaAnimation). Οι εντολές κίνησης ορίζουν τους μετασχηματισμούς που πρέπει να εκτελεστούν σε ένα αντικείμενο. Οι μετασχηματισμοί μπορεί να είναι διαδοχικοί ή ταυτόχρονοι. Η ακολουθία των εντολών κίνησης ορίζεται σε ένα αρχείο XML (κατά προτίμηση) ή σε κώδικα προγράμματος.

Το Android έχει έναν άλλο κατάλογο όπου μπορούν να αποθηκευτούν τα αρχεία που θα συμπεριληφθούν σε ένα πακέτο: /assets. Αυτά δεν είναι πόροι, απλώς ακατέργαστα αρχεία. Αυτός ο κατάλογος βρίσκεται στο ίδιο επίπεδο με το /res. Το R.java δεν δημιουργεί αναγνωριστικά πόρων για αρχεία που βρίσκονται στο /assets. Για να τα διαβάσετε, πρέπει να καθορίσετε τη διαδρομή προς το αρχείο. Η διαδρομή του αρχείου είναι σχετική και ξεκινά με /assets. Αυτός ο κατάλογος, σε αντίθεση με τον υποκατάλογο res/, σας επιτρέπει να καθορίσετε ένα αυθαίρετο βάθος υποκαταλόγων και αυθαίρετων ονομάτων αρχείων.

1.5.3. Βαθμολόγηση

Σε εφαρμογές Android, η διεπαφή χρήστη είναι χτισμένη σε αντικείμενα View και ViewGroup. Η κλάση ViewGroup είναι η βάση για την υποκλάση Layout.

Η διάταξη (ονομάζεται επίσης διάταξη ή διάταξη) αποθηκεύεται ως αρχείο XML στο φάκελο /res/layout. Αυτό γίνεται για να διαχωριστεί ο κώδικας από το σχέδιο, όπως συνηθίζεται σε πολλές τεχνολογίες (HTML και CSS, Visual Studioκαι Μίγμα έκφρασης). Εκτός από την κύρια διάταξη για ολόκληρη την οθόνη, υπάρχουν θυγατρικές διατάξεις για μια ομάδα στοιχείων. Ουσιαστικά, μια διάταξη είναι ένα είδος οπτικού προτύπου για διεπαφή χρήστηεφαρμογή που σας επιτρέπει να διαχειρίζεστε στοιχεία, τις ιδιότητες και τη θέση τους. Στο ιατρείο σας θα πρέπει να εξοικειωθείτε με όλες τις μεθόδους τοποθέτησης.

Η προσθήκη Android για το Eclipse περιλαμβάνει έναν ειδικό επεξεργαστή για τη δημιουργία σήμανσης με δύο τρόπους. Το πρόγραμμα επεξεργασίας έχει δύο καρτέλες: η μία σας επιτρέπει να δείτε πώς θα εμφανίζονται τα στοιχεία ελέγχου και η δεύτερη σας επιτρέπει να δημιουργήσετε μη αυτόματα σήμανση XML.

Δημιουργώντας τη διεπαφή χρήστη σε ένα αρχείο XML, μπορείτε να διαχωρίσετε τη σχεδίαση της εφαρμογής από τον κώδικα. Μπορείτε να αλλάξετε τη διεπαφή χρήστη σε ένα αρχείο σήμανσης χωρίς να χρειάζεται να αλλάξετε τον κώδικα. Για παράδειγμα, μπορείτε να δημιουργήσετε σήμανση XML για διαφορετικούς προσανατολισμούς οθόνης κινητής συσκευής (κατακόρυφος, οριζόντιος), μεγέθη οθόνης και γλώσσες διεπαφής. Ωστόσο, τα στοιχεία διεπαφής μπορούν επίσης να δημιουργηθούν μέσω προγραμματισμού όταν είναι απαραίτητο.

Κάθε αρχείο σήμανσης πρέπει να περιέχει μόνο ένα ριζικό στοιχείο διάταξης, το οποίο πρέπει να είναι αντικείμενο View ή ViewGroup. Μέσα στο ριζικό στοιχείο μπορείτε να προσθέσετε πρόσθετα αντικείμενασημάνσεις ή στοιχεία θυγατρικής διεπαφής για να σχηματίσουν σταδιακά μια ιεραρχία στοιχείων που ορίζεται από τη σήμανση που δημιουργείται.

Υπάρχουν αρκετές τυπικούς τύπουςσημάνσεις:

  • Το FrameLayout είναι το πιο απλός τύποςσημάνσεις. Συνήθως πρόκειται για κενό χώρο στην οθόνη που μπορεί να συμπληρωθεί μόνο από ένα αντικείμενο θυγατρικής Προβολής ή ViewGroup. Όλα τα παιδιά του FrameLayout κουμπώνονται στην επάνω αριστερή γωνία της οθόνης. Η σήμανση FrameLayout δεν μπορεί να ορίσει διαφορετική θέση για ένα αντικείμενο θυγατρικής προβολής. Τα επόμενα αντικείμενα θυγατρικής προβολής απλώς σχεδιάζονται πάνω από προηγούμενες προβολές, αποκρύπτοντάς τα εν μέρει ή πλήρως εάν το αντικείμενο στην κορυφή είναι αδιαφανές
  • Το LinearLayout ευθυγραμμίζει όλα τα θυγατρικά αντικείμενα προς την ίδια κατεύθυνση - κάθετα ή οριζόντια. Η κατεύθυνση καθορίζεται χρησιμοποιώντας το χαρακτηριστικό android:orientation. Όλα τα παιδιά ωθούνται στη στοίβα το ένα μετά το άλλο, έτσι ώστε μια κατακόρυφη λίστα προβολών να έχει μόνο ένα παιδί ανά σειρά, ανεξάρτητα από το πόσο ευρεία είναι. Μια οριζόντια διάταξη λίστας θα τοποθετήσει τα στοιχεία στην ίδια γραμμή με ύψος ίσο ύψοςτο υψηλότερο θυγατρικό στοιχείο της λίστας.
  • Το TableLayout τοποθετεί τα παιδιά του σε γραμμές και στήλες. Το TableLayout δεν εμφανίζει γραμμές περιγράμματος για γραμμές, στήλες ή κελιά. Το TableLayout μπορεί να έχει σειρές με διαφορετικό αριθμό κελιών. Κατά τη δημιουργία της διάταξης πίνακα, ορισμένα κελιά μπορούν να παραμείνουν κενά εάν είναι απαραίτητο. Το TableLayout είναι βολικό στη χρήση, για παράδειγμα, όταν δημιουργείτε παιχνίδια λογικής όπως το Sudoku, το Tic-Tac-Toe και τα παρόμοια.
  • Το RelativeLayout επιτρέπει στα θυγατρικά στοιχεία να προσδιορίζουν τη θέση τους σε σχέση με τη γονική προβολή ή σε σχέση με γειτονικά θυγατρικά στοιχεία.

Όλη η σήμανση που περιγράφεται εδώ είναι υποκλάσεις του ViewGroup και κληρονομούν ιδιότητες που ορίζονται στην κλάση View.

Οι σημάνσεις συμπεριφέρονται σαν στοιχεία ελέγχου και μπορούν να ομαδοποιηθούν. Η διάταξη των στοιχείων ελέγχου μπορεί να είναι ένθετη. Για παράδειγμα, μπορείτε να χρησιμοποιήσετε το RelativeLayout στο LinearLayout και ούτω καθεξής. Ωστόσο, η υπερβολική ένθεση των στοιχείων ελέγχου προκαλεί προβλήματα απόδοσης.

Το αρχείο μανιφέστου Android είναι το κύριο αρχείο ρυθμίσεωνκάθε εφαρμογή Android. Ο επεξεργαστής διανέμει τις πληροφορίες από αυτό το αρχείο σε πολλές καρτέλες.

Manifest - Σε αυτήν την καρτέλα, που φαίνεται στο Σχ. 1.3, ορίζονται γενικές παράμετροι εφαρμογής, όπως το όνομα του πακέτου και οι πληροφορίες έκδοσης της εφαρμογής (για εγκατάσταση και ενημέρωση).

Εφαρμογή - Αυτή η καρτέλα ορίζει λεπτομέρειες εφαρμογής, όπως το όνομα και το εικονίδιο της εφαρμογής, καθώς και τα εσωτερικά στοιχεία της εφαρμογής, όπως ποιες δραστηριότητες μπορούν να εκτελεστούν (συμπεριλαμβανομένης της προεπιλεγμένης δραστηριότητας εκκίνησης του DroidActivity) και άλλες δυνατότητες και υπηρεσίες που παρέχονται από την εφαρμογή.

Τα δικαιώματα είναι η καρτέλα όπου ορίζονται τα δικαιώματα εφαρμογής. Για παράδειγμα, εάν μια εφαρμογή πρέπει να μπορεί να διαβάζει μια λίστα επαφών

τηλέφωνο, τότε πρέπει να προστεθεί ο τύπος Uses-Permission με δικαίωμα ανάγνωσης επαφών (android, άδεια. READCONTACTS) στο αρχείο διαμόρφωσης.

Όργανα - Αυτή η καρτέλα χρησιμοποιείται για τη δοκιμή στοιχείων χρησιμοποιώντας διάφορες κατηγορίες οργάνων που είναι διαθέσιμες στο Android SDK.

AndroidManifest.xml - Αυτή η καρτέλα είναι ένα απλό πρόγραμμα επεξεργασίας XML για μη αυτόματη επεξεργασία του αρχείου δήλωσης.

Εάν μεταβείτε στην καρτέλα AndroidManifest.xml, θα δείτε κώδικα για το αρχείο μανιφέστου που μοιάζει με αυτό:

xmlns:android="http://schemas.android.com/apk/res/android"

package="com.androidbook.droidl"

android:versionCode="1"

android:versionName="l. 0">

android:icon="@drawable/icon" android:label="@string/όνομα εφαρμογής">

android: name=". DroidActivity" android:label="@string/όνομα εφαρμογής">

android:name="android.intent.action.MAIN" />

android:name = "android. intent . category. LAUNCHER" / >

ΠΡΟΣΟΧΗ!

ΞΕΡΕΙΣ ΟΤΙ… __________________________________________________

Όλα τα αρχεία πόρων Android, συμπεριλαμβανομένου του αρχείου μανιφέστου Android, είναι γραμμένα σε μορφή XML. Αυτό σημαίνει ότι μπορείτε να τα επεξεργαστείτε χωρίς ειδικό πρόγραμμα επεξεργασίας. Για να δημιουργήσετε ένα νέο αρχείο Android XML, κάντε κλικ στο κουμπί δημιουργίας

με μια εικόνα ενός φύλλου χαρτιού (το γράμμα "a" και το σύμβολο "Ι" στη γραμμή εργαλείων Eclipse.

ΚΑΝΤΟ ΜΟΝΟΣ ΣΟΥ

ΕΠΕΞΕΡΓΑΣΙΑ ΤΟΥ ΑΡΧΕΙΟΥ ΔΙΑΜΟΡΦΩΣΗΣ ANDROID

Δοκιμάστε να επεξεργαστείτε το αρχείο μανιφέστου Android. Δεν θα μπορείτε να διορθώσετε τα σφάλματα της εφαρμογής σας μέχρι να ορίσετε το χαρακτηριστικό android:debuggable σε true. Για να το κάνετε αυτό, ακολουθήστε τα εξής βήματα:

1. Ανοίξτε το αρχείο AndroidManifest.xml στο πρόγραμμα επεξεργασίας πόρων.

2. Μεταβείτε στην καρτέλα Εφαρμογή.

3. Αναπτύξτε τη λίστα του χαρακτηριστικού με δυνατότητα εντοπισμού σφαλμάτων και επιλέξτε true.

4. Αποθηκεύστε το αρχείο δήλωσης.

Τώρα, αν μεταβείτε στην καρτέλα AndroidManifest.xml, θα δείτε ότι η ετικέτα

Εμφανίστηκε το χαρακτηριστικό εντοπισμού σφαλμάτων "εφαρμογή":

android:debuggable="true"

ΕΠΕΞΕΡΓΑΣΙΑ ΑΡΧΕΙΩΝ ΑΛΛΩΝ ΠΟΡΩΝ

Οι περισσότεροι πόροι εφαρμογών Android αποθηκεύονται στο φάκελο /res. Περιέχει υποφακέλους:

/drawable-ldpi, /drawable-hdpi, /drawable-mdpi - αυτοί οι υποφάκελοι αποθηκεύουν αρχεία γραφικώνπόρους για διαφορετικές πυκνότητες κουκκίδων και αναλύσεις οθόνης. Εάν προβάλετε τα περιεχόμενα αυτών των φακέλων στον πίνακα "Project Explorer", θα βρείτε ένα αρχείο γραφικών icon.png σε καθένα από αυτά. Αυτό είναι το εικονίδιο της εφαρμογής. Θα μάθετε περισσότερα για τις διαφορές μεταξύ αυτών των φακέλων στην ώρα 20.

/layout - και αυτός ο υποφάκελος αποθηκεύει τα αρχεία διάταξης διεπαφής χρήστη. Εδώ μπορείτε να βρείτε το αρχείο διάταξης οθόνης main.xml, το οποίο περιέχει την περιγραφή της διεπαφής χρήστη για την προεπιλεγμένη δραστηριότητα.

/values ​​- Σε αυτόν τον υποφάκελο, διάφοροι τύποι πόρων ομαδοποιούνται ανά τύπο, όπως τιμές συμβολοσειρών, τιμές χρώματος και άλλα πρωτόγονους τύπους. Εδώ μπορείτε να δείτε το αρχείο πόρων strings.xml, το οποίο περιέχει όλους τους πόρους συμβολοσειράς που χρησιμοποιούνται στην εφαρμογή.

Κάντε διπλό κλικ σε οποιοδήποτε από τα αρχεία πόρων για να το ανοίξετε στο πρόγραμμα επεξεργασίας.

Θυμηθείτε ότι μπορείτε να επεξεργαστείτε δεδομένα XML απευθείας σε ένα πρόγραμμα επεξεργασίας κειμένου.

ΚΑΝΤΕ ΤΟΝ ΔΙΚΟ ΣΑΣ ΕΠΙΜΕΛΕΙΑ ΤΩΝ ΠΟΡΩΝ ΣΤΡΙΓΚ

Αν κοιτάξετε τον κώδικα στο αρχείο διάταξης main.xml, θα δείτε ότι εμφανίζει μια απλή διεπαφή με ένα μόνο στοιχείο διεπαφής χρήστη - ένα TextView. Αυτό το στοιχείο εμφανίζει μια συμβολοσειρά κειμένου. Στην περίπτωσή μας, το κείμενο που εμφανίζεται στην οθόνη καθορίζεται από τον πόρο συμβολοσειράς 0string/hello.

Για να επεξεργαστείτε τον πόρο συμβολοσειράς 0string/hello χρησιμοποιώντας το πρόγραμμα επεξεργασίας πόρων συμβολοσειράς, ακολουθήστε τα εξής βήματα: 1. Ανοίξτε το αρχείο strings.xml στο πρόγραμμα επεξεργασίας πόρων.

2. Παρατηρήστε τον πόρο συμβολοσειράς με το όνομα hello και το κείμενο Hello

Κόσμος, DroidActivity! στον επεξεργαστή πόρων. 3. Στο πεδίο Εισαγωγή τιμής, αλλάξτε την τιμή σε Hello, Dave.

4. Αποθηκεύστε το αρχείο.

Τώρα, αν μεταβείτε στην καρτέλα strings.xml και δείτε τον κώδικα XML, θα δείτε ότι στην ετικέτα κοντέινερ περιέχει δύο στοιχεία συμβολοσειράς:

Γεια σου Dave