Υπογράψτε το αρχείο apk. Δημοσιεύουμε εφαρμογές στο Google Play και κερδίζουμε εκατομμύρια. Τι να κάνετε εάν το κλειδί χαθεί ή χακαριστεί

Μερικές φορές ορισμένες εφαρμογές στο 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) και το root δεν είναι πάντα σκόπιμο, υπάρχουν τουλάχιστον τρεις τρόποι για να μεταφέρετε το αρχείο της εφαρμογής στον υπολογιστή σας:

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

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

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

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

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

Ας υποθέσουμε ότι βρήκατε ένα πακέτο που σας ενδιαφέρει, το κατεβάσατε, το αποσυσκευάσατε... και όταν προσπαθήσατε να δείτε κάποιο αρχείο XML, ανακαλύψατε με έκπληξη ότι το αρχείο δεν ήταν κείμενο. Πώς να το απομεταγλωττίσω και πώς να δουλέψετε με πακέτα γενικά; Είναι πραγματικά απαραίτητο να εγκαταστήσετε το SDK; Όχι, δεν είναι απαραίτητο να εγκαταστήσετε το SDK καθόλου. Στην πραγματικότητα, όλα τα βήματα για την εξαγωγή, την τροποποίηση και τη συσκευασία πακέτων 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. Ωστόσο, έχοντας βασικές γνώσεις, είναι μόνο θέμα χρόνου να τα καταλάβουμε όλα.

Τελευταία ενημέρωση: 30/10/2015

Μετά τη δημιουργία της εφαρμογής, τη δοκιμή και την αποσφαλμάτωση της, μπορούμε να ξεκινήσουμε τη δημοσίευσή της. Η ουσία της δημοσίευσης είναι να δημιουργήσετε ένα αρχείο με την επέκταση .apk, που θα αντιπροσωπεύει την εφαρμογή και την επακόλουθη τοποθέτησή της στο Google Play Market ή σε άλλους εξωτερικούς ιστότοπους. Από προεπιλογή, κατά τη διαδικασία εντοπισμού σφαλμάτων και δημιουργίας μιας εφαρμογής, το αρχείο apk έχει ήδη δημιουργηθεί και μπορούμε να το βρούμε στον φάκελο του έργου κατά μήκος της διαδρομής Όνομα_έργου\app\build\outputs\apk. Από προεπιλογή καλείται το αρχείο app-debug.apkκαι παρουσιάζει την έκδοση εντοπισμού σφαλμάτων.

Αλλά αυτό το αρχείο μπορεί να μην είναι αρκετό για πλήρη δημοσίευση. Και πρέπει ακόμα να κάνουμε κάποια πρόσθετη προετοιμασία του έργου για κυκλοφορία. Για να το κάνετε αυτό, θα πρέπει να καθορίσετε στο αρχείο δήλωσης του στοιχείου ορίζονται τα χαρακτηριστικά android:versionCode και android:versionName. Επίσης στο αρχείο δήλωσης το στοιχείο δεν πρέπει να περιέχει το χαρακτηριστικό android:debuggable

Επιπλέον, σε αυτό το στάδιο μπορείτε να ορίσετε ένα εικονίδιο για την εφαρμογή, το οποίο θα εμφανίζεται στην οθόνη εργασίας του gadget, το όνομα της εφαρμογής (το χαρακτηριστικό android:label του στοιχείου) και μπορείτε επίσης να ορίσετε τη συμφωνία άδειας χρήσης.

Το αρχείο δήλωσης θα πρέπει επίσης να ορίζει το όνομα του πακέτου (το χαρακτηριστικό πακέτου του στοιχείου ), το οποίο θα χρησιμοποιηθεί για την εφαρμογή αργότερα. Από προεπιλογή, κατά την ανάπτυξη στο Android Studio, τα πακέτα εφαρμογών ξεκινούν με com.example. Δεν πρέπει να αφήσετε αυτό το όνομα, καθώς το όνομα του πακέτου θα χρησιμεύσει ως μοναδικό αναγνωριστικό για την αίτησή σας. Για παράδειγμα, παρακάτω στην περίπτωσή μου το όνομα πακέτου είναι "com.maverics.eugene.telephonelist":

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

Ρύθμιση απαιτήσεων

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

    android:minSdkVersion - ελάχιστη έκδοση Android

    android:targetSdkVersion - βέλτιστη έκδοση API

    android:maxSdkVersion - μέγιστη έκδοση συστήματος

Για παράδειγμα, ας είναι η ελάχιστη έκδοση του Jelly Beans 4.1.2 και η βέλτιστη έκδοση του KitKat 4.4.4:

//.............................

Υπογραφή αίτησης

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

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

Αρχικά, στο Android Studio, επιλέξτε Δημιουργία -> Δημιουργία υπογεγραμμένου APK από το μενού. Μετά από αυτό, θα ανοίξει ένα παράθυρο οδηγού:

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

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

Στο πεδίο Κωδικός πρόσβασης/Επιβεβαίωση, πληκτρολογήστε τον κωδικό πρόσβασης.

Στο πεδίο Ψευδώνυμο υποδεικνύουμε ένα ψευδώνυμο. Μπορείτε να βάλετε ένα προσαρμοσμένο όνομα.

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

Στο τέλος, κάντε κλικ στο OK.

Μετά από αυτό, το πρώτο παράθυρο θα ενημερωθεί αυτόματα:

Το τελικό παράθυρο θα μας δείξει τη διαδρομή προς τον κατάλογο όπου θα βρίσκεται η υπογεγραμμένη εφαρμογή apk στην έκδοση κυκλοφορίας. Κάντε κλικ στο Τέλος.

Τώρα στην καθορισμένη διαδρομή μπορείτε να βρείτε ένα υπογεγραμμένο apk, το οποίο θα έχει το όνομα app-release.apk:

Μπορούμε να μετονομάσουμε το αρχείο, διατηρώντας την επέκτασή του, και να το ανεβάσουμε στο Play Market ή σε οποιονδήποτε ιστότοπο ή να το κατεβάσουμε αμέσως σε μια κινητή συσκευή. Μόλις γίνει λήψη στο τηλέφωνο/tablet σας, απλώς κάντε κλικ σε αυτό και η εφαρμογή θα εγκατασταθεί χρησιμοποιώντας το τυπικό πρόγραμμα εγκατάστασης πακέτων. Ωστόσο, εδώ πρέπει επίσης να λάβουμε υπόψη ότι εάν εγκαταστήσουμε μια εφαρμογή όχι από το Play Market, τότε στις ρυθμίσεις πρέπει να επιτρέψουμε την εγκατάσταση από άλλες πηγές - Ασφάλεια->Άγνωστες πηγές (Να επιτρέπεται η εγκατάσταση εφαρμογών από άλλες πηγές)

Το βοηθητικό πρόγραμμα keytool που περιγράφεται στην προηγούμενη ενότητα δημιουργεί ένα ψηφιακό πιστοποιητικό, το οποίο είναι μία από τις παραμέτρους του εργαλείου jarsigner. Μια άλλη παράμετρος είναι το πακέτο Android που πρέπει να υπογραφεί. Για να δημιουργήσετε ένα πακέτο Android, πρέπει να χρησιμοποιήσετε το βοηθητικό πρόγραμμα Export Unsigned Application Package από τη λειτουργική μονάδα ADT για το Eclipse. Για να καλέσετε αυτό το βοηθητικό πρόγραμμα, θα χρειαστεί να κάνετε δεξί κλικ στο έργο Android στο Eclipse, να επιλέξετε Εργαλεία Android από το μενού περιβάλλοντος και, στη συνέχεια, να επιλέξετε την επιλογή Εξαγωγή μη υπογεγραμμένου πακέτου εφαρμογής. Μόλις εκκινηθεί, αυτό το βοηθητικό πρόγραμμα δημιουργεί ένα αρχείο .apk που δεν είναι υπογεγραμμένο με πιστοποιητικό εντοπισμού σφαλμάτων.

Για να το δοκιμάσετε, εκτελέστε το βοηθητικό πρόγραμμα Export Unsigned Application Package σε ένα από τα έργα σας Android και αποθηκεύστε το αρχείο .apk που δημιουργήθηκε κάπου. Σε αυτό το παράδειγμα, θα χρησιμοποιήσουμε τον φάκελο αποθήκευσης κλειδιών που δημιουργήθηκε προηγουμένως και θα δημιουργήσουμε ένα αρχείο .apk με το όνομα C:\android\release\myappraw.apk.

Τώρα έχουμε το αρχείο .apk και το στοιχείο αποθήκευσης κλειδιών, μπορούμε να εκτελέσουμε το εργαλείο jarsigner για να υπογράψουμε το αρχείο .apk (βλ. 14.2). Σε αυτήν την περίπτωση, πρέπει να καθοριστούν οι πλήρεις διαδρομές για το αρχείο αποθήκευσης κλειδιών και το αρχείο .apk.

Για να υπογράψετε ένα αρχείο .apk, το βοηθητικό πρόγραμμα jarsigner μεταβιβάζεται στη θέση του keystore, τον κωδικό πρόσβασης αποθήκευσης κλειδιών, τον κωδικό πρόσβασης του μυστικού κλειδιού, τη διαδρομή προς το αρχείο .apk και το ψευδώνυμο του στοιχείου keystore. Στη συνέχεια, ο Jarsigner υπογράφει το αρχείο .apk χρησιμοποιώντας το ψηφιακό πιστοποιητικό από το στοιχείο αποθήκευσης κλειδιών. Για να εκτελέσετε το βοηθητικό πρόγραμμα jarsigner, πρέπει είτε να ανοίξετε ένα παράθυρο εργαλείου (δείτε Κεφάλαιο 2), είτε να ανοίξετε ένα παράθυρο γραμμής εντολών ή ένα παράθυρο τερματικού και να ανοίξετε τον φάκελο bin στον κατάλογο

JDK (εάν αυτός ο φάκελος δεν έχει καθοριστεί στη μεταβλητή περιβάλλοντος PATH). Για λόγους ασφαλείας, είναι καλύτερο να μην μεταβιβάζετε κωδικούς πρόσβασης ως ορίσματα εντολών, οπότε το jarsigner θα σας ζητήσει κωδικούς πρόσβασης κατά το χρόνο εκτέλεσης. Στο Σχ. Το σχήμα 14.3 δείχνει ένα παράδειγμα κλήσης του βοηθητικού προγράμματος jarsigner. Ίσως έχετε παρατηρήσει ότι στο Σχ. 14.3 το βοηθητικό πρόγραμμα jarsigner ζητά μόνο έναν κωδικό πρόσβασης. Αυτό συμβαίνει επειδή το keypass δεν ζητείται εάν το storepass και το keypass είναι το ίδιο. Αυστηρά μιλώντας, η εντολή jarsigner στο e 14.2 χρειάζεται μόνο να καθορίσει τον κωδικό πρόσβασης -keypass όταν είναι διαφορετικός από τον κωδικό -storepass.

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

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

Προϋπόθεση για αυτό είναι η παρουσία ενός υπογεγραμμένου αρχείου APK. Θα μάθετε πώς να υπογράφετε ένα αρχείο apk σε αυτό το άρθρο.

Μια μικρή υποχώρηση

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

Αρχικά στοιχεία

Υποθέτω ότι έχετε ρυθμίσει τα πάντα για να αναπτύξετε υβριδικές εφαρμογές για κινητά χρησιμοποιώντας το Apache Cordova. Πρέπει να εγκατασταθεί:
  • Απάτσι Κόρντοβα
  • Java Development Kit
  • Εργαλεία Android SDK
Το όνομα του έργου και της εφαρμογής είναι lcf. Αντικαταστήστε με το όνομα του έργου σας όπου χρειάζεται.

Πηγαίνω

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

$ cordova plugin rm cordova-plugin-console
Για να δημιουργήσετε μια έκδοση έκδοσης για Android, χρησιμοποιήστε την εντολή χτίζωμε μια σημαία --ελευθέρωση:

$ cordova build -- απελευθέρωση android
Αυτή η εντολή θα δημιουργήσει ανυπόγραφοΑρχείο APK στον κατάλογο:

Πλατφόρμες/android/build/outputs/apk
Για παράδειγμα, πλατφόρμες/android/build/outputs/apk/ android-release-unsigned.apk. Τότε θα χρειαστεί να υπογράψουμε αυτό το αρχείο και να εκτελέσουμε το βοηθητικό πρόγραμμα zipalignγια βελτιστοποίηση και προετοιμασία του αρχείου για το Google Play.

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

$ keytool -genkey -v -keystore lcf.keystore -alias lcf -keyalg RSA -keysize 2048 -validity 10000
Σπουδαίος

Η τιμή της παραμέτρου -alias πρέπει να απομνημονευθεί ή καλύτερα να γραφτεί. Στο παραπάνω παράδειγμα, ισούται με lcf (με βάση τα πρώτα γράμματα του ονόματος της εφαρμογής Loyal Client Free). Δεν θα δώσω λεπτομέρειες εδώ, αν σας ενδιαφέρει γράψτε στα σχόλια, θα σας πω αναλυτικότερα.

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


-keystore hello-world.keystore -alias hello-world -keystore weather-app.keystore -alias weather-app -keystore todo.keystore -alias todo
* Πρέπει να υπογράφετε την εφαρμογή κάθε φορά που κυκλοφορούν ενημερώσεις

Χρησιμότητα κλειδίκάνει μια σειρά ερωτήσεων. Θα είναι συνολικά 8. Για να έχετε μια ιδέα για τις ερωτήσεις και τις κατά προσέγγιση απαντήσεις εκ των προτέρων, δίνονται όλες παρακάτω, κάτω από το spoiler.

Ερωτήσεις βασικού εργαλείου και δείγματα απαντήσεων σε αυτά

1. Εισαγάγετε τον κωδικό πρόσβασης αποθήκευσης κλειδιών:
Εδώ πρέπει να εισαγάγετε έναν κωδικό πρόσβασης για το αρχείο (τουλάχιστον 6 χαρακτήρες). Ο εισαγόμενος κωδικός πρόσβασης πρέπει να γράφεται σε ασφαλές μέρος· είναι απαραίτητος κάθε φορά που υπογράφετε την αίτηση.

2. Εισαγάγετε ξανά νέο κωδικό πρόσβασης:
Εισαγάγετε ξανά τον κωδικό πρόσβασής σας.

3. Ποιο είναι το ονοματεπώνυμό σας;
: Ιβάν Πετρόφ
Το όνομα και το επίθετό σας. Η τιμή σε αγκύλες είναι η προεπιλεγμένη τιμή.

4. Πώς λέγεται η οργανωτική σας μονάδα;
: ΤΟ
Το όνομα του τμήματος της εταιρείας σας. Μπορείτε να το αφήσετε κενό, το υποδεικνύω.

5. Ποιο είναι το όνομα του οργανισμού σας;
: 2 προγραμματιστές
Το όνομα του οργανισμού σας. Σημειώστε εάν είναι διαθέσιμο.

6. Ποιο είναι το όνομα της πόλης ή της περιοχής σας;
: Μόσχα
Ονομα Πόλης

7. Ποιο είναι το όνομα της Πολιτείας ή της Επαρχίας σας;
: Μ.Ο.
Όνομα περιοχής

8. Ποιος είναι ο κωδικός χώρας δύο γραμμάτων για αυτήν τη μονάδα;
: RU
Κωδικός της χώρας. Δηλώνω RU.

: y

Επιβεβαιώστε εάν όλα είναι σωστά ή πατήστε Enter για να εισέλθετε ξανά.


Στο τέλος, θα εμφανιστεί ένα μήνυμα που υποδεικνύει την επιτυχή δημιουργία κλειδιού. Θα σας ζητηθεί να ορίσετε έναν κωδικό πρόσβασης για το ιδιωτικό κλειδί (αν θέλετε να το αφήσετε ίδιο με το πιστοποιητικό, πατήστε Enter):

Δημιουργία ζευγών κλειδιών RSA 2 048 bit και αυτουπογεγραμμένου πιστοποιητικού (SHA256withRSA) με ισχύ 10 000 ημερών για: CN=Ivan Petrov, OU=IT, O=2developers, L=Moscow, ST=MO, C=RU Enter key κωδικό πρόσβασης για (ΕΠΙΣΤΡΟΦΗ εάν είναι ίδιος με τον κωδικό πρόσβασης του keystore):
Θα δημιουργηθεί ένα αρχείο στον τρέχοντα κατάλογο lcf.keystore.

Σπουδαίος

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

Απομένουν δύο βήματα και θα έχετε έτοιμο για διανομή ένα αρχείο APK. Ας προχωρήσουμε στην υπογραφή.

Για να υπογράψετε το αρχείο apk, χρησιμοποιήστε το βοηθητικό πρόγραμμα jarsigner, το οποίο περιλαμβάνεται επίσης στο JDK.

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore lcf.keystore android-release-unsigned.apk lcf
Το όνομα του πιστοποιητικού υποδεικνύεται μετά την παράμετρο - κλειδοθήκη, ψευδώνυμο - μετά το όνομα του αρχείου.

Τέλος, για να βελτιστοποιήσουμε το αρχείο apk, θα χρησιμοποιήσουμε το βοηθητικό πρόγραμμα zipalign:

$ zipalign -v 4 android-release-unsigned.apk LoyalClientFree.apk
Η τελευταία παράμετρος είναι το όνομα του αρχείου που θα ανεβάσετε στο Google Play.

Σπουδαίος.

Χρησιμότητα zipalignείναι μέρος των εργαλείων Android SDK και μπορείτε να το βρείτε εδώ:

/path/to/Android/sdk/build-tools/VERSION/zipalign

συμπέρασμα

Τώρα έχετε ένα αρχείο apk έτοιμο για διανομή που μπορεί να μεταφορτωθεί στο Google Play. Συμπληρώστε την περιγραφή, καθορίστε τη βαθμολογία της αίτησής σας και μην διστάσετε να κάνετε κλικ στο «Δημοσίευση».

Αφού έψαξα στο google την ερώτηση μόνος μου" πώς να υπογράψετε ένα αρχείο apk?", Γνωρίζω ότι η εύρεση πραγματικά λειτουργικών και απολύτως κατανοητών οδηγιών δεν είναι τόσο εύκολη. Γι' αυτό αποφάσισα να γράψω μόνος μου υλικό σχετικά με το πώς να υπογράψω σωστά το πρόγραμμα ή το παιχνίδι σας στο Android.

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

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

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

Για να δουλέψουμε θα χρειαστούμε: OpenSSL και SignApk.

Αρχικά, ας δημιουργήσουμε ένα πιστοποιητικό και ένα κλειδί υπογραφής. Εγκαταστήστε το OpenSSL. Κατά την εγκατάσταση, το πρόγραμμα εγκατάστασης θα σας ζητήσει να αντιγράψετε τα στοιχεία σε φάκελο των Windows, επιλέξτε το φάκελο Bin, που θα είναι το μέρος όπου θα εγκαταστήσετε όλα τα OpenSSL.

Τώρα ανοιχτό ως διαχειριστής συστήματος(αυτό είναι πολύ σημαντικό!) γραμμή εντολών. Μετά πηγαίνετε στο γραμμή εντολώνστον φάκελο bin, ο οποίος βρίσκεται στο φάκελο όπου εγκαταστήσατε το OpenSSL (Για παράδειγμα, C:\OpenSSL\Bin\ή C:\Program Files\OpenSSL\Bin\). Εάν δεν γνωρίζετε, η αλλαγή σε άλλο φάκελο γίνεται με την εντολή CD. Δηλαδή για να πάει στο τον επιθυμητό φάκελοθα πρέπει να εκτελέσετε μια εντολή όπως αυτή:

cd C:\OpenSSL\Bin\

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

Βήμα 1(Δημιουργούμε ένα κλειδί μήκους 1024 bit)

Εκτελέστε την εντολή:

openssl genrsa -out key.pem 1024

Βήμα 2(Δημιουργούμε ένα αίτημα πιστοποιητικού με βάση το κλειδί)

Εκτελέστε την εντολή:

openssl req -new -key key.pem -out request.pem

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

Βήμα 3 (Δημιουργούμε ένα ιδιωτικό κλειδί από ένα πιστοποιητικό)

Εκτελέστε την εντολή:

openssl x509 -req -days 9999 -in request.pem -signkey key.pem -out certificate.pem

Βήμα 4(Δημιουργούμε ένα δημόσιο κλειδί)

Εκτελέστε την εντολή:

openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 -nocrypt

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

Τώρα ας αρχίσουμε να υπογράφουμε την αίτηση. Αποσυσκευάστε το αρχείο SingApk που έχετε λάβει από τον παραπάνω σύνδεσμο. Μετακινήστε 2 αρχεία από το φάκελο Bin όπου δημιουργήσαμε το πιστοποιητικό και το κλειδί: πιστοποιητικό.pemΚαι κλειδί.pk8στον φάκελο όπου εξαγάξατε το SingApk. Τα Windows θα πρέπει να εμφανίζουν ένα παράθυρο διαλόγου αντικατάστασης αρχείου - αντικατάσταση.

Τώρα για να υπογράψετε το αρχείο apk με ένα μοναδικό ψηφιακή υπογραφή, που φτιάξατε μόνοι σας, απλώς χρησιμοποιήστε το ποντίκι σας για να σύρετε το αρχείο apk στο sign_APK.bat. Για να μην σύρετε ένα αρχείο από το ένα παράθυρο στο άλλο (αυτό δεν είναι βολικό), μετακινήστε το αρχείο apk στον φάκελο με το SingApk. Μετά την εκτέλεση, ένα αρχείο θα εμφανιστεί στο φάκελο με το SingApk apk_signed.apk, που θα είναι η υπογεγραμμένη αίτηση ή παιχνίδι σας.