Skip to content

Instantly share code, notes, and snippets.

@g4570n
Forked from monticellifernando/ROMBuild.md
Created December 20, 2020 01:07
Show Gist options
  • Save g4570n/a604f93194a962c6284412f99fc0fe9c to your computer and use it in GitHub Desktop.
Save g4570n/a604f93194a962c6284412f99fc0fe9c to your computer and use it in GitHub Desktop.
Guía para compilar una ROM de android

Algunos tips para compilar la ROM para tu teléfono

En realidad, las instrucciones que están en la twiki de LineageOS son bastante claras. De hecho yo pude compilar las ROMS para los siguientes teléfonos sin problema:

Así que, aggarren uno de esos links (o busquen el de su teléfono) y síganlo. Acá abajo un resumen de como hice el de evert (G6Plus)

Prerequisitos

Necesitás todo lo que haga falta para compilar código C/C++ y java por lo pronto. Y, claro, el android sdk. Así que, dependiendo de que OS tengas ahí vas a tener que arremangarte y buscar.

Librerías, tool chain, etc

En la twiki de lineageOS hay una lista explícita de que binarios y librerías necesitás tener. Yo uso Arch y Manjaro. De modo que busqué en los repositorios los paquetes que tengan los nombres parecidos a los que figuran ahí y los instalé a todos. Y si faltaba algo, entonces instalé las dependencias (así de cabeza). Yo tengo instalado openJDK 9 y con eso pude ompilar lineageOS17 (Android 10) sin problema.

Android toolkit

En la twiki de LineageOS dice que te bajes el comando "repo". En Arch/Manjaro está en AUR. Yo estoy usando ese. Si no bajate el que dice ahí. También te dice que te bajes del sitio de gúgel las platform-tools-latest-linux.zip. En Arch y Manjaro están disponibles en los repositorios así que yo uso las de mi distro.

Bueno, y ahora? Como lo compilo

No voy a copiar acá toda la twiki de LineageOS, si no resumir los pasos. Leéte la twiki de LineageOS que es un golazo. Esto que sirva de machete :-)

Notá que todo el repo (y subódulos) de LineageOS ocupan como 50 GB!. Así que preparáte un directorio en un disco donde tengas al menos el doble de eso (por decir algo). Como el proceso de compilación hace muuucho acceso al disco, si lo podés hacer en un SSD, mejor!

Bajá codigo y compilá

OK. No voy a explicar como funciona git, ni recordarte que si instalaste las cosas de arriba a mano las tenés que tener en tu PATH. Así que va:. Primero bajar el repo:

repo init -u https://github.com/LineageOS/android.git -b lineage-17.1
repo sync

El primer comando inicia el repositorio y el segundo lo puebla. Esto tarda UN TOCAZO! y se baja TOOOOOOoooodo. A mi me pasó que falló un par de veces. Así que cada vez que fallaba, nada, hacía "repo sync" de nuevo hasta que terminó. Tarda horas.

Cuando termina de bajarse todo, es cuando podés empezar a compilar.

repo sync # Esto sólo si hace banda que sincronizaste el código por última vez.
source build/envsetup.sh # levanta el entorno y los aliases y demás para poder hacer lo que sigue 
breakfast evert # donde evert acá es el codename de mi teléfono. Vos acá pondrás el tuyo. Si no está soportado por lineageos, siamo fuori

Acá va a preparar todo para poder comilar Android para ese hardware específico de tu dispositivo. En el caso de evert (o los de Samsung que puse mas arriba) tienen lo que se llaman "proprietary blobs" O sea binarios propietarios que necesitás para poder hacer andar tu dispositivo pero que no tenés el codigo fuente para compilarlo. Entones los tenés que conseguir vos. LineageOS no te los puede proveer. Por suerte están estos magos de TheMuppets que tienen ahí colleccionados TODOS los blobs!!! Esto me tomó DIAS resolver. Pero estos los tienen todos ahí!

Hay dos modos de usar los repos de TheMuppets:

  • El posta: Agregás el repo de ellos siguiendo estas instrucciones A mi no me funcionó
  • El Cabeza (que hice yo): te bajás el repositorio del vendor que estés interesado a mano. Por ejempo. Para los de Motorola te bajás ==proprietary_vendor_motorola==

El cabeza sería así:

cd vendor
git clone https://github.com/TheMuppets/proprietary_vendor_motorola motorola
cd ../

Eso te crea un directorio llamado motorola con el contenido de los blobs de todos los dispositivos de motorola colectados en TheMuppets. Y listo. Si tuviste que hacer esto, la twiki dice de hacer breakfast de nuevo. Así que va:

breakfast evert # donde evert acá es el codename de mi teléfono. Vos acá pondrás el tuyo. Si no está soportado por lineageos, siamo fuori

Ahora setear parámetros de cache y otras giladas: export USE_CCACHE=1 export CCACHE_EXEC=/usr/bin/ccache ccache -M 50G # or 20 GB ccache -o compression=true croot # esto básicamente hace cd a donde tenés lineagos

Y ahora cruzamos los dedos y compilamos:

brunch evert

Esto tarda mil. Y a mi cuando probé con 8GB de RAM no andaba. Con 16 GB va. Y tarda. Banda. Horas. Ahora, una vez que tenés compilado la salida la vas a tener en out/target/product/. Para mí es evert:

ls out/target/product/evert/*zip
out/target/product/evert/lineage-17.1-20201124-UNOFFICIAL-evert.zip
out/target/product/evert/lineage-17.1-20201207-UNOFFICIAL-evert.zip
out/target/product/evert/lineage-17.1-20201219-UNOFFICIAL-evert.zip

Ahí tenés las roms que compilé en los últimos días. Lo bueno es que una vez que compilaste, compilar para otro dispositivo tarda menos. Y compilar unos días después, y habiendo hecho "repo sync" también tarda poco. Siempre y cuando lo que tengas seteado de cache sea suficientemente grande como para que esté en el caché parte del resultado de la compilación anterior.

Flashear la rom esta

Si tu dispositivo tiene la ROM de fábrica (Stock ROM) vas a tenér que flashear un recovery (puede ser el que sale del output de la compilación de lineageOS o uno de TWRP ) y con eso flashear esta rom.

Si tu dispositivo ya tiene una ROM custom, seguro ya tenés un recovery que la pueda flashear. Si hace falta pongo una guía de ejemplo acá de como flasheo evert o serranoltexx

Recompilar

Lo tenés que hacer cada vez que levantes el terminal para compilar la rom (o sea en cada nueva sesión) tipo "Hoy voy a prender la máquina y voy a compilar la rom", es:

repo sync # para que actualice el código
source build/envsetup.sh
breakfast evert # cambiá evert por el codename de tu dispositivo)
export USE_CCACHE=1; export CCACHE_EXEC=/usr/bin/ccache ; ccache -M 50G ;ccache -o compression=true
croot
brunch evert # Cambiá evert por tu dispositivo

E basta!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment