(GUIA COMPLETA) Desarrollo de ROM's para Android Desde El Codigo Hasta El Final
(GUIA COMPLETA) Desarrollo de ROM's para Android Desde El Codigo Hasta El Final
(GUIA COMPLETA) Desarrollo de ROM's para Android Desde El Codigo Hasta El Final
Qu es un Android ROM?
La ROM de Android es el sistema operativo Android. Esta es
la interfaz de usuario (Sense UI en los telfonos HTC) y
el sistema de archivos para mantener contactos, etc. Se
compone de un kernel de Linux y varios complementos para
lograr una funcionalidad especfica.
Kernel
Bootloader
Recovery
Radio
Framework
Apps
Core
Android-Runtime
Conceptos bsicos acerca de los trminos anteriores:
Kernel:
Un kernel es un componente crtico de Android y de todos
los sistemas operativos. Se puede ver como una especie de
puente entre las aplicaciones y el hardware real de un
dispositivo. Los dispositivos Android utilizan el kernel
de Linux, pero no es el mismo kernel que utilizan otros
sistemas operativos basados en Linux.
Hay un montn de cdigo especfico de Android incorporado,
y los mantenedores de ncleo de Android de Google tienen
su trabajo cortado para ellos.
Los OEM tambin tienen que contribuir, porque necesitan
desarrollar controladores de hardware para las partes que
estn utilizando para la versin del kernel que estn
utilizando. Esta es la razn por la que se tardan un tiempo
los desarrolladores independientes de Android y los piratas
informticos al portar versiones nuevas a los dispositivos
ms antiguos y conseguir que todo funcione.
Los controladores escritos para trabajar con el kernel de
Gingerbread en un telfono no necesariamente funcionan con
el kernel de Ice Cream Sndwich. Y eso es importante,
porque una de las funciones principales del kernel es
controlar el hardware.
Es un montn de cdigo fuente, con ms opciones en la
construccin de lo que pueda imaginar, pero al final es
slo el intermediario entre el hardware y el software. As
que bsicamente si alguna instruccin se da a mobile,
primero da el comando al kernel para la ejecucin
particular de la tarea.
Bootloader:
El gestor de arranque es un cdigo que se ejecuta antes de
que cualquier sistema operativo empiece a ejecutarse. Los
Bootloader son bsicamente paquete de las instrucciones
para arrancar el ncleo del sistema operativo y la mayora
de ellos tambin tienen su propio entorno de depuracin o
modificacin.
Piense en el cargador de arranque como punto de control de
seguridad para todas esas particiones.
Porque si eres capaz de intercambiar lo que hay en esas
particiones, eres capaz de romper las cosas si no sabes lo
que ests haciendo. Por lo tanto, bsicamente, el ncleo de
comandos de su dispositivo para arrancar el dispositivo
correctamente sin problemas. Se cuidadoso con el Bootloader
ya que puedes dejar las cosas muy mal.
Recovery:
El Recovery es (en trminos simples)una copia de seguridad.
Si el firmware de su telfono est daado, el Recovery le
ayudar a restaurar o reparar su firmware defectuoso o con
errores y lo dejara en buenas condiciones de. Tambin se
utiliza para flashear el ROM, el ncleo y muchas ms cosas.
Radio:
La parte ms baja de la capa de software es la radio: esta
es la primera cosa que se ejecuta, justo antes del
BOOTLOADER. Controla toda la comunicacin sin hilos como la
antena GSM, el GPS etc.
Java - versin
Cdigo:
Sudo apt-get update y & sudo apt-get install openjdk-7-jdk
Completa la instalacin de Java
Sudo apt-get instalar git-core gnupg ccache lzop flex bison gperf construir-
esencial zip curl zlib1g-dev zlib1g-dev: i386 libc6-dev lib32ncurses5 lib32z1
lib32bz2-1.0 lib32ncurses5-dev x11proto-core-dev libx11-dev: i386 libreadline6-
Dev: i386 lib32z-dev libgl1-mesa-glx: i386 libgl1-mesa-dev g ++ - multilib
mingw32 tofrodos python-markdown libxml2-utils xsltproc readline-common
libreadline6-dev libreadline6 lib32readline-gplv2-dev libncurses5-dev
lib32readline5 lib32readline6 libreadline-dev Libreadline6-dev: i386
libreadline6: i386 bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev
libsdl1.2-dev libesd0-dev squashfs-herramientas pngcrush schedtool libwxgtk2.8-
dev python
Cdigo:
Qu es Repo?
Repo es una herramienta de administracin de repositorios que hemos
construido sobre Git. Repo unifica los repositorios de Git muchos cuando es
necesario, hace el uploads a nuestro sistema de control de revisin y
automatiza partes del flujo de trabajo de desarrollo de Android.
Cdigo:
Cdigo:
Gurdelo. Aqu Para guardar Pulse Ctrl + O y Enter y Ctrl + X para salir
Ahora ingresa el siguiente comando
Cdigo:
Fuente ~ / .bashrc
Cdigo:
Cd cm11
Esto lo llevar al directorio que cre en el paso 1.
Ahora ingrese el siguiente comando que iniciar el Repo
Cdigo:
Lo anterior fue para CM11 mismo procedimiento para otros siempre que tenga
que reemplazar cm11 con uno que desea sincronizar / construir como AOSP,
AOKP, AICP etc y el comando Repo Initialize vara con la fuente que desea
descargar.
Los siguientes 199 usuarios dicen Gracias a jackeagle por este Post: [Ver]
Jackeagle
XDA
Donar a m
Ms
Nota: Voy a tomar Samsung Galaxy Grand Duos - GT -I9082 tiene ejemplo
aqu.
Ejemplo Rom: CM11
Ahora antes de comenzar con la gua de construccin que tiene que descargar
su identidad de dispositivo que es sigue
1) rbol del dispositivo
2) Vendedor
3) Ncleo
Los archivos anteriores son muy vitales Parmetros de construccin que
especifican su dispositivo y sus caractersticas.
Ahora usted puede pensar de donde usted tiene que descargar esos archivos?
Cd cm11 / .repo
Aqu en la carpeta .repo tienes que crear un archivo llamado local_manifests.xml
1) Ingrese el siguiente comando en Terminal
Cdigo:
Nano local_manifest.xml
La estructura de Local_manifest.xml tiene Has sigue.
Cdigo:
gua
Una vez que su rbol de dispositivos CM se ha hecho compatible con su ROM su tiempo de construccin
Ahora el comando de construccin Varios con Rom que desea compilar su diferente para diferentes ROM
que tiene que ver el manifiesto de la Rom para que tenga instruccin para la construccin se dar all. Dado
que im tomando ejemplo de CM11 y el dispositivo tiene GT-I9082 los pasos van tiene sigue
1) Ingrese el siguiente comando en Terminal
Cdigo:
Cd cm11
Simplemente reemplace CM11 por su directorio de trabajo de Rom. Ejemplo: AOGP, AICP etc.
2) Ahora ingrese el siguiente comando a la terminal
Cdigo:
. Build / envsetup . Sh
3) Construir la instruccin vara de Rom a Rom para comprobar el manifiesto de ROM para el mismo. La
instuccin general es
Cdigo:
Brunch <codename> - j #
<Codename> CodeName de su dispositivo
# Es el nmero de ncleos de CPU que tiene.
La construccin tomar tiempo dependiendo de la configuracin del sistema.
Los siguientes 140 usuarios dicen Gracias a jackeagle por este post: [Ver]
Jackeagle
Donar a m
Ms
As que los chicos hasta ahora aprendimos mucho de las cosas y, finalmente,
construimos una ROM Durante la construccin de la ROM que puede haber
editado mucho de las cosas en el rbol del dispositivo Para evitar que se
repitan en caso de que elimine el rbol o si su ROM no es oficial, entonces tiene
que cargar el rbol de origen del dispositivo a Github. Hay muchos usos si subes
el rbol de dispositivos.
Cdigo:
Cdigo:
Cdigo:
Su identificacin se ha guardado en /home/you/.ssh/id_rsa.
# Su clave pblica se ha guardado en /home/you/.ssh/id_rsa.pub.
# La huella digital clave es:
# 01: 0f: f4: 3b: ca: 85: d6: 17: a1: 7d: f0: 68: 9d: f0: a2: db
[email protected]
Ahora vaya a la carpeta ~ / .ssh y copie su contenido id_rsa.pub en la administracin de la cuenta en
github.com.
Eso es ir a la configuracin de la cuenta github y SSH
Copiar la pasta id_rsa.pub contenido all y guardarlo hecho.
Cdigo:
Ssh -T [email protected]
Cdigo:
Cdigo:
Pasos:
En la terminal
Cdigo:
Cdigo:
Git init
Configuracin de los archivos git necesarios para empujar los
archivos a la cuenta github se har mediante el siguiente
comando
Cdigo:
Git add
Ahora tenemos que comentar sobre los archivos que estamos
empujando a github por lo tanto, entrar en el siguiente comando
Cdigo:
Cdigo:
Cdigo:
Los siguientes 110 usuarios dicen Gracias a jackeagle por este post: [Ver]
Jackeagle
XDA
Donar a m
Ms
1) Puedo usar diferentes sistemas operativos Linux como Linux Mint, Arch Linux, Ubuntu
14.04 etc?
S. Usted es libre de usar cualquier sistema Linux, pero recuerde que algunos comandos
pueden no funcionar en otro sistema Linux o puede resultar en error por lo tanto, no puedo
darle soporte. Si tuviera xito en Otros sistemas operativos Linux, hzmelo saber
Jackeagle
XDA
Donar a m
Ms
1) gr_text
2) hardware ril
3) hwc_blit
4) versin java
// Instalar JDK6
// Descargue el archivo bin desde
http://ghaffarian.net/downloads/Java/JDK/
// install jre
Sudo apt-get instalar openjdk-6-jre-headless
Si ves i686, tienes una versin de 32 bits. Si ve x86_64, tiene una versin de
64 bits. Si tiene 32 bits de inicio con una versin amd64
http://releases.ubuntu.com/13.10/
SOLUCIN: sudo apt-get instalar bison construir-esencial curl flex git gnup
gperf libesd0-dev libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2
libxml2-utils lzop openjdk-6-jdk openjdk-6-jre phablet-tools Pngcrush
schedtool squashfs-herramientas xsltproc zip zlib1g-dev
Adems de lo anterior,
Crditos:
@ K2wl (Muchas gracias)
Desarrolladores XDA
Respuesta rpida Respuesta
Los siguientes 89 usuarios dicen Gracias a jackeagle por este post: [Ver]
Kishan14
Miembro Senior
Mumbai
Ms
Reposicin y Manifiesto
Hola muchachos..
Hay muchos desarrolladores prximos y muchos
desarrolladores en xda.Till ahora todos ustedes han
aprendido a configurar el entorno de construccin y
paquetes necesarios y construir el proceso. Ahora aqu voy a
compartir algunos consejos y trucos que ayudarn a algunos
nuevos desarrolladores para el desarrollo de sus ROMs y
Kernels. Bueno, no soy profesional en todas estas cosas,
incluso yo soy un novato. Me he encontrado con muchas guas
y mi mejor amigo Google.
Estos consejos pueden ahorrar tiempo, ancho de banda de
Internet, espacio en disco duro, etc.
Requisitos:
Conocimientos bsicos de compilacin de ROM / kernel
Ok, as que aqu empiezo:
Repositorio (Repo)
Qu es Repo?
Repo es una herramienta de administracin de repositorios que hemos
construido sobre Git. Repo unifica los muchos repositorios de Git cuando es
necesario, hace los uploads a nuestro sistema de control de revisiones, y
automatiza partes del flujo de trabajo de desarrollo de Android. Repo no est
destinado a reemplazar a Git, slo para hacer ms fcil trabajar con Git en el
contexto de Android. El comando repo es un script ejecutable de Python que
puedes poner en cualquier parte de tu ruta. Al trabajar con los archivos de
origen de Android, utilizar Repo para operaciones en toda la red. Por ejemplo,
con un solo comando Repo puede descargar archivos de mltiples repositorios
en su directorio de trabajo local
Fue eso una definicin un poco difcil .. sin preocupaciones ... aqu las
capturas de pantalla que explican ms o menos.
La imagen mostrada arriba es repositorios (Platform_mainfest, C-Rom Device
tree, android, etc.)
En palabras simples puede decir 'repo es una carpeta que almacena cdigo'. En
la imagen anterior, los dos repo se destacan. El repo resaltado negro es el que
uno ha escrito o contribuido. El otro (rojo) muestra que el repo se bifurca de otro
repo.
Herramienta Repo:
Esta herramienta juega un papel muy importante en la descarga de la fuente de
rom. As que la palabra 'Repo' es comn con ustedes como u hacer 'repo init'
'repo sync' ..
Recuerde, a partir de la gua anterior, durante la configuracin de Linux que
introdujo un comando
Cdigo:
Repo sync -j #
# - nmero de trabajos que desea dar para su fuente de descarga.
el Manifiesto
El manifest.xml es un archivo que est escrito en el formato XML y dirige el
repositorio de herramientas a los repositorios y sus respectivas ramas que
necesitan ser descargados. Este manifiesto se encuentra debajo de la cabeza
del rbol de cdigo fuente de Android en el / los manifiestos / directorio .repo. El
manifiesto tiene el formato de marcado XML y contiene informacin sobre los
repositorios Git a utilizar, donde se encuentran ubicados en el Internet, dnde
los puso en la fuente de cdigo de directorio, y lo que las ramas de los
repositorios Git se utilizan. Algunos de estos repositorios se tira, sin modificar de
AOSP, pero la mayora vienen de CyanogenMod en GitHub. Podemos tomar los
repositorios desde los distintos servidores Git, utilizar diferentes ramas para
cada uno de ellos, se renen en grupos para una fcil gestin y mucho ms. He
aqu un ejemplo de un manifiesto XML archivo :
Cdigo:
<Manifiesto>
<Nombre remoto = "AOSP"
fetch = "https://android.googlesource.com/" />
<Nombre remoto = "aogp"
fetch = "https://github.com/aogp/" />
<proyecto>
Define un nico repositorio. Estos son los principales atributos:
path - Cuando el depsito se comprobar a cabo dentro, en relacin con el
directorio de trabajo actual.
Nombre - El nombre del proyecto en nuestro servidor Git
remoto - El nombre de la remota del servidor en el que el repositorio puede ser
encontrado.
Revisin - El nombre de la rama / etiqueta que desea para la obtencin.
grupo - El nombre (s) del grupo para este proyecto. Podemos declarar un
conjunto de proyectos como miembros de un grupo, a continuacin, sincronizar
slo a ellos. La omisin de este atributo hace que el proyecto sea un miembro
del grupo por defecto.
<predeterminado>
Ahora como el mando a distancia se especifica, puede basar ests manifiesta a
una determinada distancia y definirlo como predeterminado remota . Define un
valores por defecto para los atributos que estamos utilizando, al sincronizar el
sistema . En este caso, establecemos la rama por defecto a la caja de cada
proyecto en su rama master y el valor predeterminado a distancia como
AOSP. Si omitimos esos atributos en la definicin de un proyecto, se utilizarn
los valores predeterminados definidos aqu. Otros atributos interesantes:
sync-j
El valor de este ser el nmero de puestos de trabajo a utilizar al sincronizar el
sistema . Paralelizacin ayuda a hacer el trabajo ms rpido, pero tambin
podra hacer que la computadora o la red atascado. Uso de 4 hilos es lo que
comnmente utilizado para la sincronizacin.
sync-c
sincronizacin slo la corriente rama / etiqueta de git. Esto comprobacin para
cada proyecto slo la rama actual / tag que especificamos para ello, y no
cualquier otra rama que existe en el repositorio. Esto ayudar a ahorrar algo de
espacio y ancho de banda (y tambin el tiempo), pero si usted necesita cambiar
entre las ramas en un proyecto especfico ms adelante - se necesita a buscarlo
manualmente.
Local_Manifest:
Si usted quiere cambiar la lista manifest.xml, puedes editarla default.xml
directamente. Sin embargo, esto hara que su copia local de la manifiestamente
contraria a la versin oficial en github. Esto podra crear problemas cuando se
actualiza el manifiesto oficial, ya que entrara en conflicto con los cambios.
SO NUNCA PIENSA DE EDICIN default.xml
Usos de Local_manifest.xml
1) Adicin y eliminacin de depsitos
para aadir a los contenidos del manifiesto por defecto, crear un archivo
llamado local_manifests.xml bajo el directorio .repo, esto tambin puede ser
creado a travs del terminal de utilizando los pasos siguientes:
cd path_of_ur_folder / .repo
Cdigo:
local_manifest.xml nano
Ahora escribe el contenido que quieres aadir a local_manifest.xml. Despus de completar pulse la tecla
"Ctrl + O" y despus haga clic en Aceptar para guardarlo. para salir del editor de nano presione "Ctrl + X"
Simple no es?
Vamos a empezar con un ejemplo que podemos usar para describir el escenario:
Cdigo:
<path = "QCOM / fm hardware /" nombre del proyecto = "aogp / hardware / QCOM /
fm" remoto = "github" revisin = "cm-11,0" />
</ Manifest>
4) <proyecto path = "QCOM / fm hardware /" name = "aogp / hardware / QCOM / fm" remoto = "github"
revisin = "cm-11,0" />
Esta lnea define un nuevo proyecto. En este caso, se reemplaza el proyecto eliminado
android_hardware_qcom / fm con uno de otro, utilizando el mando a distancia que se ha definido
anteriormente.
Al agregar un nuevo proyecto que sustituye a un proyecto existente, debe quitar siempre ese proyecto
antes de definir su reemplazo.
Usted puede simplemente aadir un nuevo proyecto para la fuente de cdigo , como por ejemplo cuando
se desea aadir su aplicacin a la construccin.
Tenga en cuenta que al aadir nuevos proyectos, hay al menos tres partes definidas:
a distancia - el nombre del mando a distancia . este puede ser uno que se ha definido ya sea en el
manifiesto por defecto o local_manifest.xml.
Nombre - el nombre de ms del proyecto git para github que tiene el formato nombre_cuenta /
project_name.
Ruta - donde el repositorio git debe ir en su copia local de la fuente de cdigo .
Revisin - (opcional) que se ramifican o etiqueta para su uso en el repositorio. Si se omite este atributo,
sincronizacin de recompra utilizar la revisin especificada por la etiqueta <predeterminado ... /> en el
manifiesto por defecto.
Despus de crear .repo / local_manifests.xml, usted debe ser capaz de repo sync y la fuente de cdigo se
actualizar en consecuencia
TRUCOS Y CONSEJOS
Supongamos que usted quiere compilar mltiples ROMs para el dispositivo. Por
ejemplo, es posible que desee tener un rbol de fuentes AOGP, as como un
rbol CM.
Obvisouly, se podra repetir los mismos pasos, a repo init y luego repo -j8
sincronizacin para ambos. Pero eso sera el doble de tiempo. no es as?
No hay ningn problema, no es un simple truco para descargar el cdigo fuente
dentro de pocos minutos (dependiendo de su velocidad de Internet). Digamos
que ya ha inicializado y sincronizado un rbol de fuentes CM, en ~ / ROM /
CM11.
Ahora, vamos a preparar una nueva cesin temporal para el rbol AOGP, en ~ /
ROM / aogp. Aqu viene el truco: Vamos a utilizar la bandera de --reference init
repo repo para indicar a que ya tenemos un repositorio local que puede tomar la
informacin de, en lugar de descargar todo de nuevo a Internet:
lo que permite decir u quiere comenzar con AOGP , as que aqu tiene los pasos
que tienes que seguir:
Cdigo:
ROMs mkdir / aogp && los CD-ROM / aogp
Cdigo:
Bashrc nano
Cdigo:
exportacin USE_CCACHE = 1
Despus de iniciar sesin y vuelva a iniciarla de nuevo, este cambio tendr efecto.
Por defecto, el proceso de construccin Android crea una subcarpeta denominada fuera en la raz del
rbol de cdigo fuente. Mientras que para la mayora de usuarios esto es lo mejor, en algunas situaciones
puede ser ventajoso para mover el directorio de salida a otro archivo de sistema . Si, por ejemplo, tiene una
matriz RAID segmentado, es beneficioso para almacenar el directorio de salida en esta matriz. Todos los
archivos dentro del directorio de salida se puede volver a generar en caso de problemas del sistema de
archivos (si las fuentes se llevaron a cabo en otro sistema de archivos).
Para cambiar el directorio de salida a otro sistema de archivos, utilice el comando
Cdigo:
</ Manifest>
Cdigo:
Android_device_companyname_codename
Por ejemplo :
Cdigo:
Android_device_samsung_codename
Los siguientes 96 usuarios dicen Gracias a Kishan14 por este mensaje: [View] Gift Kishan14 Ad-Free
RVR
Colaborador reconocido
Mumbai
Donar a m
Ms
Esta gua te dir u especfico a slimroms y te dar una idea en general ... voy a
tomar Galaxy Grand Duos como un ejemplo
1) cm.mk
2) cm.dependencias
3) AndroidProducts.mk
La imagen siguiente muestra el rbol general del dispositivo .... los 3 archivos
marcados en rojo son los archivos que tienen que ser editados.
1) Cambie el nombre de cm.mk a slim.mk
Cdigo:
# Animacin de inicio
TARGET_SCREEN_HEIGHT: = 1280
TARGET_SCREEN_WIDTH: = 720
PRODUCT_COPY_FILES + = \
Ahora todos ustedes deben estar pensando por qu cambiamos el nombre de cm.mk a slim.mk.
As que ahora usted debe estar preguntndose sobre el nombre del producto ... como en la imagen anterior
slo el "cm" cambia a "slim" con la misma lgica del nombre del proveedor
En este caso vemos que slim es el proveedor ... as que cambiamos el nombre
de cm.mk a slim.mk
Esta misma regla se aplica al contenido dentro de slim.mk tambin ... primero
asegrese de que los archivos estn disponibles en esa ubicacin.
Como se puede ver la imagen de arriba de los archivos existen en el proveedor
/ slim / config .. por lo que significa que nos estamos moviendo en el camino
correcto
Este archivo ser simplemente renombrado por el nombre del proveedor ...
TODO LO MEJOR!!!!!!
CRDITOS
RVR
Colaborador reconocido
Mumbai
Donar a m
Ms
Hay muchos dispositivos que necesitan parches para que funcionen las funciones bsicas. As que en esta
gua hablar sobre la aplicacin de parches de github y la Gerrit Code Review AQU OTRA VEZ LLEVAR
I9082 COMO UN EJEMPLO
I) APLICACIN DE PARCHES DE LA REVISIN DEL CDIGO GERRIT.
NOTA: SI LA ROM QUE EST COMPILANDO SE BASA EN CYANOGENMOD Y EL COMPROMISO SE FUNDA ...
ENTONCES EL PARCHE NO DEBE SER APLICADO
Esto es cmo una revisin de cdigo gerrit tpicamente se ve. Para aplicar un parche desde aqu ...
PASO 1: Primero tiene que hacer clic en el parche y luego copiar el enlace
PASO 2: En su terminal, navegue hasta el lugar en el que debe aplicarse (en este caso la ruta es
"frameworks / native")
Como se puede ver el comando en caja en azul .. debe verse algo similar
Despus de que el parche se aplica, pide una entrada para continuar ... en tal caso simplemente presione
"q"
FELICITACIONES QUE USTED HA APLICADO EL PATCH DE LA REVISIN DEL CDIGO DE GERRIT !!!
PASO 2: Luego copiamos, el archivo que descargamos anteriormente, a la carpeta que tiene que ser
parcheado en este caso hardware / broadcom / libbt
Cdigo:
Cd nameoftheromfolder / hardware / broadcom / libbt
Git checkout
Patch -p1 <nombre del archivo.diff o nombre del archivo.patch
Debe ser algo como esto
ES TAN SIMPLE COMO ESTE ..... TODO EL MEJOR !!! ESPERANZA ESTA GUA AYUDA ... SI USTED TIENE
ALGUNAS PROBLEMAS O PREGUNTAS POR FAVOR PLALO AQU ... AS QUE PUEDO AYUDAR: -d