PDA

Ver la Versión Completa : [ TUTORIAL ] [Android] Compila tu propia ROM basada en las fuentes de XDAndroid


euki
18/10/11, 20:53:08
##############################
# ###########################
# #

INDICE

1. Descripción
1.1 Sobre lel tuto
2. Requisitos
1.1 Archivos necesarios

3. Instalación
3.1 Pre-configuración
3.2 Repositorios
3.2.1 Instalar Repo
3.2.2 Descargar los repositorios
3.3 Compilando
3.3.1 Preparando los archivos propietarios y librerías
3.3.2 Comenzando a compilar
3.4 Volver a compilar
4. ANEXOS
4.1 ANEXO I
4.2 ANEXO II
4.3 ANEXO III

# #
# ###########################
##############################



##############################
# ###########################
# #


1. Descripción


1.1 Sobre el tuto


Me gustaría haber hecho el tuto con más tranquilidad pero como no tengo mucho tiempo y tb tengo que aprender como funciona tuve que ser algo escueto. Dar las gracias por la ayuda a Neopeek, midnight y Green_day, ops! quiero decir Great_day ;-)

Este tuto se basa en la recopilación de varias páginas web pero la fuente principal es la Wiki de XDAndroid (http://xdandroid.com/wiki/Getting_the_Source). También es válido para compilar una ROM para cualquier dispositivo como por ejemplo un Samsung modificando ciertos pasos en el tuto.

El hilo donde empecé es el siguiente: Hilo (http://www.neopeek.com/viewtopic.php?f=24&t=7927)




2. Requisitos

Es necesario tener instalada cualquier distribución de linux, en particular yo uso Ubuntu.

2.1 Archivos necesarios



Archivos propietarios: Descargar (http://www.megaupload.com/?d=BYJBWHAB)
Aceleración hardware 3D: Descargar (http://www.mediafire.com/file/b7a6v7eeg8pr3e3/hw3d-20110311.zip)
Librerías para soporte de la cámara: Descargar (http://www.mediafire.com/?b2348y0pg9948p4)




3. Instalación



3.1 Pre-instalación


Necesitas descargar ciertas herramientas así que abre el terminal y sigue los pasos.
Nota: El símbolo '$' no se copia.


Instala las herramientas.


$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils


Ahora debes instalar Java.

Para compilar Froyo necesitas Java5 y para compilar Gingerbread necesitas Java6, nosotros vamos a compilar Froyo pero puedes tener instaladas las dos versiones de Java en la maquina y luego seleccionar con cual vas a trabajar.

- Instalar Java5: para Froyo e inferiores.

Abre el archivo source.list con el editor de texto:

$ sudo gedit /etc/apt/sources.list

Añade el repositorio para Java5 al final y guarda:


deb http://mirror.pnl.gov/ubuntu/ hardy main multiverse


Sincroniza las fuentes, ejecuta:

$ sudo apt-get update


Instala el paquete, ejecuta:

$ sudo apt-get install sun-java5-jdk


- Instalar Java6 jdk: para Gingerbread y superiores.

sudo apt-get install sun-java6-jdk


Si llegas a instalar las dos versiones de Java puedes escoger cual usar, ejecuta:

$ sudo update-alternatives --config java

Aparecerá lo siguiente para escoger:

eukiMars:~$ sudo update-alternatives --config java
[sudo] password for euki:
Existen 3 opcioens para la alternativa java (que provee /usr/bin/java).

Selección Ruta Prioridad Estado
------------------------------------------------------------
0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 modo automático
* 1 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java 53 modo manual
2 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 modo manual
3 /usr/lib/jvm/java-6-sun/jre/bin/java 63 modo manual

Pulse <Intro> para mantener el valor por omisión [ * ] o pulse un número de selección:



Para comprobar que versión está corriendo ejecuta:

$ java -version

Resultado:

eukiMars:~$ java -version
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) Client VM (build 1.5.0_22-b03, mixed mode, sharing)






3.2 Repositorios

Esta parte es importante por es donde descargaremos las fuentes necesarias para nuestro proyecto que tanto puede ser para terminales que instalen android en la sdcard y se ejecuten con haret como HTC Diamond, Topaz, etc. o para terminales que instalen android en la NAND como los Samsung Galaxy S o cualquier HTC que tenga soporte para android.



3.2.1 Instalar Repo


En esta parte vamos a descargar Repo que es una herramienta de gestión de repositorios que recopila varios repositorios Git para hacer más fácil trabajar con las fuentes de Android. Resumiendo, es un script ejecutable que descarga varios archivos desde múltiples repositorios a nuestro ordenador.

Con repo usaremos el argumento 'init' que crea un directorio ./repo en el directorio actual (donde lo ejecutes) y contiene los repositorios Git para el código fuente de android, la opción '-u' para especificar la URL desde la que descargará el archivo manifest.xml con los repositorios junto con la opción '-b' para especificar que revisión (branch) vamos a compilar. Luego usaremos el argumento 'sync' para descargar las fuentes desde los repositorios que más adelante tb usaremos para actualizar las fuentes cada vez que las modifiquen en los repositorios de xdandroid o cualquier otro repositorio.

Como vamos a compilar android para terminales que usen Haret descargaremos los repositorios necesarios de XDAndroid que se encuentran alojados en https://gitorious.org/xdandroid cuya dirección URL sería git://gitorious.org/xdandroid/manifest.git y especificaremos para que revisión en este caso froyo.

Si queremos compilar, por ejemplo CyanogenMod para otros terminales (NAND), necesitaríamos descargar las fuentes (repositorios) desde https://github.com/CyanogenMod/, con lo cual la dirección URL sería git://github.com/CyanogenMod/android.git y la revisión que queramos o tenga disponible (Froyo, Gingerbread, master, etc.).

Esto lo explico con más detalle en el ANEXO I.

Comenzamos. Los pasos son los siguientes:


Crea una carpeta bin en tu directorio personal y lo incluyes en el path, ejecuta:

$ sudo mkdir ~/bin
$ PATH=~/bin:$PATH

Descarga el script Repo y hazlo ejecutable:

$ curl http://android-git.devnull.name/gh/repo >~/bin/repo
$ chmod +x ~/bin/repo

Nota: Normalmente se usa la dirección http://android.git.kernel.org/repo pero como está caído usaremos en su lugar http://android-git.devnull.name/gh/repo.


Crea un directorio donde se instalará ./repo y usaremos para compilar nuestro proyecto, ejecuta:

$ mkdir ~/xdandroid

Entra en el directorio:

$ cd ~/xdandroid

Crea la carpeta ./repo y descarga los enlaces a los repositorios, ejecuta:

$ repo init -u git://gitorious.org/xdandroid/manifest.git -b froyo

Nos pedirá por un nombre de usuario y una cuenta de correo:

eukiMars:~/xdandroid$ repo init -u git://gitorious.org/xdandroid/manifest.git -b froyo

Your Name:
Your Email:

Your identity is: euki <[email protected]>
is this correct [y/n]? y

repo initialized in /home/euki/xdandroid




3.2.2 Descargar los repositorios

Para descargar los repositorios al directorio del proyecto usaremos la utilidad repo con el argumento 'sync' pero antes necesitamos editar el archivo default.xml que se encuentra en el directorio xdandroid./repo/manifests/

Hacemos esto porque las fuentes descargan por defecto de git://android.git.kernel.org/ y como está caído darían error al intentar descargarlos y una solución temporal es sustituír la URL por otro mirror que tenga las fuentes. Tb eliminaremos una línea en el mismo archivo que hace referencia a un paquete llamado 'superuser' y que ahora se encuentra en /extras/su

Pasos a seguir:



Cambiar la URL: Entra en el directorio del proyecto (xdandroid) y pulsa ctrl + h para ver los archivos ocultos.

Abre con el editor de textos el archivo default.xml que se encuentra en ./repo/manifests/ y sustituye lo siguiente:

<manifest>
<remote name="korg"
fetch="git://android.git.kernel.org/"
review="review.source.android.com" />
<default revision="froyo" <------- Esto parte la incluyo pero no cambia aunque ponga gingerbread
remote="korg" />

Por:

<manifest>
<remote name="omapzoom"
fetch="git://git.omapzoom.org"
review="git://git.omapzoom.org" />
<default revision="froyo"
remote="omapzoom" />


Busca la siguiente línea y elimínala:



<project path="packages/apps/Superuser" name="ChainsDD/Superuser" remote="github" revision="master" />



Podemos incluir repositorios manualmente editando el archivo default.xml pero lo más normal es añadirlos con el comando "git clone". Por ejemplo después de borrar ese repositorio directamente en el archivo default.xml podemos incluirlo más adelante ejecutando el siguiente comando en el terminal:



git clone git://github.com/ChainDD/superuser.git -b master



No ponemos "-b froyo" porque ese repositorio no tiene para la revisión froyo, sólo para la otras versiones como la master. Esto es fácil pero lo explicaré con más detalle en el ANEXO I.


Ahora descarga los repositorios (Recuerda que debes estar en el directorio xdandroid), ejecuta:




$ repo sync



Nota: Ahora empezarán a descargar las fuentes desde los repositorios al directorio xdandroid y puede que tarden varias horas así que ten paciencia y tómate unas birras con los colegas :-)


Si queremos eliminar las fuentes descargadas de los repositorios para volver a descargarlas otra vez o descargar otras nuevas desde otros repositorios, ejecutamos dentro del directorio /xdandroid:

$ rm -rf `ls -a | grep -v "^\." `

Nota: Esto eliminará todos los directorios que se encuentren en nuestro proyecto (dentro de /xdandroid) menos el directorio ./repo que seguirá intacto.



3.3 Compilando


Una vez descargados los repositorios casi podrías empezar a compilar la primera rom sin apenas modificaciones con los siguientes pasos; pero antes sería recomendable leerse el ANEXO II para entender un poco mejor la estructura de los archivos de configuración que se usan para compilar y editar uno mismo los parámetros.



3.3.1 Preparando los archivos propietarios y librerías


Como archivos propietarios se puede usar cualquier rom compatible, por ejemplo Neofroyo o Fagyifroyo pero esto lo explicaré más abajo ahora vamos a usar el que viene en la Wiki de XDAndroid.


Copia los archivos signed-dream_devphone_userdebug-ota-14721.zip, hw3d-20110311.zip y liboemcamera.zip al directorio raiz del proyecto (xdandroid/)


Entra en el directorio device/xdandroid/msm y ejecuta:



$ cd device/xdandroid/msm
$ ./unzip-files.sh



Si quieres que la rom compile con las GAPPS incluídas, ejecuta:



$ ./unzip-files.sh -g





Si queremos usar otros archivos propietarios o que descargue cualquier otra versión de GAPPS hay que editar el archivo unzip-files.sh y editamos lo siguiente:


ZIP=signed-dream_devphone_userdebug-ota-14721.zip
GAPPSZIP=gapps-mdpi-20110501-signed.zip
GAPPSMIRROR="http://goo-inside.me/gapps"
HW3DZIP=hw3d-20110311.zip
LIBOEMCAMERAZIP=liboemcamera.zip


Cambiamos ZIP por la rom que queramos y para las GAPPS entramos en la web http://goo-inside.me/gapps y buscamos el nombre del archivo zip que queramos que descargue y lo escribimos en GAPPSZIP, por ejemplo:


ZIP=FagyiFroyoFull.zip
GAPPSZIP=gapps-mdpi-20110501-signed.zip <-- utilizamos las mismas porque son para froyo, si fuesen para gingerbread las cambiaríamos.
GAPPSMIRROR="http://goo-inside.me/gapps"
HW3DZIP=hw3d-20110311.zip
LIBOEMCAMERAZIP=liboemcamera.zip




3.3.2 Comenzando a compilar

Llegado a este punto es importante leerse antes el ANEXO III aunque puedes continuar de todas formas para comprobar que compila. Para compilar usaremos el argumento "-j" y la opción "otapackage".

Con el argumento "-j" indicaremos cuantos núcleos tiene nuestro procesador con la diferencia de que si nuestro procesador tiene 4 núcleos pondremos un número más al número de núcleos que tiene nuestro procesador, así que pondremos en este caso "-j5".

Con la opción "otapackage" haremos que nos cree un archivo zip de la rom para instalar desde el recovery que será el que usaremos para instalar en nuestros terminales.

Crearemos un archivo "buildspec.mk" en el directorio raiz para indicarle que tipo de producto queremos, en nuestro caso "full_msm"



Crea el archivo buildspec.mk en el directorio raiz del proyecto (xdandroid/), añade estas líneas y guardalo:


# Configure for an XDAndroid release engineering target.
TARGET_PRODUCT := full_msm
TARGET_BUILD_VARIANT := eng
TARGET_BUILD_TYPE := release



Comprueba que estás en el directorio raiz del proyecto (xdandroid/) y ejecuta para compilar:


$ make -j5 otapackage <---- cambia el 5 por el valor que corresponda en tu caso



Nota: Este proceso tarda varias horas así que vete de fiesta con los colegas ;-)


Cuando termine de compilar tendremos nuestra rom en la carpeta out/target/product/msm sólo falta sustituir la carpeta META-INF por otra, por ejemplo por la de la NeoFROYO y a instalar!



3.4 Volver a compilar

Para volver a compilar se necesita eliminar la anterior compilación con lo cual habrá que ejecutar el siguiente comando cada vez volvamos a compilar:

$ make clobber

Nota: Este comando eliminará la carpeta out/ de nuestro proyecto



4. ANEXOS

En construcción..

4.1 ANEXO I



4.2 ANEXO II



4.3 ANEXO III

euki
18/10/11, 20:53:27
reservado

euki
18/10/11, 20:55:23
reservado2

bibiteri
18/10/11, 22:21:35
Pues nada.
Usted dirá en qué podemos ayudarle...
...aunque estemos más verdes incluso!

bibiteri
18/10/11, 22:23:38
Yo, a modo de conclusión, lo que he podido apreciar en mis mil y una pruebas, es que el android 2.2.2 es más fácil de "manejar" en la cocina. Suele funcionar todo. Y con el android 2.3.4 Gingerbread siempre falla algo (por desgracia).

euki
18/10/11, 22:56:02
Yo, a modo de conclusión, lo que he podido apreciar en mis mil y una pruebas, es que el android 2.2.2 es más fácil de "manejar" en la cocina. Suele funcionar todo. Y con el android 2.3.4 Gingerbread siempre falla algo (por desgracia).

En principio es mejor compilar froyo que gingerbread para usar desde la sdcard con haret pero tb podríamos intentarlo con GB.

Para empezar habría que instalar linux (ubuntu por ej.) en una partición en el disco duro junto a windows o desde windows con una maquina virtual como vmware o virtualbox, es sencillo y rápido de hacer.

VictorDDP
18/10/11, 23:37:20
Yo uso Linux Mint 11, si necesitáis compilar algo lo hago en "un momento".

LEONINO
19/10/11, 13:07:44
Si hay que colaborar en algo, yo me apunto también para lo que haga falta, dentro de mis modestos conocimientos. Tengo Linux en el pecé junto con güindous, pero ubuntu (que es la distro que yo tengo) sólo lo uso para navegar por internet más rápido que con el güindous, no sé ni lo que es eso de compilar, pero habrá que ir aprendiendo.

euki
21/10/11, 11:19:59
Para compilar una rom lite que apps quitaríais?

PRODUCT_PACKAGES := \
AccountAndSyncSettings \
CarHome \
DeskClock \
AlarmProvider \
Bluetooth \
Calculator \
Calendar \
Camera \
CertInstaller \
DrmProvider \
Email \
Gallery3D \
LatinIME \
Launcher2 \
Mms \
Music \
Provision \
Protips \
QuickSearchBox \
Settings \
Sync \
Updater \
CalendarProvider \
SyncProvider
Browser \
CarHomeLauncher \
Contacts \
Home \
HTMLViewer \
Phone \
ApplicationsProvider \
ContactsProvider \
DownloadProvider \
MediaProvider \
PicoTts \
SettingsProvider \
TelephonyProvider \
TtsService \
VpnServices \
UserDictionaryProvider \
PackageInstaller \
DefaultContainerService \
Bugreport

bibiteri
21/10/11, 11:29:23
Quizás deberías poner para qué es cada app.
Ya sé que es un curro, pero si no, gente como yo, ante de contestar tiene que ir mirando en san google a ver qué es cada app..
Edito: algunas de las apps cuya traducción no es sencilla...

bibiteri
21/10/11, 11:35:12
Yo creo, a bote pronto, que no sobra ninguna de esas aplicaciones. Por lo poco que entiendo y he leido en unos minutos, son todas básicas e incluso están interrelacionadas. Con esas apk ya tenemos la lite, ¿no?

euki
21/10/11, 12:18:08
Yo creo, a bote pronto, que no sobra ninguna de esas aplicaciones. Por lo poco que entiendo y he leido en unos minutos, son todas básicas e incluso están interrelacionadas. Con esas apk ya tenemos la lite, ¿no?

Pienso que sí, son las más básicas y al quitar alguna puede dar problemas al compilar por lo que dices..

VictorDDP
24/10/11, 00:29:25
Cómo mucho la calculadora...pero habrá gente que la use.

LEONINO
24/10/11, 10:23:22
Bueno, Manolito el de Mafalda contaba con los dedos de la mano y decía que cuando llevaba sandalias, ya tenía calculadora porque añadía los dedos de los pies a los de las manos... :-)

euki
02/11/11, 16:46:22
Bueno, no tengo tiempo de hacer más así que lo voy posteando poco a poco mientras hago los anexos...

bibiteri
28/11/11, 13:44:50
Victor, estoy tratando de descargar el Linux Mint ese, por si acaso me lío los trastos, pero no aparece ningún mirror de descarga con la banderita de españa. ¿Si me lo descargo del servidor de France, me lo descarga en francés?
Y por cierto, ¿cómo lo instalas? Habrá que particionar el disco duro, ¿no? ¿Cuánto?
Parece que Euki se ha dado a la fuga...

isorn
28/11/11, 23:51:15
Ahora mismo no sé qué espacio necesitas para Linux Mint, pero imagino que mínimo 5GB de disco duro. Para trastear tranquilamente si tienes espacio de sobra yo le pondría por lo menos 10GB.

En el CD o DVD que te bajas vienen los archivos de todos los idiomas a los que está traducido. Da igual de dónde lo bajes, lo vas a poder instalar en español seguro.

Aquí (http://www.taringa.net/posts/linux/12116188/_Tutorial_-Como-instalar-linux-mint-11.html) tienes un buen tutorial para instalarlo.

bibiteri
29/11/11, 11:32:05
Y después de instalar linux, ¿necesito la aplicación ubuntu?

isorn
30/11/11, 00:02:07
No, Ubuntu es otra distribución de Linux.

Simplificando es algo parecido a las roms de Android, todas son Android pero en una rom tienes unos programas o kernel y en otra rom tienes otros pero aún así en cualquiera de las dos puedes instalar Facebook, por ejemplo. También puede pasar que algunos ficheros de configuración estén en un directorio o en otro, incluso que se llamen de otra forma (como pasa con el ts-calibration, que algunas roms requieren que lo pongas en un directorio pero otras en otro).

En definitiva, si has instalado Linux Mint ya tienes Linux instalado, no necesitas nada más.

Yo uso Ubuntu, no he probado Linux Mint, pero creo que podrás seguir el tutorial al pie de la letra. puesto que me parece que tanto la instalación como configuración de los elementos necesarios para compilar el kernel son idénticos.

bibiteri
30/11/11, 11:29:32
Gracias mil.
En cuanto saque un rato un poco largo, me pongo a ello.

pepe ganga
25/04/13, 02:23:54
Yo también quiero partisipar estoy instalando ubuntu y pues quiero compilar Roms android aunque todavía nose gran cosa

aissati.89
19/02/15, 00:43:23
Y los anexos? Me interesa aprender como modificar cada archivo para poder cambiar la interface grafica, las app's de origen, vamos personalizarla al 100%, pero nose que archivos modificar y con que IDE trabajar para visualizar los resultados del codigo modificado, tengo que decir que llevo menos de 1 año en esto de la programacion java/android, pero estoy aprendiendo un monton, pero esto de ser autodidacta es un poco limitado sin apoyo de profesionales respaldandote, gracias de antemano, un saludo.

the_naxhoo
16/06/15, 01:01:59
me podrían ayudar, por favor?... necesito agregar un "device tree" (Lg P768), tengo el github del kernel, device y vendor.. pero no sé dónde va cada uno y ni sé si hay que modificar algún archivo aparte :(