Inicio TUTORIALES Compilar ROMs desde el código fuente (Sources)

Compilar ROMs desde el código fuente (Sources)

0
Compartir

custom ROMs

Todo usuario avanzado de Android sabe que la comunidad en torno a este sistema operativo es muy importante, ya que es la que se encarga de dar vida a un dispositivo cuando el fabricante deja de darle soporte oficial y pone a disposición sistemas mas optimizados que el firmware que trae de serie un dispositivo.

Cada vez hay mas usuarios que se animan a crear sus propias compilaciones, pero el problema viene cuando el dispositivo no tiene soporte oficial de una custom ROM o el nivel de Inglés no es muy elevado ya que la mayoría de tutoriales están en Inglés y los que hay en Español la mayoría solo lo explican para dispositivos con soporte oficial. Es por ello que, tras muchas peticiones de diferentes usuarios, os traemos el que creemos que es el tutorial mejor explicado que hemos encontrado en el conocido foro de XDA resumido, traducido al Español y actualizado para la compilación de las últimas versiones de las diferentes ROMs Android.

Requisitos

  • Sistema operativo Linux 64bits como Linux Mint o Ubuntu (debería funcionar con cualquier distribución basada en Debian)
  • Hardware decente (mínimo un doble núcleo con 4GB de RAM)
  • Espacio en disco de unos 150GB (recomendación de Google)

 

Preparar el entorno de compilación

Antes de empezar, si reunimos los requisitos anteriores, tendremos que preparar nuestro sistema para poder desarrollar las diferentes ROMs

Instalación de JAVA

  • Para compilar Android Nougat y Oreo necesitaremos OpenJDK 8 por lo que para instalarlo escribimos:
    • sudo apt install openjdk-8-jdk openjdk-8-jre
  • Para seleccionar la versión de java a usar (si tenemos varias) escribimos:
    • sudo update-alternatives --config java

Instalación de herramientas de compilación

Para empezar, primero tendremos que instalar las diferentes herramientas que se usarán para la compilación del código fuente, para ello escribimos en el terminal:

  • sudo apt install bison curl build-essential flex git-core git
    gnupg gperf liblz4-tool libesd0-dev libncurses5-dev libsdl1.2-dev
    libwxgtk2.8-dev libxml2 libxml2-utils lzop
    pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev maven maven2
  • sudo apt-get install g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev
  • Si tenemos errores, cambiamos lib32readline-gplv2-dev por lib32readline6-dev y libwxgtk2.8-dev por libwxgtk3.0-dev

Descarga del repositorio binario

Repo es una herramienta de gestión de repositorios construida sobre Git. Repo unifica los múltiples repositorios Git cuando sea necesario, actualiza nuestro sistema de control de revisión y automatiza partes del flujo de trabajo de desarrollo de Android. Para descargarlo escribimos lo siguiente en un terminal:

  • mkdir ~/bin
  • PATH=~/bin:$PATH
  • curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
  • chmod a+x ~/bin/repo

Configurar Git

Para sincronizar los repositorios, necesitaremos tener una cuenta de Github y tenerla configurada en el PC, para ello nos registramos en Github y después escribimos los siguientes comandos en el terminal (con nuestros datos de Github):

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

Con esto ya tendremos nuestro sistema listo para compilar diferentes ROMs.

Compilar Kernel Android desde código fuente (Sources)

Descarga del código fuente (Sources)

Para compilar una ROM, primero tendremos que bajar su código fuente, algo que puede llevar mucho tiempo ya que suelen ocupar normalmente sobre 15/20 GB. Para esta guía vamos a tomar como ejemplo Lineage OS 14.1.

  1. El primer paso es crear el directorio donde vamos a descargar el código fuente y entrar en él, para ello escribimos el siguiente comando:
    • mkdir source-LineageOS-14.1 & cd source-LineageOS-14.1
  2. Ahora deberemos iniciar el repositorio con el siguiente comando:
    • repo init -u git://github.com/LineageOS/android.git -b cm-14.1
  3.  Después solo queda sincronizar el repositorio, algo que llevará horas dependiendo de nuestra conexión a Internet. Para ello escribimos:
    • repo sync

A continuación dejamos los links para descargar el código fuente de algunas de las ROMs mas populares:

LineageOS: https://github.com/LineageOS/android
OxygenOS: https://github.com/OnePlusOSS/android
Paranoid (AOSPA): https://github.com/AOSPA/manifest
AOSP: https://github.com/android/platform_manifest
MOKEE: https://github.com/MoKee/android
SudaMOD: https://github.com/SudaMod/android
SOKP: https://github.com/SOKP/platform_manifest
AOKP: https://github.com/AOKP/platform_manifest
Bliss: https://github.com/BlissRoms/platform_manifest
AICP: https://github.com/AICP/platform_manifest
Replicant: https://git.replicant.us/replicant/manifest
CooperheadOS: https://github.com/CopperheadOS/platform_manifest
SlimRom: https://github.com/SlimRoms/platform_manifest
XenonHD: https://github.com/TeamHorizon/platform_manifest
DirtyUnicorns: https://github.com/DirtyUnicorns/android_manifest
PAC-MAN: https://github.com/PAC-ROM/pac-rom
Carbon: https://github.com/CarbonROM/android
Resurrection Remix: https://github.com/ResurrectionRemix/platform_manifest
SimpleAOSP: https://github.com/SAOSP-N/platform_manifest
OmniRom: https://github.com/omnirom/android
LiquidSmooth: https://github.com/LiquidSmooth/android
Hazy: https://github.com/HazyTeam/platform_manifest

 

Compilar para un determinado dispositivo

Ahora viene la parte importante y la que falta en la mayoría de tutoriales en español, que es compilar la ROM para un dispositivo, incluidos los no soportados oficialmente por una determinada ROM.

Para ello necesitaremos tres partes del código fuente de nuestro dispositivo que son las siguientes:

  • Device Tree
  • Vendor
  • Kernel

Estos archivos son de vital importancia ya que son los que harán que la ROM se compile con las características de nuestro dispositivo, sin ellos no podemos hacer nada (a no ser que seas un desarrollador avanzado y sepas crearlos).

Una vez obtenidos los enlaces de las tres partes citadas arriba de nuestro dispositivo, tendremos que integrarlos con el código fuente de la ROM. Para ello tendremos que crear un archivo llamado local_manifest.xml en la carpeta .repo de nuestras sources donde indicaremos las rutas del código fuente de nuestro dispositivo. Escribimos en un terminal lo siguiente:

  • cd .repo
  • nano local_manifest.xml

La estructura del local_manifest sería la siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <project path="directorio en árbol de trabajo" name="nombre del repositorio remoto" remote="nombre del servicio remoto" revision="branch del repositorio" /> 
</manifest>

Por ejemplo, para un Huawei Nova la estructura sería la siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <project path="device/huawei/can" name="skinzor/android_device_huawei_can" remote="github" revision="cm-14.1" />
  <project path="vendor/huawei/can" name="skinzor/proprietary_vendor_huawei" remote="github" revision="cm-14.1" />
  <project path="kernel/huawei/can" name="skinzor/android_kernel_huawei_msm8953" remote="github" revision="cm-14.1" />
</manifest>

Después de crear el local_manifest.xml con los datos de nuestro dispositivo, tendremos que sincronizar de nuevo el repo para que se descargue el código fuente que hemos añadido de nuestro dispositivo, para ello ejecutamos en el terminal:

  • repo sync

Con esto ya tendremos el código listo para compilar, aunque si compilamos una rom diferente a LineageOS tendremos que hacer algunos cambios en el device tree de nuestro dispositivo para adaptarlo a la nueva ROM ya que éste suele estar creado para Lineage OS.

Para compilar la ROM, tan solo tendremos que escribir el siguiente comando en el terminal:

  • build/envsetup.sh && time brunch "modelo" -j# Donde “modelo” es el nombre del dispositivo (en mi caso can) y # es el número de tareas que queremos ejecutar a la vez (normalmente se pone el número de núcleos del procesador de nuestro PC)

Una vez termine de compilar sin errores (si hay errores tendremos que intentar resolverlos), podremos encontrar el zip de la ROM en la ruta out/target/product/modelo/.

Si queremos eliminar los restos de una compilación anterior para actualizar las sources y compilar de nuevo, solo tendremos que escribir lo siguiente:

  • make clobber

Recordar que esta es una traducción, actualización y resumen del tutorial original de XDA en el que explican todo mucho mas extenso y también tienen una sección con errores frecuentes en la compilación y su solución.

 

Fuentes: