Τετάρτη, 23 Ιανουαρίου 2013

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



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

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

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

APK
Όπως ήδη γνωρίζουμε, όλες οι εφαρμογές και τα παιχνίδια στο Android είναι πακεταρισμένα σε αρχεία με κατάληξη .apk. Το .apk είναι στην ουσία ένας συμπιεσμένος φάκελος (όπως τα .zip και τα .rar) και έχει αυτή την κατάληξη για να "καταλαβαίνει" το σύστημα του Android ότι πρόκειται για εγκαταστάσιμο αρχείο. Μέσα του θα βρούμε υποφακέλους στους οποίους περιέχονται όλες οι πληροφορίες εγκατάστασης, ο κώδικας, οι βιβλιοθήκες και φυσικά τα εικονίδια που μας ενδιαφέρουν στην προκειμένη περίπτωση.

Κάθε .apk λοιπόν κρύβει και το εικονίδιό του, τα εικονίδια του συστήματος όμως βρίσκονται όλα στο "SystemUI.apk" (διαδρομή "/system/app") και το "framework-res.apk" (διαδρομή "/system/framework"). Αν το δεύτερο δεν υπάρχει στη δική σας ROM, ψάξτε για .apk αρχεία που στην ονομασία τους έχουν τις λέξεις "res" ή "resources", για παράδειγμα στις ROM που περιέχουν το HTC Sense UI το αρχείο είναι το "com.htc.resources.apk".

Αλλαγή εικονιδίων χειροκίνητα
Για να αλλάξουμε λοιπόν τα εικονίδιά μας θα πρέπει να ανοίξουμε το "framework-res.apk" με το APK Tool που θα δούμε παρακάτω. Μπαίνουμε στο φάκελο "res" και ψάχνουμε για υποφακέλους που στην ονομασία τους έχουν τη λέξη "drawable". Μέσα σε αυτούς θα δούμε ότι υπάρχουν όλα τα εικονίδια και τα φόντο των εφαρμογών συστήματος, τα οποία μπορούμε να φορτώσουμε σε ένα πρόγραμμα επεξεργασίας εικόνων και να τα διαμορφώσουμε όπως μας αρέσει. Μόλις τελειώσουμε την επεξεργασία, θα πρέπει να αποθηκεύσουμε το εικονίδιο που φτιάξαμε αντικαθιστώντας το πρωτότυπο:
  • στον ίδιο φάκελο
  • με την ίδια ακριβώς ονομασία,
  • με τις ίδιες διαστάσεις της εικόνας
  • και τον ίδιο τύπο (π.χ. από png σε png)

Θα προσέξετε ότι υπάρχουν πολλά ίδια εικονίδια σε διαφόρους φακέλους. Αυτό συμβαίνει γιατί η κάθε συσκευή, ανάλογα με την ανάλυση οθόνης, τραβάει τα εικονίδια από διαφορετικό φάκελο. Για παράδειγμα, ο φάκελος "drawable-hdpi" εξυπηρετεί συσκευές με ανάλυση οθόνης 480x800p (hdpi), ενώ ο φάκελος "drawable-nodpi" είναι κοινός για όλες. Αλλάξτε τα λοιπόν όλα για να είστε σίγουροι και προσοχή στις ονομασίες. Μην ξεχάσετε επίσης να τσεκάρετε και το "SystemUI.apk" το οποίο περιέχει εικονίδια κυρίως από τη notification bar του Android.

Μερικά από τα περιεχόμενα του "framework-res.apk":


Αλλαγή εικονιδίων μέσω της UOT Kitchen
Ο παραπάνω τρόπος μπορεί να είναι ο καλύτερος γιατί μας δίνει πλήρη ελευθερία να δημιουργήσουμε τα δικά μας εικονίδια, είναι όμως χρονοβόρος. Για όσους θέλουν αλλά βαριούνται, υπάρχει η UOT Kitchen, μία σελίδα στην οποία μπορούμε να ανεβάσουμε το "framework-res.apk" της ROM μας και να επιλέξουμε μέσα από μία πολύ μεγάλη γκάμα εικονιδίων. Η UOT θα αναλάβει να τα ενσωματώσει αυτόματα και θα μας επιστρέψει το αρχείο, έτοιμο για εγκατάσταση. Περισσότερες πληροφορίες.

Μετάφραση της ROM
Τι γίνεται όμως αν η ROM που έχουμε επιλέξει ως βάση, δεν έχει την ελληνική γλώσσα; Θα την παρατήσουμε; Όχι βέβαια! Τα αρχεία μετάφρασης του συστήματος βρίσκονται όλα στο "Settings.apk". Το ανοίγουμε με τον ίδιο τρόπο και μέσα στο φάκελο "res" θα βρούμε ένα σωρό φακέλους με ονομασία "values-**". Θα προσέξετε ότι ο κάθε ένας έχει δύο γράμματα μετά τη λέξη "values", τα οποία είναι η συντομογραφία της γλώσσας που αντιπροσωπεύουν, για παράδειγμα it = italia, bg = bulgaria και πάει λέγοντας (ο ελληνικός φάκελος είναι ο "values-el").

Μέσα σε αυτούς τους φακέλους θα βρούμε μερικά .xml αρχεία τα οποία περιέχουν τις μεταφράσεις, με σημαντικότερο το "strings.xml". Το ανοίγουμε με το Notepad++ και αρχίζουμε τη μετάφραση αλλάζοντας μόνο τα μαύρα γράμματα:


Για να αποφύγουμε τη δημιουργία νέων φακέλων και αρχείων, μπορούμε να επεξεργαστούμε μία άλλη γλώσσα που δεν τη χρειαζόμαστε και να επιλέγουμε αυτή μέσα από τις ρυθμίσεις συστήματος. Δεν ξεχνάμε επίσης να μεταφράσουμε και άλλα περιεχόμενα φακέλων που αναφέρονται σε γλώσσες όπως το "values-**-nokeys" και το "xml-**".

APK Tool & Sign APK
Ας δούμε τώρα πώς λειτουργούν τα προγράμματα που θα χρειαστούμε για να επεξεργαστούμε με επιτυχία τα .apk μας. Μπορεί τα .apk να μοιάζουν με .zip αρχεία αλλά χρειάζονται ειδική μεταχείριση στην αποσυμπίεση και τη συμπίεση. Για αυτό το λόγο θα χρησιμοποιήσουμε το APK Tool και το Sign APK. Η χρήση και η εγκατάστασή τους είναι πανεύκολη, το πρόβλημά όμως είναι ότι εξαρτώνται από τη Java την οποία αν δε στήσουμε σωστά θα έχουμε σφάλματα.

Για να τα εγκαταστήσουμε:

1. Κατεβάζουμε και εγκαθιστούμε την τελευταία έκδοση της Java Runtime Environment (JRE) από την επίσημη σελίδα της.

2. Κατεβάζουμε και εγκαθιστούμε το APK Tool από την επίσημη σελίδα του εκτελώντας τα εξής, ανάλογα με το λειτουργικό μας σύστημα:

Windows:
  • Κατεβάζουμε το "apktool-install-windows-***"
  • Κατεβάζουμε το "apktool-***"
  • Αποσυμπιέζουμε και αποθηκεύουμε τα περιεχόμενά τους (apktool, aapt και apktool.jar) στη διαδρομή "C:\WINDOWS"

Linux:
  • Κατεβάζουμε το "apktool-install-linux-***"
  • Κατεβάζουμε το "apktool-***"
  • Αποσυμπιέζουμε και αποθηκεύουμε τα περιεχόμενά τους (apktool, aapt και apktool.jar) στη διαδρομή "/usr/local/bin" (θα πρέπει φυσικά να έχουμε πρώτα δικαιώματα root)

Mac:
  • Κατεβάζουμε το "apktool-install-macos-***"
  • Κατεβάζουμε το "apktool-***"
  • Αποσυμπιέζουμε και αποθηκεύουμε τα περιεχόμενά τους (apktool, aapt και apktool.jar) στη διαδρομή "/usr/local/bin" (θα πρέπει φυσικά να έχουμε πρώτα δικαιώματα root)

3. Ανοίγουμε ένα τερματικό και πληκτρολογούμε τη λέξη "apktool". Αν όλα έχουν γίνει σωστά, θα μας εμφανίσει τη λίστα εντολών της εφαρμογής.

4. Κατεβάζουμε το Sign APK Tool από το Gοogle και αποσυμπιέζουμε τα περιεχόμενά του (signapk.jar, certificate.pem, key.pk8) σε έναν οποιοδήποτε φάκελο.

Χρήση του APK Tool
Για να ξεκινήσουμε να χρησιμοποιήσουμε το APK Tool θα χρειαστούμε το αρχείο framework της ROM μας αλλά και το .apk που θέλουμε να πειράξουμε. Το framework θα πρέπει να εγκατασταθεί στο APK Tool πριν αρχίσουμε να αποσυμπιέζουμε τα .apk μας, εκτός και αν πρόκειται για το "framework-res.apk" το οποίο είναι ήδη προεγκατεστημένο. Για παράδειγμα αν θέλουμε να πειράξουμε το αρχείο "Mms.apk" μίας ROM που περιέχει το HTC Sense θα πρέπει να το εξάγουμε στον υπολογιστή μας μαζί με το "com.htc.resources.apk" το οποίο είναι το framework αρχείο αυτής της ROM.

Για να το εγκαταστήσουμε στο APK Tool, ανοίγουμε ένα τερματικό, μπαίνουμε στο φάκελο που βρίσκονται τα αρχεία και δίνουμε την εντολή:

Windows & Linux & Mac:
apktool if framework-res.apk

Ως απάντηση θα μας δώσει κάτι παρόμοιο με το παρακάτω:


Decompile
Για να ανοίξουμε το Mms.apk δίνουμε την εντολή:

Windows & Linux & Mac:
apktool d Mms.apk

και θα μας εμφανίσει κάτι τέτοιο:


Μόλις τελειώσει το decompile, στον ίδιο φάκελο με το "Mms.apk" θα έχει δημιουργηθεί ένας ακόμα με το όνομα "Mms" και με όλα τα αρχεία που χρειαζόμαστε. Τώρα μπορούμε να αρχίσουμε το theming.

Compile
Αφού τελειώσουμε με τις αλλαγές μας, για να κλείσουμε τα περιεχόμενα του φακέλου "Mms" σε .apk δίνουμε την εντολή:

Windows & Linux & Mac:
apktool b Mms

και αν όλα πάνε καλά θα μας εμφανίσει το εξής:


Μόλις τελειώσει η διαδικασία, θα βρούμε το νέο "Mms.apk" στη διαδρομή "/Mms/dist".

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

Windows:
java -jar signapk.jar certificate.pem key.pk8 Mms.apk Mms-signed.apk

Θα δημιουργηθεί λοιπόν το αρχείο "Mms-signed.apk" το οποίο μπορούμε πλέον να εγκαταστήσουμε στη συσκευή μας.

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

Στο επόμενο και τελευταίο μέρος της σειράς, θα δούμε πώς πακετάρουμε με επιτυχία μία ROM και θα πούμε λίγα πράγματα για τη σημασία του φακέλου "META-INF".

Αν έχετε εντοπίσει και άλλες χρήσιμες λειτουργίες που μπορούμε να πειράξουμε, προτείνετέ τις στα σχόλια παρακάτω.

28 στο: "Δημιουργούμε τη δική μας ROM για όποια συσκευή θέλουμε με ελάχιστες γνώσεις! Μέρος 3ο: Δημιουργία εικονιδίων και μετάφραση"
  1. Εγώ που θέλω το "Stock AOSP Full Black" με ρολόι μαζί από εδώ http://forum.xda-developers.com/showthread.php?t=1840580
    μπορώ να επεξεργαστώ το systemui.apk όπως λέει και στον οδηγό ώστε να εμφανίζεται και το ρολόι;

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Αυτό που αναφέρεις δεν είναι ROM, είναι ένα mod. Το ξεπακεταρεις και το προσθετεις στη ROM σου. Εννοείται ότι μπορείς να το επεξεργαστεις με τον ίδιο τρόπο.

      Διαγραφή
  2. Μπράβο και για το 3ο μέρος!! Super ;)
    (Περί μετάφρασης: στην CM7.2 είχε το "Used Space" ως "Μεταχειρισμένος Χώρος"... εχμ! )

    ΑπάντησηΔιαγραφή
  3. Καλησπέρα, πολύ χρήσιμο όμως έχω ένα προβληματάκι. Άρχισα να μεταφράσω το "Settings.apk" με τον παραπάνω ακριβώς τρόπο, όλα καλά, μέχρι το σημείο που πρέπει να εγκαταστήσω την εφαρμογή στο κινητό μου, βγάζει το μήνυμα "Application not installed"

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Γειά σου Αλέξη. Πες μου λίγο, πώς προσπαθείς να το εγκαταστήσεις;

      Διαγραφή
    2. Λοιπόν, έβαλα το Settings.apk στο /system/app/ με επιβεβαίωση αντικατάστασης, άλλαξα τα permissions (rw-r--r--). Ύστερα το ανοίγω για να κάνω install...

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

      Διαγραφή
  4. Το δοκίμασα και αυτό, δυστυχώς τίποτα. Επίσης δοκίμασα να το βάλω στην ROM και να ξαναφλασάρω, και πάλι τίποτα...

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Άρα κάτι συμβαίνει με το apk. Κάπου έχει γίνει λάθος στο compile ή στην υπογραφή του. Να σου πω την αλήθεια έκανα 100 δοκιμές για να μπορέσω να στήσω με επιτυχία το APK Tool. Αυτή η Java μου έσπασε τα νεύρα.

      Διαγραφή
  5. Χμμ, να προσπαθήσω να το ξανακάνω ακόμη μια φορά...Ευχαριστώ πολύ...

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

      Διαγραφή
  6. Καλησπέρα Chris K, θα ήθελα να κάνω μια ερώτηση μπορεί να είναι και χαζή. Για να επεξεργαστώ το Settings.apk, έχει σημασία εάν είναι από επίσημη ή custom ROM;

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

      Διαγραφή
    2. Μάλιστα, δοκίμασα χθες να μεταφράσω την εφαρμογή Mms.apk κι έγινε κανονικότατα...επίσης ξαναπροσπάθησα το Settings.apk όμως και πάλι τίποτα...

      Διαγραφή
  7. Πω! Ειλικρινά σε ευχαριστούμε που μοιράζεσαι τις γνώσεις σου και μας παρουσιάζεις αυτήν την υπέροχη "σειρά μαθημάτων" για να φτιάξουμε μια προσωπική μας ROM για το smartphone μας !!!

    Εγώ να ρωτήσω κάτι που θα ακουστεί χαζό μάλλον. :P
    Στον καλλωπισμό μια custom ROM δεν συμπεριλαμβάνεται και το bootanimation; Το ξέρω πως δεν βρίσκεται στην εκτίμηση πολλών γιατί αργεί την εκκίνηση της συσκευής, όμως θα ήταν ωραίο να μας πεις πως γίνεται να το περάσουμε στην ROM μας. Για όποιον ενδιαφέρεται.

    Επίσης γίνεται να πειραξουμε την Notification bar (ή αλλιώς Status bar); Να την παραμετροποίουμε όπως θέλουμε και μας αρέσει πχ να βγάλουμε το εικονίδιο για Ενεργοποίηση/Απενεργοποίηση του GPS ή να προσθέσουμε κι άλλα πχ Ενεργοποίηση/Απενεργοποίηση του 3G.
    Για όσους βρίσκονται στην 4.2 έκδοση μπορεί να μην λέει πολλά γιατί έχουν το Quick Settings, για εμάς με λίγο παλαιότερη έκδοση είναι σημαντικό. :)

    (Είπα κι εγώ μερικές προτάσεις...)

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Γειά σου Παναγιώτη, σχετικά με τη status bar, γίνεται να την πειράξεις και να προσθέσεις ότι θέλεις αλλά θα πρέπει να συμπληρώσεις κάποιες γραμμές στο xml αρχείο της. Δεν τη συμπεριέλαβα στα μαθήματα διότι υποσχέθηκα να είναι ιδιαίτερα απλά και εύκολα.

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

      Διαγραφή
    2. Ωραία! Χαίρομαι που συνέβαλα στην προσπάθειά σου!

      Πφ... Κρίμα! Θα ήταν πολύ καλό να πειραζαμε και την status bar... Είναι τόσο περίπλοκο που θεωρείς πως έστω και μικρά παραδειγματάκια, θα ήταν απαγορευτικά;

      Και κάτι τελευταίο πόσα ακόμα μαθήματα πιστεύεις πως θα γράψεις; Έχω ξεκινήσει, φυσικά, μερικά βήματα για να φτιάξω την ταπεινή μου ROM, αλλά θέλω να περιμένω να ολοκληρώσεις τα μαθήματα, για να έχω καλύτερη εικόνα για τα βήματα που θα κάνω και να μην έχω τυχόν πισωγυρίσματα. (Πιστεύω θα υπάρχουν κι άλλοι που θα κάνουν το ίδιο γι αυτό ρωτάω δημόσια και όχι σε e-mail.)

      Διαγραφή
    3. Ρίξε μια ματιά εδώ για το τι χρειάζεται να φτιάξεις Quick Toggles :

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

      Διαγραφή
    4. Ουπς κατάλαβα... Χαχα!
      Τέλος πάντων ευχαριστώ πολύ που βοήθησες!! :)

      Διαγραφή
  8. Επίσης θα ήταν πολύ καλό αν θα μπορούσες να μας πεις πως μπορούμε να "μετατρέψουμε" μία ROM από κατασκευαστή σε AOSP.Δηλαδή ποιες εφαρμογές θα μπορούσαμε να διώξουμε/προσθέσουμε ώστε η ROM να είναι σαν αυτή των Nexus.Επίσης πως θα μπορούσαμε μέσω της Dsixda Kitchen να ανεβάσουμε τα CPU Frequencies του Kernel ώστε να μπορούμε να κάνουμε Overclock.Επίσης συγχαρητήρια για την σειρά.Με έχει βοηθήσει πάρα πολύ.

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Το πρώτο που λες δεν γίνεται καθώς οι αλλαγές είναι βαθιά μέσα στα framework files και δεν αφαιρούνται έτσι εύκολα. Μόνο στο HTC Hero μπορούσε κάποιος να το κάνει.

      Τώρα η dsixda kitchen είναι πιο προχωρημένη για το σκοπό αυτών των άρθρων.

      Διαγραφή
    2. ΟΚ τότε.Μήπως ξέρεις πότε έρχεται το επόμενο μέρος?

      Διαγραφή
  9. Καλησπέρα...μετά από πολύ κόπο κατάφερα να μεταφράσω το Settings.apk της ROM μου...αυτό που θέλω τώρα είναι να δημιουργήσω μια δικιά μου γλώσσα, τα ελληνικά...ποιος είναι ο τρόπος; (Εννοώ πως τώρα για να έχω ελληνικά στο κινητό, έχω επεξεργαστεί τα τούρκικα, και αυτά επιλέγω για να έχω ελληνικά...)

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Για να πας ένα βήμα παραπέρα πρέπει να προγραμματίσεις μέσω του ADT. Κατέβασε τα εργαλεία από εδώ:

      http://developer.android.com/sdk/index.html

      Διαγραφή
  10. Καλησπερα , ισως σχολιαζω λιγο αργα στο συγκεκριμενο αρθρο αλλα σε ολες τις εφαρμογες που εψαξα δεν υπαρχει φακελος values με αρχεια για να μεταφρασω. Καμια εφαμογη μ δεν το εχει αυτο. ακομα και το settings?

    Χρησιμοποιω cm9 για το lg e400

    ΥΓ : εβαλα καποια apks και init scripts ( οπως τα λενε )
    τα apks με ενα fix permissions απο το recovery μετα το flash δεν θα εχουν προβλημα σωστα?

    ΑπάντησηΔιαγραφή
    Απαντήσεις
    1. Ψάχνεις μέσα στο φάκελο "res" σωστά; Εκεί πρέπει να είναι.

      Όσον αφορά τα permissions λογικά δε θα έχουν πρόβλημα αλλά προσωπικά θα τα έφτιαχνα με το χέρι.

      Διαγραφή