Παρασκευή, 1 Φεβρουαρίου 2013

Δημιουργούμε τη δική μας ROM για όποια συσκευή θέλουμε με ελάχιστες γνώσεις! Μέρος 4ο: Εγκατάσταση & αναβαθμίσεις


Φτάσαμε λοιπόν στο τελευταίο βήμα της κατασκευής μιας ROM και το μόνο που μας μένει είναι να πακετάρουμε τους φακέλους της σε ένα .zip αρχείο το οποίο και θα εγκαθίσταται μέσω της κονσόλας recovery.

Μη χάσετε τα προηγούμενα μέρη της σειράς με θέμα:

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

Η δομή του .zip
Το αρχείο .zip που θα δημιουργήσουμε πρέπει να περιλαμβάνει πολύ συγκεκριμένα πράγματα αν θέλουμε η εγκατάσταση να γίνει με επιτυχία. Ξεκινώντας από τη δομή του, μέσα στο .zip θα πρέπει να έχουμε οπωσδήποτε τους φακέλους / αρχεία:
  • META-INF
  • system
  • boot.img

Αυτά είναι μόνο τα απαραίτητα καθώς στην πραγματικότητα, μπορούμε να βάλουμε ότι θέλουμε μέσα στο .zip και να το εγκαταστήσουμε, αρκεί να ενημερώσουμε το αρχείο που δίνει τις οδηγίες εγκατάστασης στη recovery. Το system το αναλύσαμε εκτενέστατα στα προηγούμενα άρθρα, το boot.img περιέχει απλά τον πυρήνα της ROM, άρα τι μας μένει; Το "META-INF".

Φάκελος META-INF
Ο φάκελος "META-INF" περιέχει αρχεία πληροφοριών τα οποία δεν εγκαθίστανται στη συσκευή μας. Τις πληροφορίες αυτές "διαβάζει" η recovery κατά την εγκατάσταση και εκτελεί αναλόγως. Για να το πούμε πιο απλά, ότι βλέπετε να αναγράφεται στη recovery την ώρα της εγκατάστασης, περιέχεται στο αρχείο "updater-script".

Για παράδειγμα αν το script γράφει με τη σειρά:
  • κάνε mount το system partition
  • διέγραψε τα περιεχόμενά του
  • εγκατάστησε στη θέση του τα περιεχόμενα του φακέλου system που είναι στο zip
  • κάνε unmount
  • κάνε επανεκκίνηση

τότε η recovery θα εκτελέσει με τη σειρά όλα τα παραπάνω βήματα.


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

Ας πούμε ότι εκτός από τις εφαρμογές συστήματος (system), θέλουμε η ROM μας να περιέχει και κάποιες επιπλέον εφαρμογές στο data partition, τις οποίες αν θέλει ο χρήστης θα έχει τη δυνατότητα να τις απεγκαταστήσει χωρίς να χρειαστεί να κάνει root. Το μόνο που χρειάζεται είναι:
  • Να δημιουργήσουμε ένα φάκελο με ονομασία "data" μέσα στο .zip μας και να βάλουμε μέσα του τα .apk που θέλουμε
  • Να ενημερώσουμε μέσω του "updater-script" τη recovery, να κάνει mount το data partition και μετά copy τα περιεχόμενα του φακέλου "data", στη ίδια διαδρομή.

Παραδείγματα εντολών
Παρακάτω θα δούμε μερικές χρήσιμες εντολές που μπορούμε να χρησιμοποιήσουμε στο "updater-script". Ανοίξτε το αρχείο με τον επεξεργαστή κειμένου σας (στα Windows με Notepad++), ρίξτε μια ματιά και προσπαθήστε να εντοπίσετε μερικές από τις παρακάτω εντολές:

1. Για να κάνουμε format σε ένα partition δίνουμε
format <το όνoμα του partition>

Παράδειγμα στο system partition
format SYSTEM:

2. Για να αντιγράψουμε στη συσκευή τα περιεχόμενα ενός φακέλου δίνουμε
copy_dir <το φάκελο που θέλουμε> <το φάκελο προορισμού>

Παράδειγμα τα περιεχόμενα του system φακέλου στο system partition
copy_dir PACKAGE:system SYSTEM:

3. Για να διαγράψουμε ένα αρχείο δίνουμε
delete <τη διαδρομή του αρχείου>

Παράδειγμα την εφαρμογή Books από το system partition
delete SYSTEM:app/Books.apk

4. Για να διαγράψουμε ένα φάκελο δίνουμε
delete_recursive <τη διαδρομή του φακέλου>

Παράδειγμα τo φάκελο "app" από το data partition
delete DATA:app

5. Για να τρέξουμε ένα script το οποίο έχουμε βάλει στο .zip μας δίνουμε
run_program <το όνομα του αρχείου>

Παράδειγμα για να τρέξουμε το script "install_initd.sh" το οποίο ενεργοποιεί το init.d support δίνουμε
run_program <PACKAGE:install_initd.sh>

Σημείωση: Θα προσέξατε ότι τα partition τα γράφουμε με κεφαλαία, ενώ τους φακέλους με μικρά. Προσοχή όμως γιατί το "updater-script" όπως και όλα τα script, λειτουργεί σαν τερματικό, είναι δηλαδή case sensitive. Όταν δε, αναφερόμαστε σε αρχεία και όχι σε φακέλους, βάζουμε μπροστά τη λέξη "PACKAGE".

Update.zip
Με τη βοήθεια του "updater-script" και των εντολών του, μπορούμε να φτιάξουμε τα δικά μας "update.zip" για να κάνουμε αλλαγές σε μία ROM την οποία έχουμε ήδη φλασάρει στη συσκευή μας (όπως ακριβώς κάνουν οι εταιρίες και η ίδια η Google με το Gapps.zip). Η διαφορά των zip αναβαθμίσεων (update.zip) με τα zip αρχεία των ROM είναι ότι περιέχουν μόνο αλλαγές και όχι ολόκληρο το λειτουργικό σύστημα.

Για παράδειγμα αν θέλουμε να βγάλουμε μία αναβάθμιση για τη ROM μας στην οποία θέλουμε να προσθέσουμε μια νέα εφαρμογή συστήματος θα χρειαστούμε απλά το φάκελο "system" με το .apk που θέλουμε να προσθέσουμε, το φάκελο "ΜΕΤΑ-INF" με τις ανάλογες εντολές στο "updater-script" και είμαστε έτοιμοι για φλασάρισμα.

Μπορούμε επίσης να διορθώσουμε κάτι που κάναμε λάθος στην αρχική μας ROM. Για παράδειγμα στο παρελθόν μου έχει τύχει να διαγράψω το launcher της συσκευής μου. Αφού δημιούργησα ένα "update.zip" με τον παραπάνω τρόπο προσθέτοντας μόνο το "launcher.apk" στο "system", το φλάσαρα και κατάφερα να επαναφέρω τη συσκευή μου. Οι λειτουργίες είναι πραγματικά απεριόριστες.


Sign
Όπως τα .apk έτσι και το .zip αρχείο της ROM μας πρέπει να υπογραφεί κατάλληλα για να περάσει τον έλεγχο ασφαλείας στη recovery. Αυτό γίνεται μέσω του APK Tool με τον ίδιο τρόπο που είδαμε στο προηγούμενο μέρος, δίνοντας την εντολή:
java -jar signapk.jar certificate.pem key.pk8 <το όνομα του αρχικού zip> <το όνομα του τελικού zip>
Για παράδειγμα, κάνουμε sign το "update.zip" και ονομάζουμε το τελικό αρχείο, "update-signed.zip" δίνοντας
java -jar signapk.jar certificate.pem key.pk8 update.zip update-signed.zip

Προσωπικά χρησιμοποιώ το πρόγραμμα Αutosigner στα Windows και με έχει βγάλει ασπροπρόσωπο.

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

THE END, κλαψ, σνιαρφ και τα λοιπά.

Υ.Γ. Ένα μεγάλο ευχαριστώ στο XDA Developers και στη Google, που χωρίς τη βοήθειά τους δε θα μπορούσαμε να γράψουμε αυτή τη σειρά.

19 στο: "Δημιουργούμε τη δική μας ROM για όποια συσκευή θέλουμε με ελάχιστες γνώσεις! Μέρος 4ο: Εγκατάσταση & αναβαθμίσεις"
  1. Καλημερα και καλο μηνα, συγχαρητηρια για τον οδηγο, διαβασα ολη τη σειρα και μπηκα στο τριπακι!Ειμαι καινουργιος στο αντροιντ και εδω και καιρο ψαχνω να βρω αν υπαρχει τροπος να "ρουταρω" ενα alkatel one touch 995 ultra, gingerbird.

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Γεια σου Στράτο. Πες μου λιγάκι τη γνώμη σου, σου φάνηκε εύκολη η όλη διαδικασία, ως αρχάριος;

      Στο θέμα σου: Δοκίμασε έναν από τους Universal τρόπους μήπως είσαι τυχερός:

      www.doctorandroid.gr/2012/02/android-basics-root.html

      Διαγραφή
    2. γεια σου Chris K, ο οδηγος ειναι καλογραμμενος και ευκολος στο να τον ακολουθησει καποιος που θελει να λερωσει τα χερια του. Ποσο πιο απλα να τα γραψεις;
      Στο λινκ που μου εδωσες το εργαλειο που μαλλον κανει για μενα ειναι το Unlock Root, εχω firmware version 2.3.6., μολις εχω διαθεσιμο υπολογιστη με παραθυρα θα δοκιμασω, φοβαμαι λιγο μην παει τιτποτα στραβα και μεινω χωρις τηλεφωνο λολ!
      αληθεια για λινουξ υπαρχει καποιο εργαλειο;

      Διαγραφή
    3. Ευχαριστώ για το feedback κατ' αρχάς, είναι πολύ χρήσιμη η άποψη του αναγνώστη και την εκτιμώ.

      Όσον αφορά το root, πάντα κάτι μπορεί να πάει στραβά (προσωπικά σε εμένα δεν έχει τύχει ποτέ) αλλά αν δε δοκιμάσεις δε θα μάθεις. Σχετικά με τα εργαλεία σε Linux, μόνο σκριπτάκια μπορείς να βρεις. Δεν κάθεται κανείς να φτιάξει πρόγραμμα (και ίσως δε χρειάζεται).

      Διαγραφή
  2. Χρήστο δεν γίνεται να υπάρχει πιο απλοϊκός οδηγός για τον αρχάριο χρήστη από τον δικό σου.Θα μπορούσε να έχει περισσότερα modules αλλά θα μπλέκαμε!;).Εμένα με βοήθησε πολύ και με έβαλε στο τρυπάκι να ψάξω περισσότερο αν και ασχολούμαι ενδελεχώς με το android μόλις 3 με 4 μήνες ελέω του htc evo 3d που είναι πολύ απαιτητικό...

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Ευχαριστώ Κώστα. Χρειάζομαι λίγο feedback γιατί δεν ξέρω αν στον αρχάριο φαίνονται όσο απλά τα βλέπω εγώ.

      Μακάρι κάποια στιγμή να προχωρήσουμε σε πιο προχωρημένα θέματα.

      Διαγραφή
  3. Καλημερα.
    Ωραιος οδηγος και απλος θα ελεγα.
    πως θα μπορουσαμε να εγκαταστησουμε καποιους drivers μιας συσκευης που θελω να συνδεσω στο galaxy nexus?
    Ο λογος που ρωταω ειναι για να εγκαταστησω εναν usb ethernet adapter για να εχω δικτυο και απο καλωδιο.

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Πρέπει να βρεις και να εγκαταστήσεις στο GNexus έναν πυρήνα που να περιέχει τους driver που θέλεις.

      Διαγραφή
  4. η συσκευη που εχω, εχει drivers για Linux. Αυτους τωρα, πως θα τους περασω στην rom?

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Δεν μπορείς να τους περάσεις. Πρέπει να περιέχονται στον πυρήνα της συσκευής. Εκτός και αν ξέρεις να διομορφώνεις το Linux πυρήνα και μπορείς να τους προσθέσεις χειροκίνητα.

      Διαγραφή
    2. Μεγαλη μανουρα. Δυσκολη θα ειναι αλλα οχι ακατορθωτη.
      Εχει τυχει να δεις ή να φτιαξεις κατι αντιστοιχο με καποιο συγκεκριμενο usb ethernet adapter για nexus τηλεφωνα?

      Διαγραφή
    3. Δεν το έχω προσπααθήσει ακόμα. Προς το παρόν ότι χρειάστηκα, το κούμπωσα και λειτούργησε.

      Διαγραφή
    4. οταν αναφερεις "οτι χρειαστηκα, το κουμπωσα και λειτουργησε", περιελαμβανε και εναν usb ethernet adapter?

      Διαγραφή
    5. Προφανώς όχι. Θα σου το έλεγα αμέσως αν το είχα δοκιμάσει.

      Διαγραφή
    6. ok. οποτε ξεκιναμε παλι γουγλινγκ και ο θεος βοηθος.
      Ευχαριστω πολυ για τις απαντησεις σου

      Διαγραφή
  5. Γεια σου Χρήστο,

    Μήπως ξέρεις πως μπορούμε να εγκαταστήσουμε το Rom μας σε Virtual Machine;

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Στον emulator είχα διαβάσει κάποτε αυτό αλλά δεν ξέρω αν λειτουργεί ακόμα:

      http://forum.xda-developers.com/showthread.php?t=906161

      Διαγραφή
  6. Καλησπερα Χρηστο, οπως καταλαβαινεις και απο την ωρα που γραφω το ποστ οτι εχω εξαντλησει τα παντα! Θελω να μου πεις αν μπορω να ρουταρω to Bitmore TAB 742 εχει εκδοση 4,0,3 ομως δεν εχει playstore και δεν μπορω πλεον με τις εφαρμογες του slide me market (ασε που δεν μπαινουν και ολες) επισης καποιες φορες κρασαρει και ο explorer...

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Δες εδώ ένας φίλος που το έχει πάρει προσωπικά με τα Bitmore. Το καλύπτει πολύ καλά το θέμα:

      http://hellasandroid.blogspot.gr/2013/05/google-play-bitmore-tabs.html

      Διαγραφή