Φτιάξε μια 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 της.

Σημειώσεις:

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

Δείτε επίσης...

Ιδιωτικό απόρρητο | Το αφελές επιχείρημα του ''Δεν έχω τίποτα να κρύψω''

Android | Γιατί δε θα αγόραζα ποτέ smartphone της OnePlus

Φεύγω από την Google (μέρος 15) | ''Ξηλώνουμε'' τα Google apps από το Android

Docker (μέρος 7) | Στήνουμε έναν reverse proxy για τα container μας με το Traefik

Μάθε παιδί μου Linux (μέρος 11) | Δίσκοι, κατατμήσεις και σύστημα αρχείων (filesystem)

Απόρρητο | ''Μπερδεύουμε'' τον αλγόριθμο Google και Facebook με ψεύτικες πληροφορίες

Ubuntu Touch 2020 review | Μια πραγματική mobile GNU/Linux διανομή έτοιμη για καθημερινή χρήση

Android | Περιόρισε την παρακολούθηση των εφαρμογών και κόψε τις διαφημίσεις με το TrackerControl

Android | Βάλε στην ''απομόνωση'' τις εφαρμογές που δεν εμπιστεύεσαι με το Shelter

Docker (μέρος 1) | Τι είναι και πώς το εγκαθιστούμε στον υπολογιστή μας;