Φτιάξε μια Android 7.0 ROM για την Xperia συσκευή σου με τις επίσημες οδηγίες της Sony
Η Sony είναι σίγουρα ο μοναδικός κατασκευαστής μετά τη Google, που βοηθάει τόσο πολύ τους δημιουργούς custom ROM, να υποστηρίξουν τις συσκευές της. Το απέδειξε όντας η μοναδική εταιρία που συμμετείχε στο developer peview του Android 7.0 με το Xperia Z3 και πλέον μας δίνει τις επίσημες οδηγίες της για να δημιουργήσουμε Nexus-style ROM για όλες τις υποστηριζόμενες Xperia συσκευές!
Δεν είναι κάτι νέο, καθώς η Sony μας δίνει αυτές τις οδηγίες κάθε φορά που υπάρχει νέα έκδοση και είναι πραγματικά πολύ εύκολο να φτιάξουμε τη δική μας, αν έχουμε βασικές γνώσεις Linux και τερματικού. Αν λοιπόν ψήνεστε, ελάτε να δούμε ένα προς ένα τα βήματα παρακάτω.
Εγκατάσταση Java
Θα χρειαστούμε ένα PC με Linux και καλύτερα με 32-μπιτο Ubuntu στο οποίο πρέπει πρώτα να εγκαταστήσουμε την όγδοη έκδοση της Java για να φτιάξουμε το build μας. Ξεκινάμε διαγράφοντας τις προηγούμενες εκδόσεις Java με την εντολή:
sudo apt-get purge openjdk-\* icedtea-\* icedtea6-\*
Ακολουθούμε τις οδηγίες και αφού τελειώσουμε δίνουμε τις ακόλουθες εντολές για να εγκαταστήσουμε τη Java 8:
sudo apt-get update
sudo apt-get install openjdk-8-jdk
Μόλις τελειώσει η εγκατάσταση, δίνουμε την παρακάτω εντολή για να δούμε αν όλα πήγαν καλά:
java -version
Αν όλα είναι εντάξει το τερματικό θα μας απαντήσει με κάτι σαν αυτό:
java version "1.8.0_91"
OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-0ubuntu4~14.04-b14)
OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
Εγκατάσταση απαραίτητων πακέτων
Πάμε τώρα να εγκαταστήσουμε τις βιβλιοθήκες και τα πακέτα τα οποία είναι απαραίτητα για τη δημιουργία της ROM κει ευτυχώς μπορούν να εγκατασταθούν με μία μόνο εντολή:
sudo apt-get install bison g++-multilib git gperf libxml2-utils make zlib1g-dev:i386 zip
Αφού τελειώσει και αυτό, ο υπολογιστής μας έχει πλέον τα κατάλληλα εργαλεία για να δημιουργήσει αρχεία img, τα οποία εγκαθιστούμε μέσω fastboot.
Εγκατάσταση του Repo tool
Επόμενο βήμα είναι να εγκαταστήσουμε το Repo tool της Google, με το οποίο μπορούμε να συγχρονίσουμε το αποθετήριο του Android και της Sony με τον υπολογιστή μας. Αυτό γίνεται με τις εντολές:
mkdir ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
Τώρα πρέπει να ανοίξουμε το αρχείο .bashrc και να του δηλώσουμε το path που χρησιμοποιούμε στον υπολογιστή μας. Αυτό γίνεται με τις εντολές:
sudo nano ~/.bashrc
export PATH=~/bin:$PATH
source ~/.bashrc
Εγκατάσταση των αποθετηρίων του Android και της Sony
Επόμενο βήμα είναι να κατεβάσουμε τον κώδικα του Android στον υπολογιστή μας. Δημιουργούμε το φάκελο "android" και το κατεβάζουμε εκεί με τις εντολές:
mkdir ~/android
cd ~/android
repo init -u https://android.googlesource.com/platform/manifest -b android-7.0.0_r1
Κατεβάζουμε και το αποθετήριο της Sony στο οποίο περιέχονται οι driver για τις μικροσυσκευές όπως το WiFi, το Bluetooth και άλλα, μέσα σε έναν έτοιμο πυρήνα (kernel). Θα δημιουργήσουμε ένα αρχείο με ονομασία "sony.xml" και θα το ανοίξουμε με τις εντολές:
mkdir .repo/local_manifests/
nano .repo/local_manifests/sony.xml
Στο επόμενο βήμα αποθηκεύουμε τα αποθετήρια της Sony στο "sony.xml" κάνοντας αντιγραφή και επικόλληση όλα τα παρακάτω:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="sony" fetch="git://github.com/sonyxperiadev/" />
<remove-project name="platform/hardware/qcom/camera" />
<project path="device/sony/sepolicy" name="device-sony-sepolicy" groups="device" remote="sony" revision="master" />
<project path="device/sony/amami" name="device-sony-amami" groups="device" remote="sony" revision="master" />
<project path="device/sony/aries" name="device-sony-aries" groups="device" remote="sony" revision="master" />
<project path="device/sony/castor" name="device-sony-castor" groups="device" remote="sony" revision="master" />
<project path="device/sony/castor_windy" name="device-sony-castor_windy" groups="device" remote="sony" revision="master" />
<project path="device/sony/common" name="device-sony-common" groups="device" remote="sony" revision="master" />
<project path="device/sony/common-headers" name="device-sony-common-headers" groups="device" remote="sony" revision="aosp/LA.BR.1.3.3_rb2.14" />
<project path="device/sony/common-kernel" name="vendor-sony-kernel" groups="device" remote="sony" revision="aosp/LA.BR.1.3.3_rb2.14" />
<project path="device/sony/honami" name="device-sony-honami" groups="device" remote="sony" revision="master" />
<project path="device/sony/kanuti" name="device-sony-kanuti" groups="device" remote="sony" revision="master" />
<project path="device/sony/ivy" name="device-sony-ivy" groups="device" remote="sony" revision="master" />
<project path="device/sony/karin" name="device-sony-karin" groups="device" remote="sony" revision="master" />
<project path="device/sony/karin_windy" name="device-sony-karin_windy" groups="device" remote="sony" revision="master" />
<project path="device/sony/kitakami" name="device-sony-kitakami" groups="device" remote="sony" revision="master" />
<project path="device/sony/leo" name="device-sony-leo" groups="device" remote="sony" revision="master" />
<project path="device/sony/loire" name="device-sony-loire" groups="device" remote="sony" revision="master" />
<project path="device/sony/rhine" name="device-sony-rhine" groups="device" remote="sony" revision="master" />
<project path="device/sony/satsuki" name="device-sony-satsuki" groups="device" remote="sony" revision="master" />
<project path="device/sony/scorpion" name="device-sony-scorpion" groups="device" remote="sony" revision="master" />
<project path="device/sony/scorpion_windy" name="device-sony-scorpion_windy" groups="device" remote="sony" revision="master" />
<project path="device/sony/suzu" name="device-sony-suzu" groups="device" remote="sony" revision="master" />
<project path="device/sony/shinano" name="device-sony-shinano" groups="device" remote="sony" revision="master" />
<project path="device/sony/sirius" name="device-sony-sirius" groups="device" remote="sony" revision="master" />
<project path="device/sony/sumire" name="device-sony-sumire" groups="device" remote="sony" revision="master" />
<project path="device/sony/suzuran" name="device-sony-suzuran" groups="device" remote="sony" revision="master" />
<project path="device/sony/togari" name="device-sony-togari" groups="device" remote="sony" revision="master" />
<project path="device/sony/tulip" name="device-sony-tulip" groups="device" remote="sony" revision="master" />
<project path="hardware/qcom/camera" name="camera" groups="device" remote="sony" revision="aosp/LA.BR.1.3.3_rb2.14" />
<project path="kernel/sony/msm" name="kernel" groups="device" remote="sony" revision="aosp/LA.BR.1.3.3_rb2.14" />
<project path="vendor/qcom/opensource/dataservices" name="vendor-qcom-opensource-dataservices" groups="device" remote="sony" revision="master" />
<project path="vendor/sony-oss/thermanager" name="thermanager" groups="device" remote="sony" revision="master" />
<project path="vendor/sony-oss/macaddrsetup" name="macaddrsetup" groups="device" remote="sony" revision="master" />
<project path="vendor/sony-oss/timekeep" name="timekeep" groups="device" remote="sony" revision="master" /> </manifest>
Αποθηκεύουμε το αρχείο και συνεχίζουμε ανοίγοντας την επίσημη σελίδα της Sony που περιλαμβάνει τα binary για όλες τις συσκευές της. Βρίσκουμε τη συσκευή που θέλουμε και επιλέγουμε "Download AOSP xxxxxx binaries". Κατεβάζουμε το zip αρχείο και το αποσυμπιέζουμε μέσα στο φάκελο "android" που δημιουργήσαμε στην αρχή. Για να δούμε αν όλα είναι εντάξει, δίνουμε τις παρακάτω εντολές στο τερματικό:
cd ~/android
ls vendor/sony
Η απάντηση που πρέπει να μας δώσει το τερματικό είναι αυτή:
kanuti-common kitakami-ivy kitakami-sumire loire-suzu rhine-honami shinano-castor shinano-scorpion yukon-eagle kitakami-karin kitakami-suzuran rhine-amami rhine-togari shinano-common shinano-sirius kitakami-common kitakami-satsuki loire-common rhine-common shinano-aries shinano-leo
Σε αυτό το σημείο είμαστε έτοιμοι να κατεβάσουμε το αποθετήριο της Sony, κάτι που γίνεται απλά με την εντολή:
repo sync
Προσθέτουμε τα patch της Sony στον κώδικα του Android
Για να λειτουργεί το WiFi, το Bleuetooth, το GPS, η οθόνη και άλλες μικροσυσκευές του κινητού μας, πρέπει να προσθέσουμε τους driver τους κάτι που γίνεται με τις παρακάτω εντολές:
cd hardware/qcom/audio
git revert --no-edit 1c9849ca9873ec815caf52935aa772b22658219e
cd ../bt
git revert --no-edit c7dc913784965e4ce705c2045f0a8b43fcd1db1c
cd ../display
git revert --no-edit 798662177c2d334ce59b232effd3315ee872a33a
git revert --no-edit a8a53d301806a2134e72b55797378e6f7cf63e14
cd ../gps
git revert --no-edit 53bf15aab71461f81e27e6f5176afcd1a29af7d4
git revert --no-edit 486ab751599b7f8b5a2f2711d22867ad54fdc79b
cd ../media
git revert --no-edit 9e8b76d32ece15e79ebf4b02ede869d89807eec6
cd ../keymaster
git revert --no-edit 583ecf5ed2a4be0d05229b8c6726680c3836be8b
git fetch https://android.googlesource.com/platform/hardware/qcom/keymaster refs/changes/70/212570/5 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/hardware/qcom/keymaster refs/changes/80/212580/2 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/hardware/qcom/keymaster refs/changes/61/213261/1 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/hardware/qcom/keymaster refs/changes/21/245721/1 && git cherry-pick FETCH_HEAD
cd ../../../packages/apps/Nfc
git revert --no-edit 988c3fff5470a1de3a880bd07fa438cc47e283c8
Φτιάχνουμε τη ROM μας (επιτέλους)
Όλα είναι έτοιμα για να χτίσουμε τη ROM μας. Αυτό γίνεται δίνοντας την παρακάτω εντολή:
source build/envsetup.sh && lunch
Σε αυτό το σημείο θα μας βγάλει μία λίστα με την κωδική ονομασία της κάθε συσκευής, από την οποία θα πρέπει να διαλέξουμε τη δική μας. Για παράδειγμα:
- το Xperia X ονομάζεται "suzu"
- το Xperia Z5 "sumire"
- το Xperia Z3+ "ivy" και ούτω καθεξής.
Τέλος θα πρέπει να ορίσουμε την ταχύτητα δημιουργίας του build, προσθέτοντας στο τέλος της εντολής τον αριθμό των επεξεργαστών του υπολογιστή μας. Αν για παράδειγμα είναι τετραπύρηνος δίνουμε την εντολή:
make –j 4
Τώρα μπορούμε να πάμε για κανένα καφέ ή μία τριήμερη εκδρομή στο βουνό, γιατί ο μέσος υπολογιστής δε θα κάνει λιγότερο από 10 - 12 ώρες να τελειώσει.
Εγκαθιστούμε τη ROM στο κινητό μας
Αν όλα έχουν πάει καλά (δεν παίζει να μη σας βγάλει κάποιο σφάλμα τις πρώτες φορές), τα πακέτα μας είναι έτοιμα μέσα στο φάκελο "android" και στον αντίστοιχο φάκελο της συσκευής μας. Τώρα μένει να ξεκλειδώσουμε τον bootloader της συσκευής μας, να τη συνδέσουμε μέσω USB με τον υπολογιστή μας, να τη βάλουμε σε fastboot/bootloader mode και να τη συνδέσουμε με τον υπολογιστή μας.
Ανοίγουμε ένα τερματικό στο φάκελο που βρίσκονται το "boot.img", το "system.img" και το "userdata.img" και για να τα εγκαταστήσουμε δίνουμε τις παρακάτω εντολές αντικαθιστώντας το "<device>" με την κωδική ονομασία της συσκευής μας:
fastboot –S 256M flash boot out/target/product/<device>/boot.img
fastboot –S 256M flash system out/target/product/<device>/system.img
fastboot –S 256M flash userdata out/target/product/<device>/userdata.img
Μετά και από αυτό η συσκευή μας θα εκκινήσει έχοντας μία Android 7.0 ROM σε στυλ Nexus, χωρίς δηλαδή την παραμετροποίηση της Sony. Το καλύτερο από όλα είναι ότι αν το κάνεις μία φορά, τότε μπορείς να φτιάχνεις τη δική σου ROM, κάθε φορά που κυκλοφορεί η νέα έκδοση του Android, χωρίς να περιμένεις το update της Sony, δε θα έχεις όμως τα καλούδια που προσθέτει αυτή στη ROM της.
Σημειώσεις:
- Δεν εξηγούμε τι κάνει η κάθε εντολή γιατί απλά δεν έχει σημασία.
- Σε πολλές περιπτώσεις μπορεί να βγει κάποιο σφάλμα κυρίως επειδή ο υπολογιστή μας δεν μπορεί να βρει κάποιες εξαρτήσεις. Το τερματικό μας λέει πάντα ποιο είναι το πρόβλημα, οπότε μπορούμε να ψάξουμε για αυτές τις εξαρτήσεις στο Google.