2019. július 21., vasárnap

Gyorskeresés

ZTE v5 RedBull X9180 - CM12.1 rom készítése

Írta: | Kulcsszavak: zte . v5 . redbull . x9180 . cm . 12 . 12.1 . cyanogenmod

[ ÚJ BEJEGYZÉS ]

<<--------------ELŐSZÓ---------------->> CM fordítás leírás v1.3, 16.06.23

Ez a bejegyzés leginkább magam számára valamint a hasonlóan elhivatottaknak született meg, hogy később is meglegyen a dolog mikéntje. A ZTE V5 teló nem nevezhető gyengének ma sem (csak a 4G hiányzik belőle kínai volta miatt) de mivel "amsuser" már nem csinál több CM portot és a Mokee rom meg olyan amilyen, így szükségét láttam új CM 12.1 rom fordításának.

Mivel ez a ZTE teló hivatalosan nem támogatott, így eléggé nyögvenyelős rá CM romot fordítani. Amúgy sok CM fordítási leírás van, de ettől még nem lesz könnyű dolgunk. Úgy is mondhatnám, hogy tömény szopás az egész. Amiket itt lentebb írok, arra mindre nekem kellett rájönnöm. - Ha legközelebb állásinterjún leszek, akkor a fizetési igényél azt fogom mondani, hogy én már a google-ben is sokat kerestem! :)

Kezdésnek kell egy 64 bites Linux disztribúció, javaslom a Debian-t. 4 magos proci nem árt és 8GB ram sem, de legyen a 8GB ram mellette pár GB swap partíció is, mert több esetben túllépi a 8GB-ot a felhasznált ram mennyísége...
Olyan disztróra van szükség a fordításhoz, amin elérhető az OpenJDK7 mert ez kell a CM12 fordításához, az Oracle-es Java7 nem jó és egyéb OpenJDK verzió sem. A továbbiakban feltételezem, hogy a rendszerben van szabad 40-50GB tárhely (inkább 100GB) és az elérhető a /home alatt. Nyilván lehet máshol is forgatni a CM-et, de maradjunk az egyszerű útnál.

<<--------------ALAPOK---------------->>

Tegyük fel az alap dolgokat:
sudo apt-get update && apt-get upgrade
sudo apt-get install bison build-essential curl flex git gnupg gperf libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop maven openjdk-7-jdk openjdk-7-jre pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev xmlstarlet

Csináljuk meg az alap jönyvtárat a /home alatt, majd szedjük le a repo binárist.
$ mkdir -p ~/bin
$ mkdir -p ~/android/system
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

Debian alatt alapból ben van a ~/.profile fájlban ez:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi

ha esetleg nem lenne, akkor tegyük be.

<<--------------FORRÁS LETÖLTÉS---------------->>

Hozzuk létre a repót, ahová letöltődik a forráskód.
$ cd ~/android/system/
$ repo init -u https://github.com/CyanogenMod/android.git -b cm-12.1

$ repo sync -c -j 4

A sync leszedi a CM12.1-es stabil CM ágat, ez alatt van idő meginni egy kávét. Egy raklap kávét. Valami 27GB felett lesz a letöltött adat mennyiség, szóval a gyors internet nem árt. Ezzel a parancsal lehet a későbbiekben frissíteni a repót.

A system mappán belül van egy .repo rejtett mappa. Abba hozzuk létre a local_manifests mappát, azon belül pedig a roomservice.xml fájlt, aminek ez legyen a tartalma:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>


<remote fetch="https://gitlab.com" name="gitlab" />

<project name="CyanogenMod/android_device_qcom_common" path="device/qcom/common" remote="github" revision="cm-12.1" />
<project name="CyanogenMod/android_hardware_qcom_fm" path="hardware/qcom/fm" remote="github" revision="cm-12.1" />

<project name="X9180/android_kernel_zte_x9180.git" path="kernel/ZTE/X9180" remote="gitlab" revision="cm-12.1" />
<project name="X9180/android_device_zte_x9180.git" path="device/ZTE/X9180" remote="gitlab" revision="cm-12.1" />
<project name="X9180/android_device_zte_x9180_proprietary.git" path="vendor/ZTE/X9180" remote="gitlab" revision="cm-12.1" />

</manifest>

Majd ismét adjuk ki a repo sync parancsot. Mivel az X9180 nem támogatott a CM által, így nem is lehet alapból rá fordítani. Miután az újabb másfél giga lejött, már meglesznek a kellő fájlok a fordításhoz.

Hozzuk létre a fordítási környezetet és a fordítási célt.
$ source build/envsetup.sh
$ breakfast X9180

<<--------------MÓDOSÍTÁSOK---------------->>

Az export-os sort be lehet tenni a ~/.bashrc fájlba, úgy meglesz a következő indításkor is. Ezzel a fordítás eredményei egy cache mappába kerülnek, ami a következő CM fordításkor nagyban fel fogja gyorsítani a fordítási időt.
export USE_CCACHE=1
prebuilts/misc/linux-x86/ccache/ccache -M 50G

Az 50G jelenti a cache maximális méretét.

A sikeres fordítás érdekében meg kell tenni néhány módosítást a fájlokban.
Ezt a sort:
frameworks/av/media/libstagefright/data/media_codecs_ffmpeg.xml:system/etc/media_codecs_ffmpeg.xml \
innen: device/ZTE/X9180/msm8226.mk

ki kell cserélni erre:
external/stagefright-plugins/data/media_codecs_ffmpeg.xml:system/etc/media_codecs_ffmpeg.xml \

Ki kell kommentezni az android/system/vendor/cm/sepolicy/file.te fájban ezt a sort:
type livedisplay_sysfs, sysfs_type, file_type;
-a kikommentezett sor után hagyjunk egy üres sort!

Van még egy futtatható shell script, amit el kell indítani. Az feltölt két xml fájlt, ha jól értem a menü elemekkel.
Ebben a mappában: device/ZTE/X9180/

./update-overlay.sh

Ugyanitt adjunk futtatási jogot a changelog generátor fájlnak, majd futtassuk le:

chmod +x update-changelog.sh
./update-changelog.sh

<<--------------KERNEL---------------->>
A kernel/ZTE/X9180/arch/arm/configs mappában van egy nagy rakás kernel konfig. Ezeket érzésem szerin nem a kconfig csinálta, hanem úgy generálták egy scripttel. Nekünk érdekes módon az msm8926-ne501j_defconfig fájl kell, hiába msm8226-os SOC van a telefonban és nem msm8926.

Ha nem nyúlunk hozzá ehhez a fájlhoz, akkor a kernel végleges mérete 6.3MB körül lesz. Viszont vannak opciók, amikkel véleményem szerint jobb végeredményt érhetünk el. A fájl elejére szúrjuk be ezeket a sorokat:

CONFIG_CC_OPTIMIZE_FOR_SIZE=n
CONFIG_KSM=y
CONFIG_SLUB_DEBUG=n
CONFIG_PRINTK=n
CONFIG_PRINTK_TIME=n
CONFIG_EARLY_PRINTK=n
CONFIG_TTY_PRINTK=n
CONFIG_HAVE_ARCH_JUMP_LABEL=y
CONFIG_JUMP_LABEL=y
CONFIG_LEGACY_PTY_COUNT=4
CONFIG_DEBUG_USER=n
CONFIG_DEBUG_LL=n

Ezekkel a paraméterekkel a végeredmény 5.6MB lesz és biztosan O2-es optimalizációval fordít a GCC, ami gyorsabb végeredményt jelent mintha méretre optimalizálna.

<<..................NYELV ÁTÁLLÍTÁSA-->>

Módosítsuk az android/system/device/ZTE/X9180/system.prop.mk fájlban ezt a két ro.pro... sort "hu"-végüre.

PRODUCT_PROPERTY_OVERRIDES += \
ro.product.locale.language=hu \
ro.product.locale.region=HU

Ez itt már nem kell, de maradjon emlékeztetőnek:
<<----FORRÁS MÓDOSÍTÁSOK--->>

Bele kell szerkeszteni néhány fájlba, mert nem minden tökéletes.

*hívás rögzítés
A hívásrögzítés például ki van kapcsolva az EU és USA területén, de maga a funkció benne van a romban. Több dolgot is módosítani kell.

A android/system/packages/apps/Dialer/src/com/android/services/callrecorder/CallRecorderService.java fájlban az összes OutputFormat.AMR_WB -t OutputFormat.AMR_NB -re kell cserélni.

Van egy CM commit [link], amit vissza kell csinálni. Erről a fájlról van szó:
android/system/packages/apps/Dialer/src/com/android/services/callrecorder/CallRecorderService.java ,a piros sorokat ki kell szedni és be kell tenni a zöld sort: [link], valamint az összes ....OutputFormat.AMR_WB -ben a WB-t NB-re kell cserélni, 3 lesz belőle.

Ebben a mappában a values-mcc202... -tól elkezdve a values-mcc362-ig látható mappákat is ki lehet törölni, így a felvétel elkezdése előtt rá sem fog kérdezni, hogy biztosan akarunk-e felvételt készíteni.

<<--------------FORDÍTÁS---------------->>

Kezdjük el a fordítást:
$ croot
$ brunch X9180

És élvezzük a várakozás boldog óráit. :)
A folyamat végén az out/target/product/X9180/ mappában lesz a telepíthető .zip fájl.

<<---EGYÉB APK FÁJL BEÉPÍTÉSE-->>

Nem egyszerű egyéb programot úgy beépíteni a romba, hogy az bele is forduljon, valamint még működjön is. Továbbá ezen az úton az alkalmazás rendszer alkalmazás lesz, amit el sem lehet távolítani külön program nélkül és ez egy szintén nagyon rosszul dokumentált terület.

Helyette tehetünk .apk fájlt a kész zip fájlba, és rávehetjük a telepítőt, hogy gyakorlatilag ADB-n keresztül lője fel a megadott apk-kat a romba.

Másoljuk be a zip-be amit szeretnénk, mondjuk az "extra" könyvtárba. Majd pedig szerkesszük meg az updater-script fájlt a META-INF/com/google/android mappában, tegyük bele a fájl végére ezt:

run_program("adb", "install", "-r", "extra/programod.apk");

Az ilyen módon felrakott apk-k friss telepítést igényelnek, meglévő romra telepítésnél nem fognak települni.

<<--------------HIBAKEZELÉS---------------->>

Megszakadt fordítások esetén érdemes lehet make clean -t futtatni a főkönyvtárban, ez töröl minden átmeneti vagy lefordított állományt, így tiszta lappal lehet kezdeni újra a fordítást. Az is megoldás lehet, ha a system/out könyvtárban csinálunk egy rm -rf -et, ekkor minden kimeneti állomány törlésre kerül.

Hozzászólások

(#1) Aron1988


Aron1988
(fanatikus tag)

A budai elit nívóját nem szabad lentebb adni! Mutasd a telefonod, megmondom ki vagy!

További hozzászólások megtekintése...
Copyright © 2000-2019 PROHARDVER Informatikai Kft.