tag:blogger.com,1999:blog-5680358795511559912024-03-13T08:20:44.287+00:00Spanish Android DevelopersBienvenidos a SAD (Spanish Android Developers)! El objetivo de este blog es enseñar a todo el mundo a compilar Android. Haremos todo lo posible por dar los mejores tutoriales y el mayor soporte posible. ¡A compilar!Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.comBlogger19125tag:blogger.com,1999:blog-568035879551155991.post-10461718362491758362050-08-06T16:37:00.000+01:002018-06-17T13:49:55.049+01:00Presentación¡Muy buenas a todos!<br />
<div>
<br /></div>
<div>
Esta entrada será la presentación tanto del blog como mía. Como dice en la descripción del blog, vamos a tratar el tema de Compilar Android, pero seguro que os suena más algo sobre compilar CyanogenMod desde sources u otras roms.</div>
<div>
<br /></div>
<div>
Pues bien, nuestro objetivo será recopilar tutoriales e información lo más concreto posible, para así ayudaros mejor y que podáis compilar vuestra propia ROM para vuestro dispositivo. Todavía no soy un experto, y para hacer algunas cosas necesitaréis que algún developer o lo que sea ya ha hecho un trabajo previo. Sin embargo, estoy aprendiendo, y al final, con este blog, podréis compilar vuestra propia CyanogenMod (o lo que prefiráis) desde completamente cero, sin tener nada previo, siendo vosotros los desarrolladores para vuestro dispositivo. </div>
<div>
<br />
Es importante que tengáis previos conocimientos sobre manejar Ubuntu y el Terminal, ya que es lo que estaremos usando todo el rato.</div>
<div>
<br /></div>
<div>
Espero que me hayáis entendido, y ya iréis viendo como va la distribución del blog para que todo os sea mucho más fácil.</div>
<div>
<br /></div>
<div>
Y sobre mí, pues tengo experiencia en Android y trabajo en dos dispositivos, el <a href="http://galaxy-mini-2.blogspot.com.es/" target="_blank">Galaxy Mini 2</a> y el <a href="http://galaxy-ace-3.blogspot.com.es/" target="_blank">Galaxy Ace 3</a>, de los cuales tengo sus respectivos blogs especializados y también colaboro en XDA, y creo que eso es lo más importante.<br />
<br />
Encontraréis todo lo que necesitáis en las secciones del blog que veis arriba de esta entrada, aunque también podéis buscar a la derecha en los archivos del blog. Comenzad por la sección de "Inicializar Entorno".<br />
<br />
Os recomiendo que antes de nada os miréis todas las secciones para que veáis todos los tutoriales que hay.</div>
<div>
<br /></div>
<div>
Dicho esto, empecemos a compilar!</div>
Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com4tag:blogger.com,1999:blog-568035879551155991.post-29258160978673468282016-08-28T14:05:00.004+01:002016-08-28T14:05:51.647+01:00Compilar ROMs en La Nube: Google Cloud Plattform¡Muy buenas a todos! Hoy os traigo algo que será muy útil para todos aquellos que se vean limitados al compilar, ya sea por una conexión a Internet muy lenta, un ordenador con escasos recursos, poca memoria de almacenamiento, etcétera. Para ello, existen numerosas plataformas en la nube diseñadas para desarrolladores, empresas o simplemente usuarios que la deseen, tales como Amazon, vCloud Air, LabxNow y demás.<br />
<br />
Sin embargo, en este tutorial trataremos con Google Cloud Plattform, la cual recomiendo debido a que una vez acabado el periodo de prueba no es muy cara, y porque nos ofrece crear una máquina virtual con realmente mucho potencial tanto en almacenamiento como en CPU y rendimiento.<br />
<br />
Una vez dicho esto, empecemos con el tutorial.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://modogeeks.com/wp-content/uploads/2016/04/Google-CloudPlatform_VerticalLockup.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://modogeeks.com/wp-content/uploads/2016/04/Google-CloudPlatform_VerticalLockup.png" height="224" width="320" /></a></div>
<br />
<span style="color: cyan; font-size: xx-large;"><b>Requisitos:</b></span><br />
<ul>
<li>Una cuenta de Google</li>
<li>Tarjeta de crédito </li>
<li>Ancho de banda algo decente (recomendado)</li>
</ul>
<div>
La tarjeta de crédito es necesaria para registrarnos y activar el periodo de prueba gratuito de 2 meses. Tu tarjeta será cargada con 1$ para la verificación, y luego se te devolverá una vez chequeado todo. Luego, no se te aplicarán cargos durante el periodo de prueba, y cuando este finalice, se te preguntará por si quieres seguir utilizando el servicio y, en caso afirmativo, se realizará el pago correspondiente con tu tarjeta de crédito.</div>
<div>
<br /></div>
<div>
Si tienes todo esto claro, prosigue con el tutorial.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<span style="color: cyan; font-size: xx-large;"><b>1. Activar Cuenta en Google Cloud</b></span></div>
<div>
<br /></div>
<div>
Lo primero de todo será crearnos la cuenta en el servicio y activarla. Para ello, nos dirigiremos a la siguiente dirección: <a href="https://cloud.google.com/">https://cloud.google.com/</a></div>
<div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTuDoeiUCSAjtsuhd-vDHVK3Nn6OXWnh5gr0ygcPZbhch1xk89-QbDiktNMEpcXWBSTHboxejswkb1I7-tvyeXX7IcKTAN8EkETRHNEJaizoiR0-y-YaGaXCGcyzvuhGv_mqANzlUMUGcx/s1600/Captura2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTuDoeiUCSAjtsuhd-vDHVK3Nn6OXWnh5gr0ygcPZbhch1xk89-QbDiktNMEpcXWBSTHboxejswkb1I7-tvyeXX7IcKTAN8EkETRHNEJaizoiR0-y-YaGaXCGcyzvuhGv_mqANzlUMUGcx/s640/Captura2.PNG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Y accederemos a la opción "Pruébalo Gratis":</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYJvmiOz8plnK37JUxxIDjMZfzk0GB2PM3Ifokkc_4pj8xoQpKRcz0OLgCwWL-0FfOi58BZary1tSCHV0o71eky74LiYU_wri2bC-8YKOAavW_k44a1ARPkBg2VFEzlrEwpGOc8AQLYDon/s1600/Captura3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYJvmiOz8plnK37JUxxIDjMZfzk0GB2PM3Ifokkc_4pj8xoQpKRcz0OLgCwWL-0FfOi58BZary1tSCHV0o71eky74LiYU_wri2bC-8YKOAavW_k44a1ARPkBg2VFEzlrEwpGOc8AQLYDon/s640/Captura3.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkviTMyNN9ynCcxcyjVRfrCLQK-FfNsqXj7tpQ8ElzUUEewLgruGZ8ZUeTST1MZ9prIZqn16vXp66hgg3C28xH5x0MwJdHvDh7liBavCe-kqPIADJ9flN6tb8OkzsQT7zOR4JRH-izq_ZC/s1600/Captura4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="338" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkviTMyNN9ynCcxcyjVRfrCLQK-FfNsqXj7tpQ8ElzUUEewLgruGZ8ZUeTST1MZ9prIZqn16vXp66hgg3C28xH5x0MwJdHvDh7liBavCe-kqPIADJ9flN6tb8OkzsQT7zOR4JRH-izq_ZC/s640/Captura4.png" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Como veis, a la derecha de la imagen tenéis explicado lo que os nombré sobre la tarjeta de crédito. Una vez cliques en "Aceptar y continuar", rellenáis la siguiente pantalla con vuestros datos:</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5hGMj7AawWEAUV-qzddDUHCwd41ggVGKO9YEde-WKLdU3gOvR9ItLBUawV-fo96DGatL6Q4gIQdoqHEXlauqu8ITDbEShM7C27E_gdjlPMUE6iRv9dRbVhAxuN14CeROkjAidRCSAdY72/s1600/Captura5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="429" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5hGMj7AawWEAUV-qzddDUHCwd41ggVGKO9YEde-WKLdU3gOvR9ItLBUawV-fo96DGatL6Q4gIQdoqHEXlauqu8ITDbEShM7C27E_gdjlPMUE6iRv9dRbVhAxuN14CeROkjAidRCSAdY72/s640/Captura5.png" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Una vez rellenados todos los campos y aceptemos iniciar la versión de prueba, veremos pantallas parecidas a las siguientes. (A partir de ahora las capturas no son mías. Gracias a nitin.chobhe por su <a href="http://forum.xda-developers.com/chef-central/android/guide-how-to-build-rom-google-cloud-t3360430" target="_blank">publicación en XDA</a>)</div>
<div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://img.xda-cdn.com/Rpugaz9Er58QHIYD1675RADkSCE=/http%3A%2F%2Fi.imgur.com%2FGH2OA8Q.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://img.xda-cdn.com/Rpugaz9Er58QHIYD1675RADkSCE=/http%3A%2F%2Fi.imgur.com%2FGH2OA8Q.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://img.xda-cdn.com/qSrnXN732OcMHHcQlkjIauOA40g=/http%3A%2F%2Fi.imgur.com%2FBzFeEqB.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://img.xda-cdn.com/qSrnXN732OcMHHcQlkjIauOA40g=/http%3A%2F%2Fi.imgur.com%2FBzFeEqB.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Como veis, nos informa de que nos dan 300 créditos para poder gastar durante el periodo de prueba de 2 meses (60 días exactamente). Una vez cliquemos en "GOT IT", habremos completado nuestra cuenta y pasaremos al siguiente paso.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<span style="color: cyan; font-size: xx-large;"><b>2. Inicializar Entorno de Compilación</b></span></div>
<div>
<br /></div>
<div>
En este segundo paso, nos tocará configurar nuestra máquina virtual en la nube para poder compilar. Para ello, seleccionamos el icono de tres barras que ves en la siguiente imagen.</div>
<div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://img.xda-cdn.com/81bZAao6YC9sVX7mAZ5ulojieDs=/http%3A%2F%2Fi.imgur.com%2FbiULzBF.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="135" src="https://img.xda-cdn.com/81bZAao6YC9sVX7mAZ5ulojieDs=/http%3A%2F%2Fi.imgur.com%2FbiULzBF.png" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
En el menú desplegable, seleccionaremos la opción "Compute Engine".</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://img.xda-cdn.com/Rjje0JCzh9rrLhnDM75pbgD8U1k=/http%3A%2F%2Fi.imgur.com%2FRIPTqDJ.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="385" src="https://img.xda-cdn.com/Rjje0JCzh9rrLhnDM75pbgD8U1k=/http%3A%2F%2Fi.imgur.com%2FRIPTqDJ.png" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Y en la página que se mostrará, elegiremos la siguiente opción:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://img.xda-cdn.com/tG2F8ifn3nAPWpPla9bQ3zsd6gs=/http%3A%2F%2Fi.imgur.com%2F4TXdFra.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="379" src="https://img.xda-cdn.com/tG2F8ifn3nAPWpPla9bQ3zsd6gs=/http%3A%2F%2Fi.imgur.com%2F4TXdFra.png" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Y se nos mostrará la siguiente pantalla.</div>
<div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://img.xda-cdn.com/Yj6OmhVxaPWf-bd8j4DcxcqkydU=/http%3A%2F%2Fi.imgur.com%2FWhWrNF7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://img.xda-cdn.com/Yj6OmhVxaPWf-bd8j4DcxcqkydU=/http%3A%2F%2Fi.imgur.com%2FWhWrNF7.png" /></a></div>
<div>
<br /></div>
<div>
Aquí es donde configuramos nuestra máquina virtual. Los campos de "Nombre" y "Zona" los podéis cambiar si queréis, aunque no es algo vital. Luego, recomiendo las opciones que veis en la captura, aunque obviamente podéis cambiarlo para que se adapte mejor a vuestras necesidades.</div>
<div>
<br /></div>
<div>
En el aparte de disco de arranque (Boot disk), seleccionamos la opción de cambiar.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://img.xda-cdn.com/cjQukGHPnG3uCAF56ukCvz1RQyg=/http%3A%2F%2Fi.imgur.com%2FUGOwFl1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://img.xda-cdn.com/cjQukGHPnG3uCAF56ukCvz1RQyg=/http%3A%2F%2Fi.imgur.com%2FUGOwFl1.png" /></a></div>
<div>
<br /></div>
<div>
Y entonces elegiremos el tipo de SO (Sistema Operativo) que prefiramos. Personalmente recomiendo Ubuntu 14 ya que es una versión que es de soporte prolongado (Long-Time Support).</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://img.xda-cdn.com/aZw8CiS0EEgCmbsmf3S0Mzjn_Yk=/http%3A%2F%2Fi.imgur.com%2FyP8GGAM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://img.xda-cdn.com/aZw8CiS0EEgCmbsmf3S0Mzjn_Yk=/http%3A%2F%2Fi.imgur.com%2FyP8GGAM.png" /></a></div>
<div>
<br /></div>
<div>
Como veis, también podemos modificar el tipo de disco duro que prefiramos, así como la cantidad de memoria que prefiramos. Es por todo ello que al principio dije que recomendaba utilizar Google Cloud, ya que en el menú de antes nos dejaba seleccionar opciones de CPU bastante potentes, y ahora una capacidad de almacenamiento en disco bastante cómoda.</div>
<div>
<br /></div>
<div>
Así, con los 500GB que veis de ejemplo, podremos alojar unas 2 o 3 ROMs a la vez en dicha máquina, lo cual va bastante bien aunque, como siempre, podéis elegir la configuración que mejor se adapte a cada uno.</div>
<div>
<br /></div>
<div>
Posteriormente, veréis una sección de configuración de Firewall. Recomiendo dejarlo así.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://img.xda-cdn.com/BntkjVsiy_gMxuN2cdLwolDPrBY=/http%3A%2F%2Fi.imgur.com%2FoFGBz2G.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://img.xda-cdn.com/BntkjVsiy_gMxuN2cdLwolDPrBY=/http%3A%2F%2Fi.imgur.com%2FoFGBz2G.png" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Una vez le des a crear, tardará un minuto o dos en completar la operación. Veremos la siguiente pantalla.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://img.xda-cdn.com/j3IG2C2Y8zd92Ao8zp6TDNUVbWg=/http%3A%2F%2Fi.imgur.com%2Fi23zi1r.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://img.xda-cdn.com/j3IG2C2Y8zd92Ao8zp6TDNUVbWg=/http%3A%2F%2Fi.imgur.com%2Fi23zi1r.png" width="640" /></a></div>
<div>
<br /></div>
<div>
El check verde de abajo nos indica que la máquina está activa. Si clicamos encima, podremos pararla cada vez que queramos. Además, cuando cerremos sesión en el navegador se cerrará automáticamente, así que no os preocupéis por si no la parasteis antes de cerrar el navegador.</div>
<div>
<br /></div>
<div>
Como últimos pasos de este tutorial, clicaremos en la opción "Abrir en ventana del navegador" que vemos remarcada arriba, y veremos la ventana de Terminal conectando.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://img.xda-cdn.com/Dw8XOIKrNicEOTLTSKotNRnk5vQ=/http%3A%2F%2Fi.imgur.com%2F04ISl7i.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="440" src="https://img.xda-cdn.com/Dw8XOIKrNicEOTLTSKotNRnk5vQ=/http%3A%2F%2Fi.imgur.com%2F04ISl7i.png" width="640" /></a></div>
<div>
</div>
<div>
<br /></div>
<div>
Y ejecutamos el siguiente comando para obtener permisos root.<br />
<br /></div>
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">sudo -s
</textarea><br />
<br />
Ahora estas listo para empezar a compilar ROMs. No te olvides de <a href="http://spanish-android-developers.blogspot.com.es/2015/08/inicializar-entorno-para-compilar.html" target="_blank">configurar el entorno</a> y como siempre, cualquier duda en comentarios. Salu2!!<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.ftrack.com/wp-content/uploads/google-cloud-platform.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="297" src="https://www.ftrack.com/wp-content/uploads/google-cloud-platform.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com2tag:blogger.com,1999:blog-568035879551155991.post-76172964436287363372016-07-20T02:18:00.001+01:002016-08-28T14:07:44.760+01:00Compilar Kernel Desde Source¡Hola amigos! Hoy en este tutorial vamos a aprender algo muy útil en el mundillo de la compilación de Android: vamos a aprender a compilar un kernel desde el código fuente.<br />
<br />
Bueno... primero que todo debemos cumplir con unos requisitos los cuales son los siguientes:<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>Requisitos:</b></span><br />
<br />
<ul>
<li>Sistema operativo basado en linux (recomendado ubuntu)</li>
<li><a href="http://spanish-android-developers.blogspot.com.es/2015/08/inicializar-entorno-para-compilar.html" target="_blank">Entorno para compilar inicializado</a></li>
<li>Mínimo 2GB de RAM disponibles</li>
<li>Source code de un kernel de nuestro dispositivo</li>
<li><a href="http://elinux.org/Toolchains" target="_blank">Toolchain</a></li>
</ul>
<br />
<br />
Una vez hecho esto, podremos comenzar.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>1. Preparar Entorno de Trabajo</b></span><br />
<br />
<br />
Primero de todo, procedemos a buscar un source de un kernel para nuestro dispositivo, para ello lo mas fácil es ir a <a href="https://github.com/" target="_blank">GitHub</a> y poner en la barra de búsqueda el nombre clave de nuestro dispositivo (codename, por ejemplo en mi caso, loganreltexx), para que entiendas mejor esto te invito a visitar una de las entradas del blog en las cuales <a href="http://spanish-android-developers.blogspot.com.es/p/glosario-basico-de-compilacion.html" target="_blank">definimos muchos términos que podrían confundirte</a>.<br />
<br />
Una vez lo hayas encontrado, será algo muy parecido a esto:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggnUtMGVZ5LmsArd5W1Oea4Zv2YEL3YclMr3y9SKFtHKvlEzZMSGGLEdiInfINwGIqKSqazllSmSI9iWgNdOnLib_CKiBMM5MpPSME7lvrnHb5A9MAU_xE87OkRgZ57eIEXSkK2SfkjiXt/s1600/Captura.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggnUtMGVZ5LmsArd5W1Oea4Zv2YEL3YclMr3y9SKFtHKvlEzZMSGGLEdiInfINwGIqKSqazllSmSI9iWgNdOnLib_CKiBMM5MpPSME7lvrnHb5A9MAU_xE87OkRgZ57eIEXSkK2SfkjiXt/s640/Captura.PNG" width="640" /></a></div>
<br />
<br />
Luego de hallar un repositorio adecuado vamos a descargarlo como zip y lo descomprimimos en la ruta de nuestra preferencia.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrlrLXMctctHgAMoNhiqBDXmCCIfiHohZvXZcEb1raHE00L1VGMYuMnQjU56D_rZWE8RMTO9rBqKPN95HkRnc0kQjtIQtpV9iHo05EHfijMPytCcfk-iVjOehuD99FOakYLwpBKOBKfNlu/s1600/Captura1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrlrLXMctctHgAMoNhiqBDXmCCIfiHohZvXZcEb1raHE00L1VGMYuMnQjU56D_rZWE8RMTO9rBqKPN95HkRnc0kQjtIQtpV9iHo05EHfijMPytCcfk-iVjOehuD99FOakYLwpBKOBKfNlu/s640/Captura1.PNG" width="640" /></a></div>
<br />
<br />
Una vez lo hayamos descargado y situado en una carpeta, pasaremos al siguiente paso.<br />
<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>2. Inicializar Toolchain</b></span><br />
<br />
<br />
En este paso lo que haremos será buscar una toolchain, la cual es la herramienta que usaremos para compilar nuestro kernel. Sabiendo esto les dejare estos link en los cuales podrán bajar varias toolchain para compilar:<br />
<br />
<ul>
<li><a href="https://github.com/hyper-toolchains/">https://github.com/hyper-toolchains/</a> </li>
</ul>
Una vez elegida la más adecuada para ti, la descargamos como zip y descomprimimos en ruta de preferencia, como hemos hecho anteriormente con el código fuente del kernel. Con ello, habremos terminado este paso.<br />
<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>3. Compilar Kernel</b></span><br />
<br />
<br />
Sí, ya estamos en el último paso, es un tutorial corto ya que el proceso es relativamente sencillo. Ahora será el momento de abrir el Terminal (Ctrl+T), y vamos a movernos hasta la ruta de trabajo que hayamos elegido.<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd kernel
</textarea><br />
<br />
*Kernel lo cambias por el nombre que hayas elegido para tu carpeta. Eso sí, recomiendo siempre crearla en el directorio home como hemos hecho siempre*<br />
<br />
Una vez situados en la carpeta de trabajo, vamos a ejecutar varios comandos para que el kernel se compile con la toolchain que acabamos de descargar. Por ejemplo, si descomprimí la toolchain en una carpeta llamada "toolchain" en el directorio "home", debería de colocar lo siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 416px;" wrap="VIRTUAL">export CROSS_COMPILE=/home/toolchain/bin/arm-eabi-/>
</textarea><br />
<br />
Y a continuación:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">export ARCH=arm<br />
</textarea><br />
<br />
<br />
Luego buscaremos en la source del kernel un archivo llamado "defconfig". Este lo podremos encontrar la mayoría de veces en la ruta sourcekernel/arch/arm/configs/codename_defconfig.<br />
<br />
Por ejemplo, en mi caso estaría en kernel/arch/arm/configs/loganreltexx_defconfig.<br />
<br />
Una vez localizado escribiremos lo siguiente en Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">make codename_defconfig
</textarea>
<br />
<br />
Nuevamente reemplazamos "codename" con el de nuestro dispositivo. Por ejemplo, en mi caso sería "make loganreltexx_defconfig"<br />
<br />
Como nota, podemos añadir la coletilla "-j#" al final de la línea y, como ya sabemos, la almohadilla la reemplazamos por el número de núcleos de nuestro PC +1.<br />
<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>¡Listo! Ya Has Compilado un Kernel Desde Source</b></span></div>
<br />
<br />
Espero que os haya sido útil esta guía y como siempre, cualquier duda en comentarios.<br />
<br />
<br />
<b>CRÉDITOS:</b><br />
<ul>
<li>Luis Castillo</li>
<li>Android Spanish Developers</li>
</ul>
<br />
<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-568035879551155991.post-52971595384601182972015-10-12T11:57:00.000+01:002015-10-12T11:57:14.214+01:00Portar FIUI v2 desde ROM¡Buenas a todos! Hoy aprenderemos a portar FIUI, una ROM china que está teniendo mucho auge gracias a su cómoda y vistosa interfaz. Sus creadores la definen como "Future Interactive UI (FIUI)".<br />
Como ya expliqué la diferencia entre portar y compilar en el post para <a href="http://spanish-android-developers.blogspot.com.es/2015/09/portar-miui-v6-desde-rom_29.html" target="_blank">portar MIUI</a>, pues no hace falta que lo vuelva a hacer.<br />
<br />
Decir que esta ROM no ha liberado ningún tipo de código fuente, por lo que esta es la única manera de adaptar esta ROM a tu dispositivo. Sin embargo, es bastante sencillo portarla, ya que absolutamente todas las ROMs FIUI están basadas en CM11, aplicando solo ligeros cambios en la interfaz. Por ello, hay un 99% de probabilidades de que consigas un port satisfactorio con mi método.<br />
<br />
Dicho esto, comencemos con el tutorial:<br />
<br />
*Este tutorial es aplicable a cualquier dispositivo y versión de FIUI*<br />
<br />
<br />
<b style="color: cyan; font-size: xx-large;">1. Conceptos Básicos:</b><br />
<br />
Vamos a empezar teniendo claro lo que necesitamos saber y tener para portar esta ROM.<br />
<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 96px; margin: 0px; width: 301px;" wrap="VIRTUAL">Requisitos:
1. WinRAR
2. Notepad++
3. Conocimientos básicos
</textarea>
<br />
<br />
<br />
Y antes de nada, hay que tener claros los siguientes conceptos:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 80px; margin: 0px; width: 436px;" wrap="VIRTUAL">Base ROM:
La ROM funcional en tu dispositivo. En este caso, SOLO
podremos usar CM11 como ROM base.
</textarea>
<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 141px; margin: 0px; width: 458px;" wrap="VIRTUAL">Port ROM:
La ROM que queremos adaptar a nuestro dispositivo. En este
caso, será FIUI.
Debido a los mínimos cambios que hace
a CM11, no importa el dispositivo de dónde extraigas FIUI,
aunque recomiendo que sea de uno lo más parecido al tuyo.
</textarea>
<br />
<br />
<br />
Una vez que tengamos esto claro, prosigamos con el tutorial.<br />
<br />
<br />
<b style="color: cyan; font-size: xx-large;">2. Preparar Entorno:</b><br />
<br />
Ahora es momento de crear y organizar el directorio donde vamos a trabajar. Para ello, creamos una carpeta llamada "fiui" en la ruta que prefieras. A continuación, creamos dos subcarpetas:<br />
<br />
<br />
<ul>
<li><b>CM11: </b>Aquí irá la ROM funcional en nuestro dispositivo, que solo podrá ser CM11.</li>
<li><b>FIUI: </b>Aquí irá cualquier FIUI de otro dispositivo.</li>
</ul>
<div>
<br /></div>
<div>
Ahora cogemos cada ROM y extraemos su contenido en su carpeta correspondiente.</div>
<div>
<br /></div>
<div>
Hecho esto, estarás listo para empezar el port.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b style="color: cyan; font-size: xx-large;">3. Portando la ROM:</b></div>
<div>
<br /></div>
<div>
Ahora será el único paso "complicado" del proceso. Básicamente lo que haremos será copiar y pegar archivos y carpetas. Sin embargo, debes prestar mucha atención en cada paso.</div>
<div>
<br /></div>
<div>
<br /></div>
<div style="text-align: center;">
<span style="color: magenta;"><b>---------------------------------------------------------------------------------------------------------</b></span></div>
<div>
Primero de todo, borramos las siguientes carpetas de <b>CM11</b>:</div>
<div>
<ul>
<li><span style="color: blue;"><b>system/app</b></span></li>
<li><span style="color: blue;"><b>system/media</b></span></li>
<li><span style="color: blue;"><b>system/priv-app</b></span></li>
</ul>
</div>
<br />
Y las reemplazamos por las carpetas de FIUI. Es decir, copia esas 3 carpetas <b>desde FIUI a CM11</b>.<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; text-align: left;"><b>---------------------------------------------------------------------------------------------------------</b></span></div>
<div style="text-align: center;">
<br /></div>
A continuación, dentro de <b>FIUI</b> nos dirigimos a <b>system/etc/permissions </b>y buscamos un archivo llamado <u style="font-weight: bold;">com.htc.software.market.xml.</u> Si aparece, lo copiamos en la carpeta <b>system/etc/permissions </b>de <b>CM11. </b><br />
<b><br /></b>
Hacemos el mismo proceso con el archivo <u style="font-weight: bold;">libAppDataSearch.so</u>, que debe estar localizado en <b>system/lib.</b><br />
<b><br /></b>
<span style="color: red;">Recuerda: si esos dos archivos no están, no importa. Continúa con el tutorial.</span><br />
<br />
<div style="text-align: center;">
<span style="color: magenta;"><b>---------------------------------------------------------------------------------------------------------</b></span></div>
<br />
Ahora copia el archivo <span style="font-weight: bold;">"</span><u style="font-weight: bold;">su</u><span style="font-weight: bold;">"</span> desde <b>FIUI</b> hasta <b>CM11. </b>Este archivo se encuentra en la ruta <b>system/xbin, </b>y recuerda, lo pegamos en la misma ruta, pero de CM11.<br />
<br />
<div style="text-align: center;">
<b><span style="color: magenta;">---------------------------------------------------------------------------------------------------------</span></b></div>
<div style="text-align: center;">
<b><span style="color: magenta;"><br /></span></b></div>
<div style="text-align: left;">
En CM11 y FIUI, abrimos el archivo <b style="text-decoration: underline;">framework-res.apk</b> con WinRAR. Nos desplazamos hasta la carpeta <b>res/xml.</b></div>
<div style="text-align: left;">
<b><br /></b></div>
<div style="text-align: left;">
Seguidamente, mueve estos archivos directamente <span style="color: red;">desde el</span> <b style="text-decoration: underline;">framework-res.apk</b> <span style="color: red;">de CM11</span> <span style="color: red;">hasta el </span><b style="text-decoration: underline;">framework-res.apk</b> <span style="color: red;">de FIUI:</span></div>
<ul>
<li><b><span style="color: blue;">eri.xml</span></b></li>
<li><b><span style="color: blue;">storage_list.xml</span></b></li>
<li><b><span style="color: blue;">apn.xml</span></b></li>
<li><b><span style="color: blue;">power-profile.xml</span></b></li>
</ul>
<div>
<br /></div>
Una vez hecho esto, copiamos la carpeta <b>system/framework</b> <span style="color: red;">desde FIUI hasta CM11. </span>Elegimos la opción de combinar carpetas, y reemplazamos cada vez que lo pregunte.<br />
<div>
<br /></div>
<div style="text-align: center;">
<b><span style="color: magenta;">---------------------------------------------------------------------------------------------------------</span></b></div>
<div>
<br /></div>
<div>
Por último, abrimos el archivo <u style="font-weight: bold;">build.prop</u> de CM11 con Notepad++ y pegamos el siguiente código al final:</div>
<div>
<br /></div>
<div>
<textarea cols="40" name="textarea" rows="4" style="height: 96px; margin: 0px; width: 354px;" wrap="VIRTUAL">#fiui build
fiui.ver.name=beta_x.xx.
fiui.ver=1
fiui.navbar=0
fiui.traffic=1
</textarea>
<br />
<br />
Y reemplazamos los valores correspondientes dependiendo de la versión de FIUI que estemos portando.<br />
<br />
Una vez hecho, guarda los cambios. Ya has terminado todo el trabajo.<br />
<br />
<br />
<b style="color: cyan; font-size: xx-large;">5. Re-empaquetar ROM:</b><br />
<br />
Lo único que falta en ir a la carpeta CM11, seleccionar todas las carpetas y archivos que veamos, y comprimirlas en formato zip.<br />
Una vez finalizado el proceso, ya estará lista para ser instalada en tu dispositivo.<br />
<br />
<br />
<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>¡Listo! Has Portado FIUI para tu Dispositivo</b></span></div>
<b style="color: cyan; font-size: xx-large;"><br /></b>
</div>
Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com5tag:blogger.com,1999:blog-568035879551155991.post-16775228190804430072015-10-11T13:01:00.000+01:002015-10-11T13:10:49.716+01:00Compilar AOSPA 4.4 desde SourceMuy buenas a todos! Hoy aprenderemos a compilar AOSPA, también conocida como ParanoidAndroid. Se caracteriza por incluir numerosas funciones exclusivas de personalización, así como ligeras modificaciones en la interfaz.<br />
Para compilarla necesitaréis varias cosas previas que ya haya hecho un desarrollador, ya que incluso yo no sé hacerlas todavía. En cuanto aprenda, lo publicaré y añadiré enlace para redireccionaros a la publicación y luego seguiréis con este tutorial.<br />
Vayamos al lío:<br />
<br />
<br />
<span style="font-size: large;"><b>Pre-requisitos:</b></span><br />
<span style="font-size: large;"><b><br /></b></span>* Device Tree de CM11 para tu dispositivo (Buscad en GitHub)<br />
* Local_Manifest para tu dispositivo (recomendado)<br />
* <a href="http://spanish-android-developers.blogspot.com.es/2015/08/inicializar-entorno-para-compilar.html" target="_blank">Entorno de Compilación Configurado</a><br />
<br />
<br />
El device tree es lo más importante. Es lo necesario para que compile con los archivos y características de tu dispositivo para que la ROM sea compatible. Necesitas que algún desarrollador experto lo haga. Yo estoy aprendiendo y en cuanto pueda lo compartiré. El device tree se compone principalmente de tres partes: Device, Kernel y Vendor. <a href="https://github.com/TheWhisp/android_device_samsung_jena" target="_blank">Aquí</a> tenéis un ejemplo de device tree (solo device) y como veis son varios archivos y carpetas. Fijaos arriba a la izquierda donde pone "branch" y es una pestaña deslizable. Debéis aseguraros de que vuestro device tree tiene cm-11.0 en esa pestaña.<br />
Dicho esto, prosigamos:<br />
<br />
<br />
<b style="color: cyan; font-size: xx-large;">1. Crear Directorio de Trabajo:</b><br />
<br />
El primer paso será crear la carpeta en la que tendremos todo los archivos y en la que se trabajará. La podéis llamar como queráis, pero yo recomiendo llamarla por el nombre de la ROM que vayamos a compilar. Para crear la carpeta hacemos lo siguiente con Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">mkdir aospa
</textarea>
<br />
<br />
<br />
Ahora se habrá creado una carpeta en el directorio Home. La podéis ver si abrís el explorador de archivos. Ahora, vamos a situarnos en esa carpeta con Terminal. Para ello:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd aospa
</textarea>
<br />
Con esto ya habremos creado la carpeta de trabajo y nos habremos situado en ella en Terminal.<br />
<br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
<b style="color: cyan; font-size: xx-large;">2. Descargas las Sources:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>En este paso inicializaremos los archivos de código abierto de la ROM que vayamos a compilar, en este caso AOSPA 4.4, y las sincronizaremos a nuestra carpeta de trabajo. Para este paso es necesario el binario repo que ya instalamos al inicializar el entorno de trabajo.<br />
Estando situados en la carpeta "aospa", ejecutamos el siguiente comando:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 437px;" wrap="VIRTUAL">repo init -u https://github.com/AOSPA/manifest -b kitkat
</textarea>
<br />
<br />
Puede que el terminal os dé algún error y os pida ejecutar algún comando para instalar archivos necesarios. En ese caso, copia lo que te diga el Terminal que ejecutes, y cuando termine vuelve a ejecutar el comando de arriba.<br />
<br />
Si todo ha ido bien, se iniciará tu repositorio local usando las sources de AOSPA. Para asegurarse de que se ha descargado, vete a la carpeta "aospa" con el explorador de archivos, y pulsa Ctrl+h y deberá aparecer una carpeta llamada ".repo"<br />
<br />
Al finalizar la descarga, Terminal dirá que tienes que registrarte con una cuenta de GitHub. Id a su <a href="https://github.com/" target="_blank">página oficial</a> y os creáis una cuenta. Una vez creada y comprobada por correo, volver a Terminal y ejecutáis estos dos comandos por separado:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 370px;" wrap="VIRTUAL">git config --global user.email "tu@correo.com"
git config --global user.name "Tu Nombre" <br>
</textarea>
<br />
<br />
*Reemplaza "tu@correo.com" y "Tu Nombre" por los que hayas usado al crear la cuenta. Ojo, sin las comillas pero con el espacio después de "user.email" y "user.name" respectivamente*<br />
<br />
Una vez registrado recomiendo ejecutar otra vez el comando de descarga de sources y veréis que os aparecerá que estáis identificados al terminar el proceso. Por otro lado, cuando el Terminal os pida si queréis visualización de colores en vuestra cuenta (Enable colour display) escribe una N y le dais a enter.<br />
<br />
Hecho esto ya tendremos nuestra carpeta de trabajo lista para obtener las sources de la ROM con la que vamos a trabajar.<br />
<br />
<br />
<b style="color: cyan; font-size: xx-large;">3. Sincronizar Repositorio:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>Este es el paso más pesado para todo el mundo, ya que descargaremos las sources y pesa entre 10-15GB aproximadamente. Es muy recomendado tener una velocidad de Internet elevada si no quieres morir de aburrimiento. En caso de que quieras aburrirte, ejecuta lo siguiente en Terminal:<br />
<br />
*Atención, debemos estar situados en la carpeta aospa. Si has seguido los pasos tal cual sin cerrar el Terminal, estarás situado en ella (lo veréis donde dice ~/aospa~$ al principio de la línea). Si no, sitúate ejecutando "cd && cd aospa".*<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">repo sync -j#
</textarea>
<br />
<br />
<br />
El # indica el número de trabajos que se usarán para descargar los archivos. Depende de tu velocidad de Internet cuánto ponerle. Yo recomiendo usar de 2 a 4. Por lo tanto, si usas dos el comando quedaría así: repo sync -j2<br />
<br />
Tras ejecutar el comando empezará la descarga, y llevará unas cuantas horas, así que podéis ir a tomaros algo o salir a caminar, que es saludable. Cuando termine la sincronización, ya tendremos las sources en nuestra carpeta de trabajo.<br />
<br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
<b style="color: cyan; font-size: xx-large;">4. Configurar Tu Dispositivo:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
En este paso es quizá el más complicado ya que no solo será ejecutar comandos en Terminal, sino que tendréis que editar y escribir líneas en varios archivos. Sin embargo, si sigues bien el tutorial te resultará bastante sencillo.<br />
<br />
Como dije al principio, es necesario tener localizado el device, kernel y vendor de nuestro dispositivo. En este paso lo que haremos en añadir un archivo a la carpeta de trabajo para que sincronice y descargue las sources específicas de nuestro dispositivo.<br />
<br />
Tomaré de ejemplo mi actual dispositivo, el Galaxy Ace 3. Aquí tenéis enlaces de GitHub para que veáis con qué nombre suelen estar:<br />
<br />
- Device: <a href="https://github.com/kostoulhs/android_device_samsung_loganreltexx">https://github.com/kostoulhs/android_device_samsung_loganreltexx</a><br />
- Kernel: <a href="https://github.com/kostoulhs/android_kernel_samsung_loganreltexx">https://github.com/kostoulhs/android_kernel_samsung_loganreltexx</a><br />
- Vendor: <a href="https://github.com/kostoulhs/proprietary_vendor_samsung_loganreltexx">https://github.com/kostoulhs/proprietary_vendor_samsung_loganreltexx</a><br />
<br />
<br />
Ahora que tenemos localizados los tres enlaces, vamos a sincronizarlos con nuestra carpeta. Para ello, usaremos el Local Manifest.<br />
<br />
Atención: Seguramente si ya hay un desarrollador que ha hecho un Device Tree para CyanogenMod 11, ya haya hecho un local_manifest. Lo encontraréis en su página de GitHub y tendrá un aspecto como <a href="https://github.com/kostoulhs/loganreltexx_local_manifest" target="_blank">éste</a>. En este caso, primero seleccionamos la branch con la que estamos trabajando en la pestaña. La página recargará, entonces clicamos en "local_manifest.xml" y veréis las líneas que tendréis que poner (copiar y pegar) cuando creéis el local manifest.<br />
<br />
No me paro a explicar esto de nuevo, ya que lo tenéis explicado en <a href="http://spanish-android-developers.blogspot.com.es/2015/08/local-manifest-genericos.html" target="_blank">este tutorial específico</a>, además de en tutoriales anteriores sobre ROMs desde source.<br />
<br />
Una vez finalizado de escribir el Local Manifest, presiona Ctrol+O y enter para guardar. Luego Ctrl+x para salir del editor. Revisa que el archivo esté en cm11/.repo/local_manifest y que se haya guardado correctamente.<br />
<br />
Después de todo esto, ejecuta el comando "repo sync" de nuevo. Tranquilo, no tardará tanto como la primera vez, ya que solo descargará los repo que añadimos en el local manifest.<br />
<br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
<b style="color: cyan; font-size: xx-large;">5. Editar La Source:</b><br />
<div>
<br /></div>
<div>
En este paso modificaremos y añadiremos diversos archivos a la source, para añadir soporte a nuestro dispositivo. Esto es necesario para cualquier ROM que queramos compilar y que la estemos basando en CyanogenMod. En este tutorial saldrá específicamente para AOSPA. Primero de todo, debemos hacer:</div>
<div>
<br /></div>
<div>
*Atención: todos los archivos y directorios que editaremos/añadiremos están en la ruta del device tree de tu dispositivo*</div>
<div style="text-align: center;">
<span style="color: red;"><b><br /></b></span></div>
<div style="text-align: center;">
<span style="color: red;"><b>*Nota: todos los "device" los sustituimos por el "codename" de tu dispositivo, a menos que especifique lo contrario*</b></span><br />
<span style="color: red;"><b><br /></b></span></div>
<div>
<br /></div>
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Añadir pa.dependencies</b></span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Este archivo es igual a "omni.dependencies" que explico en el tutorial de OmniROM. </div>
<div style="text-align: left;">
<div style="text-align: center;">
<div style="text-align: left;">
<br />
Es bastante fácil. Este archivo se basa en el local_manifest. Si has entendido el local_manifest, te resultaŕa fácil hacer este archivo. Varía un poco, ya que aquí la terminología es:</div>
</div>
<br />
- remote: cuenta de github (CyanogenMod, onmirom, etc)<br />
- repository: enlace del repo quitando "https://github.com/" y el nombre de la cuenta.<br />
- target_path: ruta local del repo. La misma que ponga el local_manifest<br />
- revision: igual que el local_manifest<br />
<br />
El ejemplo de estructura que sigue es así:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 112px; margin: 0px; width: 477px;" wrap="VIRTUAL">[
{
"remote": "kostoulhs",
"repository": "android_kernel_samsung_msm8930-common",
"target_path": "kernel/samsung/msm8930-common",
"revision": "cm-11.0_mod"
},
{
"remote": "kostoulhs",
"repository": "propietary_vendor_samsung_loganreltexx",
"target_path": "vendor/samsung/loganreltexx",
"revision": "cm-11.0"
},
{
"remote": "omnirom",
"repository": "android_hardware_samsung",
"target_path": "hardware/samsung",
"revision": "android-4.4"
},
{
"remote": "omnirom",
"repository": "android_device_qcom_common",
"target_path": "device/qcom/common",
"revision": "android-4.4"
},
{
"remote": "CyanogenMod",
"repository": "android_hardware_qcom_fm",
"target_path": "hardware/qcom/fm",
"revision": "cm-11.0"
},
{
"remote": "kostoulhs",
"repository": "android_device_samsung_qcom-common",
"target_path": "device/samsung/qcom-common",
"revision": "cm-11.0"
},
{
"remote": "kostoulhs",
"repository": "android_device_samsung_msm8930-common",
"target_path": "device/samsung/msm8930-common",
"revision": "cm-11.0"
},
{
"remote": "kostoulhs",
"repository": "android_device_samsung_loganreltexx",
"target_path": "device/samsung/loganreltexx",
"revision": "cm-11.0"
}
]</textarea>
<br />
<br />
Por tanto, hay que crear un archivo vacío con el nombre "pa.dependencies". Luego debéis añadir todos los repos de vuestro local manifest siguiendo el formato del ejemplo.<br />
<br />
Seguramente, tu device tree venga con el archivo "cm.dependencies". En tal caso, debes borrarlo y crear el archivo desde 0, ya que no viene con la misma estructura.<br />
Al terminar guardamos y cerramos.<br />
<br />
<br />
<div>
<div style="text-align: center;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<b><span style="color: magenta;"><b><span style="color: magenta;"><b><span style="color: magenta;"><b><span style="color: magenta; font-size: x-large;">Añadir AndroidProducts.mk</span></b></span></b></span></b></span></b></div>
<span style="font-size: x-large;"><b><span style="font-size: x-large;"><span style="color: magenta;"><span style="color: magenta;"></span></span></span></b></span></div>
<span style="font-size: x-large;"><b><span style="color: magenta;"></span></b></span></div>
<span style="font-size: x-large;"></span></div>
</div>
</div>
</div>
</div>
</div>
</div>
<span style="color: magenta;"></span><br />
<div style="text-align: center;">
<div style="text-align: left;">
Otro archivo que hay que crear en la misma ruta. Seguimos el mismo procedimiento (crear archivo vacío con el nombre AndroidProducts.mk) y lo abrimos con gedit. <br />
A continuación pegamos lo siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 198px; margin: 0px; width: 567px;" wrap="VIRTUAL">#
# Copyright (C) 2012 The CyanogenMod Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/full_device.mk \
$(LOCAL_DIR)/pa_device.mk</textarea>
</div>
</div>
</div>
<div>
<br />
Ahora para hacerlo compatible para nuestro dispositivo, haz lo siguiente:<br />
<ul>
<li><b>full_device: </b>lo cambias por el nombre con el que aparezca el archivo "full.mk" en la ruta de tu dispositivo. Por defecto será "full_codename.mk", pero a veces varía.</li>
<li><b>pa_device: </b>como dije al principio, debemos cambiar todos los "device" por el codename de nuestro dispositivo.</li>
</ul>
Guardamos los cambios y cerramos.<br />
<br />
<br />
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large;">Añadir pa_device.mk</b></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Lo que debemos hacer es crear un archivo vacío y lo llamamos "pa_device.mk". Como es evidente, reemplazamos "device" por el nombre de tu dispositivo, como hemos estado haciendo siempre.</div>
<div style="text-align: left;">
Una vez creado, pegamos el siguiente contenido:</div>
</div>
</div>
<div style="text-align: left;">
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 220px; margin: 0px; width: 578px;" wrap="VIRTUAL">#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Check for target product
ifeq (pa_device,$(TARGET_PRODUCT))
# OVERLAY_TARGET adds overlay asset source
OVERLAY_TARGET := pa_resolution
# Build paprefs from sources
PREFS_FROM_SOURCE ?= false
# Include ParanoidAndroid common configuration
include vendor/pa/main.mk
# Inherit AOSP device configuration
$(call inherit-product, device/manufacturer/device/full_device.mk)
# Override AOSP build properties
PRODUCT_NAME := pa_device
PRODUCT_BRAND := Manufacturer
PRODUCT_MODEL := GT-XXXXX
PRODUCT_MANUFACTURER := Manufacturer
PRODUCT_BUILD_PROP_OVERRIDES += PRODUCT_NAME=device
BUILD_FINGERPRINT="manufacturer/device/codename:4.x.x/XXXXX/XXXXXXXXXX:user/release-keys" PRIVATE_BUILD_DESC="codename-user 4.x.x XXXXX XXXXXXXXXX release-keys"
endif</textarea>
<br />
<br />
Y para adaptarlo:<br />
<ul>
<li><b>device: </b>Como hemos venido haciendo, se reemplaza por el codename de nuestro dispositivo.</li>
<li><b>resolution: </b>Reemplazamos por la resolución del dispositivo (HDPI o XHDPI)</li>
<li><b>manufacturer: </b>Se reemplaza por el manufacturador (Samsung, LG, etc)</li>
<li><b>BUILD_FINGERPRINT: </b>Lo que debéis escribir entre las comillas que van después de este código, lo tenéis en la línea "ro.build.fingerprint" del build.prop de tu dispositivo.</li>
<li><b>PRIVATE_BUILD_DESC: </b>Lo que debéis escribir entre las comillas que van después de este código, lo tenéis en la línea "pro.build.description" del build.prop de tu dispositivo.</li>
</ul>
<br />
<div style="text-align: center;">
<b><span style="color: magenta; font-size: x-large;"><br /></span></b>
<b><span style="color: magenta; font-size: x-large;">Editar vendorsetup.sh</span></b></div>
<div style="text-align: center;">
<span style="color: magenta;"><span style="font-size: x-large;"><b><br /></b></span></span></div>
En la misma ruta (aospa/device/manufacturer/codename) abrimos el archivo "vendorsetup.sh" con gedit. Nos aparecerá una línea así:<br />
<blockquote class="tr_bq">
add_lunch_combo cm_device-userdebug</blockquote>
Simplemente cambia "cm" por "pa". Listo, guarda y sal.<br />
<br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
<b style="color: cyan; font-size: xx-large;"><br /></b>
<b style="color: cyan; font-size: xx-large;">6. Compilar la ROM:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>Este es el ansiado paso final con el que crearemos el zip flasheable para nuestro dispositivo. Para ello ejecuta en Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd aospa
</textarea>
<br />
<br /></div>
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">./rom-build.sh device
</textarea><br />
<br />
*Como es evidente, también se sustituye "device" como hemos venido haciendo*<br />
<br />
Tras ello empezará a compilar y tardará unas horas, todo depende de la potencia que tenga tu PC. Cuando termine, si todo ha ido bien, tendrás el archivo en out/target/product/device.<br />
<br />
<br />
<span style="text-align: left;"><br /></span>
<br />
<div style="color: magenta; font-size: x-large; font-weight: bold; text-align: center;">
<b>¡Listo! Ya has compilado AOSPA 4.4</b></div>
<div style="color: magenta; font-size: x-large; font-weight: bold; text-align: center;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com3tag:blogger.com,1999:blog-568035879551155991.post-75086787479990334342015-09-29T17:57:00.000+01:002015-09-29T17:57:03.048+01:00Portar MIUI v6 desde ROM¡Hola a todos! Hoy trabajaremos también con MIUI, sin embargo, no la vamos a compilar, sino que esta vez la "portaremos". La diferencia entre las dos es bastante sencilla:<div>
<ul>
<li>Portar una ROM es adaptar una ya creada para otro dispositivo al nuestro. Por ello, no usaremos "source code" ni nada parecido. </li>
<li>Compilar una ROM es construir dicha ROM para tu dispositivo a través del código fuente (source code) oficial del equipo de la ROM que vayamos a trabajar.</li>
</ul>
<div>
Decir que por todo esto, resulta mucho más fácil portar ROMs. Sin embargo, y más en las nuevas versiones Android, no siempre funciona; la mayoría de veces nos quedaremos en la animación de inicio infinitamente.</div>
<div>
En mi opinión personal es mucho mejor compilar, ya que es todo más limpio y oficial. Al compilar cogemos archivos de una ROM para otro dispositivo y los adherimos a una ROM del nuestro, así que no queda igual. </div>
<div>
Sin embargo, este proceso es útil si no lograste compilar, justo lo que me pasó a mí con MIUI, que se quedaba con bootloop al compilar con PatchROM, y con este método funcionó bien.</div>
<div>
<br /></div>
<div>
Dicho todo esto, comencemos:</div>
<div>
<br /></div>
<div>
*Este tutorial es aplicable a cualquier versión de MIUI*</div>
*Puedes usar tanto Windows como Linux para este tutorial*<br /><br /><br /><span style="font-size: large;"><b>Pre-requisitos:</b></span><br /><br />- MIUI v6 para un dispositivo que tenga un chipset igual al tuyo.<br />- ROM 4.4.4 funcional en nuestro dispositivo.<br />- <a href="http://spanish-android-developers.blogspot.com.es/2015/08/desempaquetar-kernel.html" target="_blank">Android Image Kitchen</a><br />- Editor de texto avanzado (Recomiendo Notepad++)</div>
<div>
<br /></div>
<div>
*La versión de MIUI y la ROM funcional en tu dispositivo deben tener la misma versión de Android*</div>
<div>
<br /></div>
<div>
*Ambas ROMs deben ser zip flasheables por custom recovery*</div>
<div>
<br /></div>
<div>
<br /><span style="color: cyan; font-size: xx-large;"><b>1. Preparar Entorno de Trabajo</b></span><br /><br />Lo primero que haremos será crear y organizar el directorio donde vamos a trabajar. Para ello, creamos una carpeta llamada "miui" en la ruta que prefieras.</div>
<div>
<br /></div>
<div>
Hecho esto, ahora dentro de dicha carpeta crearemos cuatro carpetas más:<br /><br /> - "PORT" (Aquí irá la MIUI a portar)<br /><br /> - "BASE" (Aquí irá la ROM de nuestro dispositivo)<br /><br /> - KitchenPORT (Android Image Kitchen para el boot.img (kernel) de PORT)<br /><br /> - KitchenBASE (Android Image Kitchen para el boot.img de BASE)<br /><br /></div>
<div>
Una vez creadas estas carpetas, ya tendremos todo organizado para empezar a portar.</div>
<div>
<br /><br /><br /><span style="color: cyan; font-size: xx-large;"><b>2. Extraer Archivos</b></span><br /><br />En este paso extraeremos los archivos de cada cosa que vayamos a utilizar.</div>
<div>
<br /></div>
<div>
Primero de todo, extraemos el Zip de MIUI en la carpeta PORT. Por lo tanto la estructura de directorio nos quedará algo así:<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<div style="text-align: center;">
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><textarea cols="40" name="textarea" rows="4" style="height: 100px; margin: 0px; width: 304px;" wrap="VIRTUAL">miui
|_PORT
|_data
|_META-INF
|_system
|_boot.img</textarea></span></div>
<div>
<br /></div>
Hacemos lo mismo con la ROM de nuestro dispositivo en BASE. Quedaría algo así:<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<br />
<div style="text-align: center;">
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><textarea cols="40" name="textarea" rows="4" style="height: 124px; margin: 0px; width: 304px;" wrap="VIRTUAL">miui
|_BASE
|_META-INF
|_recovery
|_system
|_boot.img
|_file_contexts
</textarea></span></div>
<div style="text-align: center;">
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
Ahora haremos lo propio con "Android Image Kitchen". Debemos descargarla y extraer su contenido en la carpeta KitchenPORT y KitchenBASE. Ambos directorios quedarán iguales y se verán así:<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div style="text-align: center;">
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><textarea cols="40" name="textarea" rows="4" style="height: 126px; margin: 0px; width: 304px;" wrap="VIRTUAL">miui
|_KitchenPORT
|_android_win_tools
|_authors.txt
|_cleanup.bat
|_repackimg.bat
|_unpackimg.bat
</textarea></span></div>
<div style="text-align: center;">
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div style="text-align: center;">
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><textarea cols="40" name="textarea" rows="4" style="height: 125px; margin: 0px; width: 304px;" wrap="VIRTUAL">miui
|_KitchenBASE
|_android_win_tools
|_authors.txt
|_cleanup.bat
|_repackimg.bat
|_unpackimg.bat
</textarea></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
Una vez terminado, ya habremos extraído los archivos que utilizaremos en sus carpetas correspondientes.<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<span style="color: cyan; font-size: xx-large;"><b><div>
<span style="color: cyan; font-size: xx-large;"><b><br /></b></span></div>
3. Intercambiar Archivos</b></span><div>
<b style="color: cyan; font-size: xx-large;"><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></b></div>
Es el momento del paso final, en el que realmente haremos lo "complicado". Lo que haremos será básicamente intercambiar archivos y carpetas entre la ROM base y la ROM a portar.<br /><br /><div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Carpetas</b></span></div>
<br />Primero de todo, entramos en la carpeta miui/BASE/system y eliminamos las siguientes carpetas:<br /><br /><ul>
<li>app</li>
<li>fonts</li>
<li>framework</li>
<li>media</li>
<li>priv-app (si existe)</li>
</ul>
<br />Luego copiamos dichas carpetas que hemos eliminado desde miui/PORT/system. Es decir, copiamos y pegamos esas 5 carpetas desde PORT hasta BASE.<br /><br /><br />Ahora borramos todo el contenido de la carpeta BASE/system/etc/permissions <b><span style="color: red;">excepto:</span></b> </div>
<div>
<ul>
<li>platform.xml </li>
<li>handheld_core_hardware.xml </li>
</ul>
</div>
<div>
Y como hicimos antes, intercambiamos lo borrado. Es decir, copiamos todo lo que contenga PORT/system/etc/permissions <b><span style="color: red;">excepto</span></b> los dos archivos que no borramos antes y lo pegamos en BASE/system/etc/permissions.<br /><br /><br />Lo siguiente que haremos es copiar desde PORT/system la carpeta "lib" y la pegamos en BASE/system. Nos preguntará si queremos reemplazar las carpetas, y le decimos que "NO", por lo cual, se combinarán los archivos de ambas carpetas. Repetimos el proceso con las carpetas:</div>
<div>
<ul>
<li>bin </li>
<li>etc </li>
<li>xbin</li>
</ul>
</div>
<div>
<br />Hecho esto, vamos al directorio PORT/system/lib y copiamos estos tres archivos:</div>
<div>
<ul>
<li>libandroid_runtime.so</li>
<li>libandroid_servers.so</li>
<li>libmedia_jni.so </li>
</ul>
</div>
<div>
Y los pegamos en BASE/system/lib, y ahora "SÍ" los reemplazamos.<br /><br /><br /><div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Kernel</b></span></div>
<div style="text-align: left;">
<br /></div>
<br />Ahora trabajaremos con el kernel. Copiamos los boot.img contenidos en PORT y BASE, y los pegamos en KitchenPORT y KitchenBASE respectivamente.<br /><br /><br />Arrastramos el archivo boot.img sobre el archivo "unpackimg". Se abrirá una ventana de comandos, y nos extraerá el contenido del kernel. Hacemos este proceso con cada kernel en su respectiva carpeta.<br /><br />Una vez terminado, veremos que ha extraído una carpeta llamada "ramdisk".<br />Ahora copiamos el archivo KitchenPORT/ramdisk/init.environ.rc a KitchenBASE/ramdisk y le decimos que "SÍ" reemplazamos.<br /><br />Ahora nos situamos en KitchenBASE, y ejecutamos el archivo "repackimg" (doble click). Una vez terminado el proceso, veremos un nuevo archivo llamado "image-new.img": este será el kernel modificado que usaremos.<br /></div>
<div>
Para añadir dicho kernel, lo pegamos en la carpeta BASE (la que contiene la ROM extraída). Borramos el boot.img anterior, y le cambiamos el nombre de image-new.img a boot.img. </div>
<div>
<br /></div>
<div>
Así, ya tendremos reemplazado el kernel.<br /><br /><br /><br /><div style="text-align: center;">
<span style="font-weight: bold;"><span style="color: magenta; font-size: x-large;">Build.prop</span></span></div>
<br />Y llegamos paso más sencillo. </div>
<div>
<br />Lo que haremos será abrir el archivo BASE/system/build.prop con Notepad++ y borramos todo lo que aparezca debajo de la siguiente línea (dicha no inclusive):<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div style="text-align: center;">
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">#
# ADDITIONAL_BUILD_PROPERTIES
#
</textarea></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
Ahora abrimos el "build.prop" de PORT//system/ también con Notepad. Copiamos lo que salga debajo de la línea nombrada anteriormente, y como hemos estado haciendo, intercambiamos. Es decir, pegamos todas las líneas en el "build.prop" de BASE/system.<br /><br /><br /><div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Updater-Script</b></span></div>
<div>
<br /></div>
Este es el último paso.</div>
<div>
<br /></div>
<div>
Lo que haremos será abrir el archivo BASE/META-INF/com/google/android/updater-script con Notepad.</div>
<div>
Abrimos el mismo archivo, pero el del directorio PORT/META-INF/com/google/android/.</div>
<div>
<br /></div>
<div>
Una vez abiertos los dos, intercambiamos líneas. Reemplazamos las líneas que digan lo siguiente:</div>
<div>
<br /></div>
<div>
<ul>
<li>Set_perm (también pueden aparecer como set_metadata)</li>
<li>Symlink</li>
</ul>
<div>
Es decir, quitamos esas líneas del updater-script BASE y pegamos las de PORT. Al terminar guardamos los cambios y cerramos.</div>
<div>
<br /></div>
Por último seleccionamos todo el contenido de la carpeta BASE y lo comprimimos en un archivo zip<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large;">¡Listo! </b><b style="color: magenta; font-size: x-large;">Has Portado MIUI Para Tu Dispositivo</b><br />
<b style="color: magenta; font-size: x-large;"><br /></b>
<b style="color: magenta; font-size: x-large;"><br /></b></div>
</div>
Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-568035879551155991.post-734285925132324032015-09-13T12:03:00.004+01:002015-09-13T12:03:54.807+01:00Preparar Stock ROM para PatchromEn este tutorial aprenderemos cómo preparar las Stock ROMs para compilar MIUI usando patchrom. Es un proceso bastante fácil si usamos una kitchen. El proceso que haremos será:<br />
<br />
<ul>
<li>Deodexar la ROM</li>
<li>Añadir root al kernel</li>
</ul>
<div>
Estos dos pasos son fundamentales para que Miui pueda añadir su código a la ROM. Para hacer esto, debemos haber extraído ya el stockrom.zip mediante el comando ADB con Terminal.</div>
<div>
Si te da error, o por cualquier otra razón, puedes obtener la Stock ROM por zip flashable s<a href="http://spanish-android-developers.blogspot.com.es/2015/08/hacer-stock-rom-flasheable-por-cwm.html" target="_blank">iguiendo este tutorial</a>.</div>
<div>
<br /></div>
<div>
Una vez tengamos todo esto, trabajaremos con la cocina.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b style="color: cyan; font-size: xx-large;">1. Preparar Entorno</b></div>
<div>
<br /></div>
<div>
Antes que nada debemos tener instalado el Java Development Kit (JDK). Sin embargo, recomiendo tener todo el <a href="http://spanish-android-developers.blogspot.com.es/2015/08/inicializar-entorno-para-compilar.html" target="_blank">entorno de compilación configurado</a>.</div>
<div>
Una vez lo tengamos, lo que haremos será configurar la herramienta que utilizaremos para hacer el trabajo, y será <a href="http://forum.xda-developers.com/showthread.php?t=633246" target="_blank">dsixda's kitchen</a>. Lo primero que haremos será descargar el paquete necesario <a href="https://github.com/dsixda/Android-Kitchen/tags" target="_blank">desde aquí</a>.</div>
<br />
<div>
Una vez descargado el paquete comprimido, copiamos la carpeta extraída (kitchen) al directorio "home" (por defecto al abrir el explorador de archivos). Ahora nos situaremos en ella con Terminal:<br />
<br /></div>
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd kitchen
</textarea><br />
<br />
Y abrimos su interfaz:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">./menu
</textarea>
<br />
<br />
Si cumplimos todos los pre-requisitos, debería abrirse sin problemas. Verás lo siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 259px; margin: 0px; width: 522px;" wrap="VIRTUAL">===================================================================
Android Kitchen - by dsixda (xda-developers.com)
===================================================================
Main Menu
1. Set up working folder from ROM
2. Add root permissions
3. Add BusyBox
4. Disable boot screen sounds
5. Add wireless tethering
6. Zipalign all *.apk files to optimize RAM usage
7. Change wipe status of ROM
8. Change name of ROM
9. Check update-script for errors
10. Show working folder information
Advanced Options
11 - Deodex files in your ROM
12 - Add task killer tweak for speed (stock ROM only)
13 - Add /data/app functionality
14 - Add Nano text editor + sysro/sysrw
15 - Add Bash (command shell)
16 - Add Apps2SD
17 - Add /etc/init.d scripts support (busybox run-parts)
18 - Add custom boot animation functionality
19 - Porting tools (experimental)
20 - Tools for boot image (unpack/re-pack/etc.)
21 - Unpack data.img
22 - Sign APK or ZIP file(s)
23 - Convert update-script or updater-script
24 - Miscellaneous optins / Plugin scripts
99. Build ROM from working folder
00. About/Update kitchen
0. Exit
</textarea>
<br />
<br />
Hecho esto ya habremos configurado la cocina.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>2. Añadir Soporte a tu Dispositivo</b></span><br />
<br />
Lo que haremos ahora será añadir soporte a tu dispositivo para la cocina. No es algo estrictamente vital para lo que vamos a hacer ya que podemos editar los mount points luego, pero recomiendo hacerlo y así ya lo tienes con soporte para todas las veces que la uses.<br />
<br />
La lista oficial de dispositivos soportados es la siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 164px; margin: 0px; width: 598px;" wrap="VIRTUAL">---------------------------------------------------
MediaTek MT65xx-based devices
- Discussion thread here
- MT657X devices: See this post
for details
- MT6589 devices: See this post
- IMPORTANT: You may need to define your device under the kitchen's
/tools/edify_defs folder, or it might not boot! Read the instructions in FAQ
section: 'How to Add New Devices'
---------------------------------------------------
Alphabetical list of rest of devices:
Acer Liquid
Dell Streak 7
HTC Amaze 4G
HTC Aria / Liberty
HTC Desire
HTC Desire HD / Inspire 4G
HTC Desire S
HTC Desire Z / Vision / T-Mobile G2
HTC Dream / G1
HTC Droid DNA
HTC Droid Eris
HTC Evo 3D
HTC Evo 4G
HTC Evo 4G LTE
HTC Evo View 4G (untested)
HTC Evo Shift 4G
HTC Flyer (untested)
HTC HD2
- Use NAND ROM method (Please follow this thread for details)
HTC Hero / G2 Touch
HTC Incredible
HTC Incredible 2
HTC Incredible S
HTC Legend
HTC Magic / myTouch 3G
HTC myTouch 3G Slide
HTC myTouch 4G / Glacier
HTC Nexus One
HTC One (m7 variant)
HTC One S
HTC One X
HTC One X+ (AT&T and International versions)
HTC One XL
HTC One V (including CDMA version)
HTC Rezound
HTC Sensation
HTC Tattoo / Click
HTC Thunderbolt
HTC Wildfire / Buzz
HTC Wildfire S
Huawei - Newer devices (2013+):
- Custom ROMs *not* supported, but to extract files from firmware,
please follow this thread.
Huawei Ideos X6
- Please follow this thread for details
Huawei U8100/U8110/U8120/U8150/U8160/U8180/U8650
Huawei U8220 / T-Mobile Pulse
LG Ally
LG GT540 Optimus
LG Motion 4G
- Please follow this thread for details
LG Nexus 4 (mako)
LG Optimus 2X (P990)
LG Optimus Black
- Please follow this thread for details
LG Optimus G2X (P999)
LG P500
- Please follow this thread for details
LG Shine Plus
LG Vortex
Micromax A60
Motorola Atrix (unconfirmed)
Motorola CLIQ / CLIQ XT
Motorola Droid
Motorola Droid Bionic
- Please follow this thread for details
Motorola Milestone (unconfirmed)
- You may need to remove the boot.img before building
Prestigio MultiPhone 4500 DUO
Prestigio MultiPhone PAP4500TDUO
Samsung Galaxy Ace 2 - GT-I8160(L/P)
Samsung Galaxy Mini
Samsung Galaxy Nexus (untested, 'maguro' and 'toro' versions only)
Samsung Galaxy Note
- GT-N7000 - please follow this thread for details
- SGH-I717 - Please follow this thread for details
Samsung Galaxy Note 2
- Supported for:
-- Sprint variants - SPH-L900 - Please follow this guide
-- T-Mobile variants - SGH-T889(V) - Please follow this guide
-- Verizon variants - SCH-I605
(unconfirmed - see this equivalent guide)
-- International variants - GT-N7100/N7105(T)/N7108
(unconfirmed - see this equivalent guide)
-- AT&T/Rogers/Bell/Telus variants - SGH-I317(M)
(unconfirmed - see this equivalent guide)
-- US Cellular variants - SCH-R950
(unconfirmed - see this equivalent guide)
Samsung Galaxy R GT-I9103
Samsung Galaxy S (GT-I9000 and most variants)
- Please follow this thread for details
Samsung Galaxy S Plus (GT-I9001)
- Please follow this thread for details
Samsung Galaxy S2
- Supported for:
-- GT-I9100 and Exynos CPU variants - Please follow this thread for details
-- Qualcomm/LTE variants
(AT&T Skyrocket, Rogers, Telus, T-Mobile, Bell HD LTE SGH-I757M,
Telstra GT-I9210T)
- Please follow this thread for details
Samsung Galaxy S3
- Supported for:
-- T-Mobile/Mobilicity/Wind variants: SGH-T999(V) - Click here for a guide
-- AT&T/Rogers/Bell/Telus variants: SGH-I747(M) - Click here for a guide
-- Verizon variants: SCH-I535, SCH-R530U - Click here for a guide
-- Sprint variants: SPH-L710, SCH-L710 - Click here for a guide
-- International variants: GT-I9300(T) - Click here for a guide
-- International LTE variants: GT-I9305(T) - Click here for a guide
-- Korean variants: SHV-E210K/L/S and SHW-M440S (unconfirmed)
Samsung Galaxy S4
- NOTE: Kitchen only supports creating ROMs from stock firmware
or importing ROMs made only with kitchen!
- Supported for:
-- AT&T variant (SGH-I337)
-- Bell/Telus/Rogers variant (SGH-I337M)
-- T-Mobile variant (SGH-M919)
-- Wind/Mobilicity variants (SGH-M919V) - untested
-- International non-LTE variant (GT-I9500) - untested
-- International LTE variant (GT-I9505) - untested
-- Other American variants (SCH-R970, SPH-L720, SCH-I545) - untested
Samsung Galaxy W (GT-I8150)
- Please follow this thread for details
Samsung Nexus S / Nexus S 4G
Sony Ericsson Xperia 2010 devices (X10 / X10 Mini / X10 Mini Pro)
- Can only build ROM without boot.img (please follow this thread for details)
Sony Xperia 2011-12 devices, specifically:
- TX, P, U, Sola
- Active, Arc, Arc S, Mini, Mini Pro, Neo, Neo V, Neo L,
Play, Ray (follow steps below):
- Can only build ROM without boot.img
- If using stock FTF for kitchen:
1) Unzip FTF file, extract the system.sin
2) Dump system image from system.sin w/ Flashtool
(Advanced-> SIN Editor)
3) Rename dumped file to system.img
- OR If using Nandroid backups: Rename system.yaffs2.img to system.img
- Use this system.img in kitchen's original_update folder
- WARNING - If using a ROM made from system.sin (not Nandroid), it
is recommended to flash from the temporary (fastboot) Clockwork
Recovery, rather than the regular Clockwork Recovery, otherwise
device may not boot (possibly because custom recovery files in
system folder are not added to ROM? e.g. recovery.tar).
ZTE Blade / Orange San Francisco
</textarea>
<br />
<br />
Si tu dispositivo no se encuentra en esa lista, habrá que hacer lo siguiente:<br />
<br />
Nos dirijimos a la carpeta kitchen/tools/edify_defs y creamos un archivo vacío que lleve de nombre el "codename" de nuestro dispositivo. (El codename lo puedes ver en la línea ro.product.device del build.prop de tu dispositivo)<br />
Una vez creado, tendremos que obtener los mount points de nuestro dispositivo. Para ello habrá que desempaquetar el "recovery.img" de tu dispositivo, y abrir el archivo "recovery.fstab" que estará en la carpeta ramdisk. Puedes hacer ese proceso de desempaquetado con la misma dsxida's kitchen o con <a href="http://spanish-android-developers.blogspot.com.es/2015/08/desempaquetar-kernel.html" target="_blank">este tutorial</a>.<br />
<br />
Cuando tengamos localizados los puntos de montaje, abriremos el archivo vacío que creamos y habrá que especificarle a la cocina en ese archivo cuáles son los mount points de nuestro dispositivo. Para ello abre otro archivo de tools/edify_defs de un dispositivo del mismo manufacturador que el tuyo y sigue el mismo esquema en tu archivo. Una vez hecho, guarda los cambios y cierra.<br />
<br />
Con esto ya habrás dado soporte a la cocina. Sigamos:<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>4. Modificar la Stock ROM</b></span><br />
<br />
Una vez hayamos configurado correctamente la cocina, editaremos el zip de la Stock ROM. Para ello, lo primero que haremos será copiar el archivo comprimido de la ROM en la carpeta "/kitchen/original_update".<br />
<br />
Una vez copiado, iremos al Terminal con la cocina abierta, y teclearemos el número 1 (Set up working folder from ROM) y le damos a enter. Esto inicializará la carpeta dónde trabajará la cocina.<br />
<br />
Ahora realizaremos las dos modificaciones necesarias.<br />
<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Deodexar ROM</b></span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Para deodexar la ROM (quitar archivos .odex) debemos seleccionar la opción número 11 de la cocina, y le damos a enter. Al finalizar el proceso ya habremos hecho este vital paso para Miui.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Añadir Kernel Root</b></span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Para añadir el root al kernel, ejecutaremos la opción número 2 para añadir acceso root, y seguidamente tecleamos "s" y le damos a enter de nuevo. Cuando termine le damos a enter y la cocina volverá al menú principal.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Hecho esto ya tendremos lista la ROM. Ahora, para convertirla a formato zip, teclea la opción 99 (Build ROM from working folder) y cuando te diga que tipo de guía durante la instalación, elige la interactiva.</div>
La interfaz te irá guiando durante el proceso, y lee con atención todo lo que te vaya preguntando, pero no deberá haber ningún tipo de problema.<br />
Al terminar encontrarás el archivo en la carpeta "OUTPUT_ZIP" dentro de "/kitchen". Lo siguiente será llamarlo "stockrom.zip" y reemplazarlo por el antiguo zip de la carpeta "patchrom/codename".<br />
<br />
*Si se ha creado en patchrom/codename una carpeta "stockrom", deberás reemplazar el boot.img por el que tiene la ROM obtenida de la cocina, así como la carpeta "system".<br />
<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>¡Listo! Sigue Compilando Miui</b></span></div>
<div style="text-align: left;">
<br /></div>
<br />
<br />Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com0tag:blogger.com,1999:blog-568035879551155991.post-83278304995657952962015-09-09T17:21:00.000+01:002015-09-09T17:34:17.322+01:00Solucionar Rejects en MIUI (Failed Hunks)¡Muy buenas a todos! Hoy estoy muy emocionado ya que he conseguido aprender y solucionar los rejects que impiden compilar MIUI usando patchrom. Me siento orgulloso de hacer un gran post explicándolo todo detalladamente, ya que por Internet no hay casi información.<br />
<br />
Os explicaré teoría y el proceso para parchear manualmente, así aprendemos más todos ;-)<br />
Dicho esto, empecemos:<br />
<br />
<div style="text-align: center;">
-------------------------------------------------------------------------------------------------------</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Una vez llegado el momento de usar la herramienta de parchear los framework para añadirle el código de MIUI (make firstpatch) saldrán en Terminal un montón de líneas que dirán: HUNK SUCCEEDED. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Eso significa que se ha aplicado el parche correctamente. Sin embargo, en numerosas ocasiones veremos líneas que dirán lo siguiente:</div>
<div style="text-align: left;">
<br /></div>
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 431px;" wrap="VIRTUAL">Hunk #1 FAILED at 111.
1 out of 1 hunks FAILED -- saving rejects to file android.services.jar.out/PhoneWindowManager.smali.rej
</textarea>
<br />
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Eso significa que no se ha podido aplicar el parche, y se ha guardado el registro del error en un archivo ".smali.rej" en la carpeta patchrom/codename/temp/reject.<br />
<br />
Decir que MIUI decompila los apk y los archivos jar del framework de nuestro dispositivo para añadirle su código. Esto lo hace usando el lenguaje "smali", que así resumido está "antes" que el formato JAVA. No hay mucha información sobre ello, aunque no es relevante para saber solucionar los rejects. Si quieres tienes más información <a href="http://www.quora.com/What-is-smali-in-Android" target="_blank">aquí</a>.<br />
<br />
Pues una vez haya terminado el proceso "make firstpatch" lo primero que tendremos que hacer es dirigirnos a la carpeta "reject". Dentro de ella, encontraremos las siguientes carpetas:<br />
<br />
<ul>
<li>android.policy.jar.out</li>
<li>services.jar.out </li>
<li>framework.jar.out</li>
<li>framework2.jar.out</li>
<li>telephony-common.jar.out</li>
</ul>
<div>
Estos son los nombres de los archivos decompilados de nuestro dispositivo (lógicamente solo es un nombre de carpeta añadiendo la terminación .out). </div>
<div>
Entonces abrimos por ejemplo "android.policy.jar.out" y seguimos abriendo todas las carpetas que son aparezcan hasta encontrar un archivo ".smali.rej"</div>
<div>
<br /></div>
<div>
Una vez encontrado, buscaremos el archivo base. Este se encontrará en la carpeta raíz de tu dispositivo. En este caso, estará en "patchrom/codename/android.policy.jar.out/smali/" y luego seguirá la misma ruta que el reject.</div>
<div>
Es decir, si el reject está en:<br />
<blockquote class="tr_bq">
patchrom/codename/temp/reject/android.policy.jar.out/smali/com/android/internal/policy/impl</blockquote>
Entonces el archivo a editar estará en:<br />
<blockquote class="tr_bq">
patchrom/codename/android.policy.jar.out/smali/com/android/internal/policy/impl</blockquote>
Los dos archivos deben llamarse exactamente igual, exceptuando que el reject tendrá la extensión ".rej" añadida.<br />
<br />
Una vez ubicado el reject y el archivo base, abriremos los dos con Gedit (o el editor de texto que prefieras).<br />
Nos fijamos en el reject; nos encontraremos con algo así:<br />
<br /></div>
<textarea cols="40" name="textarea" rows="4" style="height: 508px; margin: 0px; width: 651px;" wrap="VIRTUAL">*** PhoneWindowManager.smali 2015-09-09 11:46:13.541852561 -0300
--- PhoneWindowManager.smali 2015-09-09 11:47:07.349851413 -0300
***************
*** 393,404 ****
.field private mPowerKeyTriggered:Z
! .field private final mPowerLongPress:Ljava/lang/Runnable;
.field mPowerManager:Landroid/os/PowerManager;
.field mPreloadedRecentApps:Z
.field mRecentAppsDialog:Lcom/android/internal/policy/impl/RecentApplicationsDialog;
.field mRecentAppsDialogHeldModifiers:I
--- 395,408 ----
.field private mPowerKeyTriggered:Z
! .field private mPowerLongPress:Ljava/lang/Runnable;
.field mPowerManager:Landroid/os/PowerManager;
.field mPreloadedRecentApps:Z
+ .field private final mQuickBootLock:Ljava/lang/Object;
+
.field mRecentAppsDialog:Lcom/android/internal/policy/impl/RecentApplicationsDialog;
.field mRecentAppsDialogHeldModifiers:I</textarea>
<br />
<br />
<br />
Explico la terminología:<br />
<br />
<ul>
<li><b>*** XX,XX***</b> : esto indica las líneas dónde el parche esperaba que se encontraran las líneas que aparecen debajo. Es decir, que deberían haber estado entre la línea XX y la XX.</li>
<li><b>--- XX,XX--- : </b>esto indica las líneas dónde quedarían las líneas una vez aplicado el parche.</li>
</ul>
<div>
Sin embargo, nos olvidamos de las líneas dónde deberían estar o no, y nos centramos en lo siguiente:</div>
<div>
<ul>
<li>Lo que aparece debajo de los asteriscos es cómo aparecen antes de parchear.</li>
<li>Lo que aparece debajo de los guiones es cómo aparecerán una vez aplicado el parche.</li>
</ul>
<div>
Y claro, nosotros estamos aquí porque no se pudo aplicar el parche, por lo que debemos aplicarlo nosotros manualmente.</div>
</div>
<br />
Para ello, hay que saber la simbología:<br />
<br />
<ul>
<li><b>+</b> significa que esa línea ha sido añadida por el parche.</li>
<li><b>- </b>significa que esa línea ha sido eliminada por el parche. </li>
<li><b>!</b> significa que esa línea ha sido modificada por el parche.</li>
</ul>
<div>
Sabido esto, vamos a arreglar ese reject...Voy a solucionar el reject del ejemplo, luego tú harás lo correspondiente al tuyo. Primero de todo, nos fijamos en el source input (asteriscos):<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 217px; margin: 0px; width: 654px;" wrap="VIRTUAL">*** 393,404 ****
.field private mPowerKeyTriggered:Z
! .field private final mPowerLongPress:Ljava/lang/Runnable;
.field mPowerManager:Landroid/os/PowerManager;
.field mPreloadedRecentApps:Z
.field mRecentAppsDialog:Lcom/android/internal/policy/impl/RecentApplicationsDialog;
.field mRecentAppsDialogHeldModifiers:I
</textarea>
<br />
<br />
Con esto sabemos que así es como aparecen esas líneas en el archivo base. Entonces nos dirigimos al archivo base y buscamos esas líneas. Estarán unas 200 líneas arriba o abajo de como indica el reject. En este caso, estarán cerca de la línea 400 y pico.<br />
<br />
*Atención: las líneas pueden aparecer con algunos valores diferentes a los que dice el source input del reject, es normal. También pueden aparecer en distinto orden, etc.*<br />
<br />
Una vez encontradas las líneas, veremos lo siguiente<br />
<br /></div>
<textarea cols="40" name="textarea" rows="4" style="height: 283px; margin: 0px; width: 570px;" wrap="VIRTUAL">.field private mPowerKeyTriggered:Z
.field private final mPowerLongPress:Ljava/lang/Runnable;
.field mPowerManager:Landroid/os/PowerManager;
.field mPreloadedRecentApps:Z
.field private mPressOnAppSwitchBehavior:I
.field private mPressOnAssistBehavior:I
.field private mPressOnMenuBehavior:I
.field private final mQuickBootLock:Ljava/lang/Object;
.field private final mQuickBootPowerLongPress:Ljava/lang/Runnable;
</textarea><br />
<br />
Como veis, algunas están en otro orden y otras directamente no están. Entonces nos fijamos ahora en el "after patch" (guiones):<br />
<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 244px; margin: 0px; width: 649px;" wrap="VIRTUAL">--- 395,408 ----
.field private mPowerKeyTriggered:Z
! .field private mPowerLongPress:Ljava/lang/Runnable;
.field mPowerManager:Landroid/os/PowerManager;
.field mPreloadedRecentApps:Z
+ .field private final mQuickBootLock:Ljava/lang/Object;
+
.field mRecentAppsDialog:Lcom/android/internal/policy/impl/RecentApplicationsDialog;
.field mRecentAppsDialogHeldModifiers:I
</textarea>
<br />
<br />
<br />
Entonces sabemos que:<br />
<br />
<ul>
<li> La línea ".field private final mPowerLongPress:Ljava/lang/Runnable;" que aparece en el source input es editada. Lo sabemos porque lleva la exclamación (!) delante. Al mirar el "after patch" vemos que tendrá que verse así: ".field private mPowerLongPress:Ljava/lang/Runnable;".</li>
<li>Vemos que en el "after patch" se indica que hay que agregar la línea ".field private final mQuickBootLock:Ljava/lang/Object;" ya que tiene delante el signo más (+).</li>
</ul>
<div>
Entonces lo que haríamos sería editar una línea como indica el "after patch" y agregar otra. Las adiciones (+) se copian tal cual están en el reject.</div>
<div>
<br /></div>
<div>
Sin embargo hay que tener en cuenta una cosa, y es que los archivos están parcialmente parcheados. Por ello, no tendrás que hacer todo lo que el reject dice. Por ejemplo, si te fijas, la adición que el reject indica que tengo que hacer ya está aplicada en el archivo base.<br />
Entonces debes fijarte siempre y asegurarte de que la línea ya está añadida/removida.</div>
<div>
<br /></div>
<div>
Entonces, para solucionar este reject solo tendré que editar una línea. Una vez hecho, la parte a editar del archivo base quedará así:</div>
<div>
<br /></div>
<div>
<textarea cols="40" name="textarea" rows="4" style="height: 274px; margin: 0px; width: 554px;" wrap="VIRTUAL">.field private mPowerKeyTriggered:Z
.field private mPowerLongPress:Ljava/lang/Runnable;
.field mPowerManager:Landroid/os/PowerManager;
.field mPreloadedRecentApps:Z
.field private mPressOnAppSwitchBehavior:I
.field private mPressOnAssistBehavior:I
.field private mPressOnMenuBehavior:I
.field private final mQuickBootLock:Ljava/lang/Object;
.field private final mQuickBootPowerLongPress:Ljava/lang/Runnable;
</textarea>
</div>
<br />
Y ahora solo tocará guardar los cambios, salir, y pasar al siguiente reject para seguir aplicando parches y parches.<br />
<br />
Decir que en un reject encontrarás más de una caja de modificación. Con caja de modificación me refiero al conjunto del "source input" y el "after patch". Es decir, te podrás encontrar esto:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 332px; margin: 0px; width: 657px;" wrap="VIRTUAL">*** PhoneWindowManager.smali 2015-09-09 11:46:13.541852561 -0300
--- PhoneWindowManager.smali 2015-09-09 11:47:07.349851413 -0300
***************
*** 393,404 ****
.field private mPowerKeyTriggered:Z
! .field private final mPowerLongPress:Ljava/lang/Runnable;
.field mPowerManager:Landroid/os/PowerManager;
.field mPreloadedRecentApps:Z
.field mRecentAppsDialog:Lcom/android/internal/policy/impl/RecentApplicationsDialog;
.field mRecentAppsDialogHeldModifiers:I
--- 395,408 ----
.field private mPowerKeyTriggered:Z
! .field private mPowerLongPress:Ljava/lang/Runnable;
.field mPowerManager:Landroid/os/PowerManager;
.field mPreloadedRecentApps:Z
+ .field private final mQuickBootLock:Ljava/lang/Object;
+
.field mRecentAppsDialog:Lcom/android/internal/policy/impl/RecentApplicationsDialog;
.field mRecentAppsDialogHeldModifiers:I
***************
*** 11952,11957 ****
if-eqz v12, :cond_19
invoke-interface {v11}, Lcom/android/internal/telephony/ITelephony;->endCall()Z
:try_end_5
.catch Landroid/os/RemoteException; {:try_start_5 .. :try_end_5} :catch_2
--- 12006,12013 ----
if-eqz v12, :cond_19
+ if-eqz p3, :cond_19
+
invoke-interface {v11}, Lcom/android/internal/telephony/ITelephony;->endCall()Z
:try_end_5
.catch Landroid/os/RemoteException; {:try_start_5 .. :try_end_5} :catch_2
</textarea>
<br />
<br />
<br />
Entonces haríamos cada uno por separado. El primero ya lo hice yo, entonces pasaríamos al segundo:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 266px; margin: 0px; width: 664px;" wrap="VIRTUAL">*** 11952,11957 ****
if-eqz v12, :cond_19
invoke-interface {v11}, Lcom/android/internal/telephony/ITelephony;->endCall()Z
:try_end_5
.catch Landroid/os/RemoteException; {:try_start_5 .. :try_end_5} :catch_2
--- 12006,12013 ----
if-eqz v12, :cond_19
+ if-eqz p3, :cond_19
+
invoke-interface {v11}, Lcom/android/internal/telephony/ITelephony;->endCall()Z
:try_end_5
.catch Landroid/os/RemoteException; {:try_start_5 .. :try_end_5} :catch_2
</textarea>
<br />
<br />
Pero ya te tocará hacerlo a ti ;-) Hasta aquí el tutorial sobre solucionar los rejects. Suerte a todos y cualquier pregunta en comentarios.<br />
<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>¡Listo! Has Aprendido a Solucionar Rejects</b></span></div>
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b><br /></b></span></div>
<br />
<br /></div>
Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com1tag:blogger.com,1999:blog-568035879551155991.post-81982539115799505292015-09-09T10:48:00.002+01:002016-08-02T20:21:53.146+01:00Compilar TWRP desde SourceMuy buenas a todos! Hoy no aprenderemos a compilar una ROM, sino un custom recovery: TeamWinRecoveryProject. Es vital tener un recovery alternativo para poder instalar ROMs, Tweaks, etc. Para mí este recovery es mucho mejor que CWM, sin embargo, para compilarlo hace falta tener un Device Tree para nuestro dispositivo.<br />
Empecemos:<br />
<br />
<br />
<span style="font-size: large;"><b>Pre-requisitos:</b></span><br />
<span style="font-size: large;"><b><br /></b></span>
* Device Tree de CM (>10.0) para tu dispositivo (Buscad en GitHub)<br />
* Local_Manifest para tu dispositivo (recomendado)<br />
* <a href="http://spanish-android-developers.blogspot.com.es/2015/08/inicializar-entorno-para-compilar.html" target="_blank">Entorno de Compilación Configurado</a><br />
<br />
<br />
Se recomienda usar el Device Tree de OmniROM para tu dispositivo ya que vendrá con el código de TWRP añadido. Sin embargo, también se puede usar CyanogenMod 10.0-11 (y 12 con un parche).<br />
Puedes usar las sources de OmniROM sin tener compilada OmniROM para tu dispositivo, sin embargo, deberás hacer unos cambios extras. Por ello, usaré como ejemplo las sources de CyanogenMod en este tutorial.<br />
<br />
El único paso que te ahorras usando OmniROM es el de reemplazar una carpeta, así que poca cosa.<br />
Por ello, recomiendo usar las sources de la ROM que tengas para tu dispositivo, y sincronizar con la misma branch. Es decir, haremos todo como si fueras a compilar una ROM.<br />
<br />
Entonces queda claro que necesitas tener CyanogenMod funcionando en tu dispositivo y tener las sources ubicadas. Dicho esto empecemos con el tutorial:<br />
<br />
<span style="color: cyan; font-size: x-large;"><b>1. Crear Directorio de Trabajo</b></span><br />
<br />
El primer paso será crear la carpeta en la que tendremos todo los archivos y en la que se trabajará. La podéis llamar como queráis, pero yo recomiendo llamarla por el nombre de lo que vayamos a compilar. Para crear la carpeta hacemos lo siguiente con Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">mkdir twrp
</textarea>
<br />
<br />
Ahora se habrá creado una carpeta en el directorio Home. La podéis ver si abrís el explorador de archivos. Ahora, vamos a situarnos en esa carpeta con Terminal. Para ello:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd twrp
</textarea><br />
<br />
Con esto ya habremos creado la carpeta de trabajo y nos habremos situado en ella en Terminal.<br />
<br />
<br />
<span style="color: cyan; font-size: x-large;"><b>2. Descargar las Sources</b></span><br />
<br />
En este paso inicializaremos los archivos de código abierto de lo que vayamos a compilar. En este tutorial usaré como ejemplo las sources CyanogenMod 11 (si tu dispositivo tiene solo CM12 u otra, pues sincroniza con la branch correspondiente), y sincronizaremos a nuestra carpeta de trabajo. Para este paso es necesario el binario repo que ya instalamos al inicializar el entorno de trabajo.<br />
Estando situados en la carpeta "twrp", ejecutamos el siguiente comando:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 504px;" wrap="VIRTUAL">repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0
</textarea>
<br />
<br />
Puede que el terminal os dé algún error y os pida ejecutar algún comando para instalar archivos necesarios. En ese caso, copia lo que te diga el Terminal que ejecutes, y cuando termine vuelve a ejecutar el comando de arriba.<br />
Si todo ha ido bien, se iniciará tu repositorio local usando las sources de CM11. Para asegurarse de que se ha descargado, vete a la carpeta omni con el explorador de archivos, y pulsa Ctrl+h y deberá aparecer una carpeta llamada ".repo"<br />
Al finalizar la descarga, Terminal dirá que tienes que registrarte con una cuenta de GitHub. Id a su <a href="https://github.com/" target="_blank">página oficial</a> y os creáis una cuenta. Una vez creada y comprobada por correo, volver a Terminal y ejecutáis estos dos comandos por separado:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 418px;" wrap="VIRTUAL">git config --global user.email "tu@correo.com"
git config --global user.name "Tu Nombre"</textarea><br />
*Reemplaza "tu@correo.com" y "Tu Nombre" por los que hayas usado al crear la cuenta. Ojo, sin las comillas pero con el espacio después de "user.email" y "user.name" respectivamente*<br />
<br />
Una vez registrado recomiendo ejecutar otra vez el comando de descarga de sources y veréis que os aparecerá que estáis identificados al terminar el proceso. Por otro lado, cuando el Terminal os pida si queréis visualización de colores en vuestra cuenta (Enable colour display) escribe una N y le dais a enter.<br />
<br />
Hecho esto ya tendremos nuestra carpeta de trabajo lista para obtener las sources.<br />
<br />
<br />
<b style="color: cyan; font-size: xx-large;">3. Sincronizar Repositorio:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>Este es el paso más pesado para todo el mundo, ya que descargaremos las sources y pesa entre 10-15GB aproximadamente. Es muy recomendado tener una velocidad de Internet elevada si no quieres morir de aburrimiento. En caso de que quieras aburrirte, ejecuta lo siguiente en Terminal:<br />
<br />
*Atención, debemos estar situados en la carpeta twrp. Si has seguido los pasos tal cual sin cerrar el Terminal, estarás situado en ella (lo veréis donde dice ~/twrp~$ al principio de la línea). Si no, sitúate ejecutando "cd && cd twrp".*<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">repo sync -j#</textarea><br />
El # indica el número de trabajos que se usarán para descargar los archivos. Depende de tu velocidad de Internet cuánto ponerle. Yo recomiendo usar de 2 a 4. Por lo tanto, si usas dos el comando quedaría así: repo sync -j2<br />
<br />
Tras ejecutar el comando empezará la descarga, y llevará unas cuantas horas, así que podéis ir a tomaros algo o salir a caminar, que es saludable. Cuando termine la sincronización, ya tendremos las sources en nuestra carpeta de trabajo.<br />
<br />
<span style="color: cyan; font-size: x-large;"><b><br /></b></span>
<span style="color: cyan; font-size: x-large;"><b>4. Descargar Device Tree</b></span><br />
<br />
Ahora descargaremos las sources de nuestro dispositivo mediante el uso del local manifest. Si ya tienes CyanogenMod en tu dispositivo, seguramente el desarrollador haya publicado el local manifest.<br />
<br />
*Un truco para ver los repos que usó el desarrollador si no ha publicado el local manifest, es abrir el archivo "cm.dependencies" del device tree*<br />
<br />
Si no, hazlo tú mismo. No voy a ponerme a explicarlo de nuevo ya que lo tienes explicado <a href="http://spanish-android-developers.blogspot.com.es/2015/08/local-manifest-genericos.html" target="_blank">aquí</a>, y en los tutoriales de compilar CynaogenMod y OmniROM la información de dónde se coloca.<br />
<br />
Decir que para compilar TWRP no necesitaremos repositorios como el Hardware FM y demás, pero recomiendo sincronizar todos los que tenga el local_manifest.<br />
<br />
Una vez colocado el local manifest, sincronizaremos usando el comando "repo sync" de nuevo.<br />
<br />
<b>Hasta aquí es todo el proceso como si fuéramos a compilar CyanogenMod.</b><br />
<br />
<br />
<div>
<b style="color: cyan; font-size: xx-large;">5. Añadir Código TWRP</b></div>
<div style="text-align: center;">
<br /></div>
Hasta ahora todo había sido muy fácil. Pero ahora llega lo complicado. Hay que editar archivos, pero es difícil saber qué añadir.<br />
<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Bootable Recovery</b></span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Este es un paso necesario si estamos usando las sources de CyanogenMod. Lo que debemos hacer es ir a <a href="https://github.com/omnirom/android_bootable_recovery" target="_blank">esta página</a>. Seleccionamos la branch más actualizada.</div>
<div style="text-align: left;">
*Da igual que sea 5.1 si nuestro dispositivo es 4.4 o lo que sea. Elegimos la última ya que con ella viene la última versión de TWRP*</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Entonces vamos a la izquierda de la página de le damos a "download zip". Una vez descargado, lo descomprimimos pegamos en la carpeta twrp/bootable/recovery (ojo, borra todo lo que contenga esa carpeta antes de pegar lo descargado).</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Una vez pegado ya habremos reemplazado las sources de recovery de CM por las de OmniROM, que traen el código de TWRP. <b>Si usamos las sources de OmniROM, no hace falta este paso.</b></div>
<div>
<br />
<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Recovery.te</b></span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b>Este paso solo será necesario si estamos usando las sources de CyanogenMod 12</b>. Aplicaremos un parche. </div>
<div style="text-align: left;">
Para ello habrá que ir a la ruta twrp/external/sepolicy y abrimos con Gedit un archivo llamado "recovery.te".</div>
<div style="text-align: left;">
Buscamos la línea que diga "recovery_only(`" y justo debajo escribimos lo siguiente:</div>
<div style="text-align: left;">
<br /></div>
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL"> permissive recovery;
</textarea>
<br />
<div style="text-align: left;">
*Atención: hay que dejar dos espacios de margen. Que coincida con el principio de la siguiente línea. Quedaría <a href="http://review.cyanogenmod.org/#/c/89474/1/recovery.te" target="_blank">así</a> (el ejemplo de la derecha)*<br />
<br />
<br /></div>
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Adaptar Source OmniROM</b></span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b>Este paso solo es necesario si usas las sources de OmniROM</b> y tu dispositivo no tiene dicha ROM compilada, es decir, estás usando el device tree de CyanogenMod para tu dispositivo.</div>
<div style="text-align: left;">
Para hacerlo, sigue el paso 5 del <a href="http://spanish-android-developers.blogspot.com.es/2015/08/compilar-omnirom-44-desde-source.html" target="_blank">tutorial para compilar OmniROM</a></div>
<div style="text-align: left;">
Si lo haces, recomiendo que al acabar de compilar TWRP, hagas también OmniROM para tu dispositivo, ya que lo tendrás todo listo para ello ;-)</div>
<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Device.mk</b></span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Ahora haremos una ligera modificación en el archivo device.mk. Está en la ruta twrp/device/marca/codename y aparece con el nombre "codename.mk". Mi dispositivo se llama "loganreltexx", por lo que el archivo me saldrá como "loganreltexx.mk".</div>
<div style="text-align: left;">
Abrimos el archivo y escribimos lo siguiente:</div>
<div style="text-align: left;">
<br /></div>
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 482px;" wrap="VIRTUAL">PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/recovery/twrp.fstab:recovery/root/etc/twrp.fstab
</textarea>
<br />
<br />
Esto hará que se copie el archivo twrp.fstab que crearemos más adelante en este tutorial en la ruta /etc al iniciar en modo TWRP.<br />
<div style="text-align: left;">
<br /></div>
</div>
<span style="color: magenta; font-size: x-large;"></span><br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Editar BoardConfig.mk</b></span></div>
<span style="color: magenta; font-size: x-large;"></span><br />
<div style="text-align: center;">
<br /></div>
<div>
Esta parte es la más complicada. Primero de todo vete a twrp/device/marca/codename y abre el archivo BoardConfig.mk con Gedit.<br />
Busca una línea (Ctrl+f) llamada TARGET_RECOVERY_INITRC. Si aparece, después del igual (=) estará escrita una ruta a un archivo "init.recovery.rc". Id a esa ruta (suele estar en rootdir dentro de twrp/device/marca/codename) y abre el archivo. Al principio verás lo siguiente:<br />
<span style="color: magenta;"><span style="font-size: x-large;"><span style="font-size: small;"><span style="color: black;"><br /></span></span></span></span> <textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">on init
export PATH /sbin</textarea><br />
<br />
Añade debajo la siguiente línea:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">export LD_LIBRARY_PATH .:/sbin</textarea><br />
<br />
Y debería quedar así:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">on init
export PATH /sbin
export LD_LIBRARY_PATH .:/sbin</textarea><br />
<br />
Guarda los cambios y sal. Sigamos trabajando:</div>
<div>
<br /></div>
<div>
<span class="pl-c">Ahora llega lo complicado. Hay que añadir líneas (flags) de TWRP. Cuesta un poco saber qué líneas añadir. </span><br />
<span class="pl-c"><br /></span>
<span class="pl-c">Lo que haremos será ir al final del archivo BoardConfig y escribiremos la siguiente etiqueta: #TWRP</span><br />
<span class="pl-c"><br /></span>
<span class="pl-c">Hecho esto añadiremos las flags. Son las siguientes:</span><br />
<span class="pl-c"><br /></span>
<br />
<ul>
<li><b>DEVICE_RESOLUTION := </b>~indica la resolución de nuestro dispositivo. Debes elegir entre las dimensiones que veas en la carpeta twrp/bootable/recovery/gui/devices. Si no hay exacta para tu dispositivo, coge la que más se aproxime (siempre por debajo).</li>
<li><b>TARGET_RECOVERY_FSTAB :=</b> ~indica la ruta del archivo twrp.fstab que crearemos posteriormente. Recomiendo que la ruta sea device/marca/codename/recovery/twrp.fstab.</li>
<li><b>BOARD_HAS_NO_REAL_SDCARD := true </b>~elimina funciones como "particionar SD". También ahorra espacio; útil si TWRP no ajusta en tu partición de recovery (por espacio). Recomiendo usar esta flag.</li>
<li><b>TW_INTERNAL_STORAGE_PATH := "/data/media" ~</b>indica la ruta de almacenamiento de medios (almacenamiento interno). La ruta puede variar y ser "/data/media/0" o diferente. Busca en tu dispositivo con un explorador root la ruta data/media y asegúrate. Sabrás que estás en la ruta correcta porque contendrá los archivos de memoria interna del teléfono (es la ruta equivalente a /mnt/sdcard).</li>
<li><b>TW_INTERNAL_STORAGE_MOUNT_POINT := "data" </b>~nombre del punto de montaje de la partición indicada con la flag anterior. En el 99% de los casos es "data", pero mira el recovery.fstab de tu dispositivo para estar seguro de que nombre le dan.</li>
<li><b>TW_EXTERNAL_STORAGE_PATH := "/external_sd" </b>~lo mismo que con data/media, pero aplicado a la SD Externa. Asegura la ruta.</li>
<li><b>TW_EXTERNAL_STORAGE_MOUNT_POINT := "external_sd" </b> ~lo mismo que con data, pero aplicado a la SD Externa. Asegura el nombre.</li>
</ul>
<div>
<br /></div>
<ul>
<li><b>TW_NO_REBOOT_RECOVERY := true</b> ~indica si queremos la opción "Reiniciar Recovery" al usar TWRP. Escribimos la línea si no queremos esa opción de reinicio.</li>
<li><b>TW_NO_REBOOT_BOOTLOADER := true</b> ~lo mismo que la línea anterior, pero con bootloader. Si tu dispositivo no tiene bootloader, debes escribir la línea.</li>
<li><b>TW_NO_USB_STORAGE := true</b> ~indica si queremos la opción de almacenamiento USB. Si tu dispositivo no tiene soporte de almacenamiento USB, escribiremos la línea.</li>
<li><b>TW_NEVER_UNMOUNT_SYSTEM := true</b> ~indica que nunca se desmontará la partición de sistema. Esta flag se necesita en algunos dispositivos Motorola.</li>
<li><b>RECOVERY_SDCARD_ON_DATA := true ~</b>habilita el correcto manejo de data/media para los dispositivos que usen ese directorio como almacenamiento. Esta flag se usa para la mayoría de dispositivos con Android Honeycomb y aquellos con ICS de fábrica.</li>
<li><b>TW_HAS_DOWNLOAD_MODE := true </b>~indica si nuestro dispositivo tiene modo download (descarga). Todos los Samsung tienen esta función.</li>
<li><b>TW_NO_BATT_PERCENT := true </b>~elimina la función de mostrar porcentaje de batería al usar TWRP. Útil si tu dispositivo no lo soporta correctamente.</li>
<li><b>RECOVERY_GRAPHICS_USE_LINELENGTH := true </b>~arregla gráficos de aspecto rasgado en algunos dispositivos. No sabrás si usarlo hasta probar TWRP por primera vez.</li>
</ul>
</div>
<div>
<span class="pl-c">Hay algunas flags más, pero he puesto las que veo más importantes y las que entiendo. He separado las que para mí son básicas y de uso obligatorio arriba. Puedes ver más flags <a href="http://forum.xda-developers.com/showthread.php?t=1943625" target="_blank">aquí</a> o buscando en Google; no voy a buscar todas las flags que hay.</span></div>
<div>
<span class="pl-c"><br /></span>
<span class="pl-c">Aquí tenéis un ejemplo de las líneas que añadí para mi dispositivo:</span></div>
<div>
<span class="pl-c"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbce-MCXIW6mJRZ4wShGA284hqOPgLRmU9RIP3goNNrF5VzUeWW8N3-S_Mg_9rAbGiBTmUAZVFiaaWF6iy7xzrbiibaGoyvczTLPhK6mg8FVafIUi68NvgvPfFLvz7yebc1_ctWmfBkphe/s1600/Screenshot+from+2015-08-14+17%253A47%253A24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbce-MCXIW6mJRZ4wShGA284hqOPgLRmU9RIP3goNNrF5VzUeWW8N3-S_Mg_9rAbGiBTmUAZVFiaaWF6iy7xzrbiibaGoyvczTLPhK6mg8FVafIUi68NvgvPfFLvz7yebc1_ctWmfBkphe/s640/Screenshot+from+2015-08-14+17%253A47%253A24.png" width="640" /></a></div>
<div>
<span class="pl-c"><br /></span></div>
<div>
<span class="pl-c"> También puedes buscar dispositivos similares al tuyo con OmniROM o TWRP y mirad el BoardConfig de su device tree.</span></div>
<div>
<span class="pl-c"><a href="http://tipsstrips.blogspot.com.es/2015/02/compile-twrp-for-any-android.html" target="_blank">Aquí</a> tienes el ejemplo más básico de flags usadas.</span><br />
<br /></div>
<div>
<span class="pl-c">Hechos los cambios, guarda y cierra.</span></div>
<div>
<br /></div>
<span style="color: magenta;"></span><br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Recovery.fstab</b></span></div>
<span style="color: magenta;"></span><br />
<div style="text-align: center;">
<br /></div>
<div>
Para esto lo más sencillo es coger y en twrp/device/marca/codename creamos una carpeta llamada "recovery". Dentro, creamos un archivo llamado twrp.fstab.</div>
<div>
Ahora abrimos el archivo, y primero que todo escribiremos los mount points de nuestro dispositivo. Los tenéis en la carpeta rootdir que tuvimos que visitar en un paso anterior, en el archivo llamado fstab. Son las líneas que digan algo así como "dev/block/..."</div>
<div>
Pues habrá que copiarlas a twrp.fstab, pero con orden diferente. Aqúi podréis ver la diferencia de formato:</div>
<div>
<br /></div>
<div>
- <a href="https://github.com/kostoulhs/android_device_samsung_loganreltexx/blob/twrp/rootdir/fstab.qcom">fstab.qcom</a></div>
<div>
- <a href="https://github.com/kostoulhs/android_device_samsung_loganreltexx/blob/twrp/recovery/twrp.fstab" target="_blank">twrp.fstab</a></div>
<div>
<br /></div>
<div>
*Atención, os habréis fijado que en el fstab.qcom salen menos mount points que en el de twrp, eso es porque en ese archivo no salen todos. Puedes ver los demás en el archivo recovery.fstab que está al <a href="http://spanish-android-developers.blogspot.com.es/2015/08/desempaquetar-kernel.html" target="_blank">desempaquetar un recovery</a> (recovery.img) para tu dispositivo (es muy fácil)*</div>
<div>
<br /></div>
<div>
Como veis primero pondremos el nombre de la partición, luego el formato, y luego la ruta. Cuando lo tengas tocará añadir flags. ¡Ojo! No escribas las flags que aparecen en el "fstab.qcom". </div>
<div>
<br />
Las flags se añaden al final de cada línea de montaje (depués de <b>flags=</b>). Las flags solo afectan a la línea en la que estén, es decir, haremos flags para cada línea. Las separamos de la ruta de montaje mediante espacios. Si usamos varias flags en un misma línea, las debemos separar con punto y coma (;).<br />
<br />
Un ejemplo del formato es este:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 430px;" wrap="VIRTUAL">flags=display="Micro SDcard";storage;wipeingui;removable
</textarea>
<br />
<br />
Aquí dejo las flags disponibles para usar:<br />
<br />
<ul>
<li><b>removable </b> ~ literalmente: indica que la partición puede no estar presente en la prevención de errores de montaje mostrados durante el arranque. No sé explicarlo, pero esta flag la añadimos en external_sd y en usbstorage (también USB-OTG, depende del dispositivo). </li>
<li><b>storage </b> ~indica que la partición se puede usar como almacenamiento, lo que la habilitará para usarla para almacenar backups, etc. Sobra decir que esta se usa en external_sd y usbstorage (también USB-OTG).</li>
<li><b>backup=1 </b> ~indica que dicha partición puede estar listada en la opción backup/restore. Si en vez de 1 ponemos 0, indicará que no queremos que aparezca.</li>
<li><b>wipeingui </b>~hace que dicha partición aparezca en el menú de wipes en el menú de TWRP. Se añade en external_sd (también puedes añadirla en usbstorage).</li>
<li><b>display= </b>~indica el nombre con el que aparecerá la partición en los menús de TWRP. El nombre hay que ponerlo entre comillas, por ejemplo, "Micro SDcard".</li>
<li><b>length= </b>~solo se aplica a data. Detrás del igual se escribe un número. El número que debes poner está en el fstab.qcom (suele ser 16384)</li>
<li><b>subpartitionof= </b>~lo usamos cuando hay subparticiones. En el ejemplo que puse de twrp.fstab se usa, ya que hay varias particiones efs. Saber cuándo usarla en fácil si miras el ejemplo.</li>
</ul>
<br />
Esas serían todas. Hay algunas más, pero por lo que he visto, estas son las que se usan. En algunas he dicho donde se usan, pero ten en cuenta que para tu dispositivo puede variar, o puedes hacerlo como tu quieras en algunas, pero ten cuidado, no hagas ninguna locura ;-)<br />
Por ello, recomiendo siempre mirar el de algún dispositivo similar al tuyo para ver cómo lo ha hecho.<br />
<br /></div>
<div>
Una vez terminado, guarda cambios y cierra<br />
<br />
*Recomiendo crear el archivo twrp.fstab en esa carpeta (twrp/device/marca/codename/recovery) porque así ya coincide con la flag del BoardConfig.mk y con la línea añadida al device.mk. Si creaste el archivo en otra carpeta, edita la ruta en esos dos archivos*</div>
<div>
<br /></div>
<div>
Hecho todo esto, habremos añadido el código TWRP y estaremos listos para compilar el recovery.<br />
<br />
<br />
<b style="color: cyan; font-size: xx-large;">6. Compilar el Recovery:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>Este es el ansiado paso final con el que crearemos el custom recovery para nuestro dispositivo. Para ello ejecuta en Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd twrp
*Si ya estás situado no hace flata*</textarea><br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">. build/envsetup.sh</textarea><br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">lunch</textarea><br />
Ahora localiza tu dispositivo (saldrá algo como cm_codename-userdebug, u omni_codename-userdebug; depende de qué source hayas usado) por su codename, que en mi caso sería loganreltexx (saldría así cm_loganreltexx-userdebug) y miramos el número que tiene. Lo escribimos y le damos enter. Luego para compilar hay varias opciones:<br />
<br />
<b>1) Comando Común:</b><br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">make clean && make -j# recoveryimage</textarea><br />
Sustituimos la almohadilla (#) por el número de procesadores que tenga nuestra PC +1. Es decir, si es un dual-core ejecutaremos con -j3. Tras ello empezará a compilar el archivo "img" del recovery.<br />
<br />
<br />
<b>2) Para Zip Flasheable:</b><br />
<br />
Por otro lado, si en vez del archivo ".img" quieres hacerlo por zip flasheable, ejecutaremos el siguiente comando:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">make clean && make -j# recoveryzip
</textarea>
<br />
Hacemos lo mismo con la almohadilla.Tras este comando se habrá creado un archivo zip que instalaremos por modo recovery para tener TWRP.<br />
<br />
<br />
<b>3) Para algunos Samsung:</b><br />
<br />
Y por otro lado más, si tu dispositivo es un Samsung que incluye el recovery en el kernel (boot.img) y no en su propia partición, deberás ejecutar el siguiente comando.<br />
<br />
*Sabrás si tu dispositivo no tiene partición propia si al mirar el recovery.fstab no aparece partición recovery*<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">make -j# bootimage
</textarea><br />
Hacemos lo mismo con la almohadilla. Al terminar se habrá creado un archivo ".img" que será el kernel con el TWRP incluido.<br />
<br />
<div style="text-align: center;">
---------------------------------------------------------------------------------------------</div>
<br />
La compilación en cualquiera de las variantes tardará unos veinte minutos, todo depende de la potencia que tenga tu PC. Cuando termine, si todo ha ido bien, tendrás el archivo en out/target/product/codename. En mi caso estaría en out/target/product/loganreltexx.<br />
<br />
<br />
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large; text-align: left;">¡Listo! Ya has compilado TWRP</b></div>
<br />
<br /></div>
Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com4tag:blogger.com,1999:blog-568035879551155991.post-31880649657785749912015-09-07T16:22:00.005+01:002015-09-13T12:09:12.724+01:00Compilar MIUI v6 desde SourceMuy buenas a todos! Hoy vamos a trabajar con una ROM distinta a las demás ya que usa un sistema diferente para ser compilada: patchrom.<br />
Al usar este sistema no necesitaremos un Device Tree, ya que extraeremos los archivos necesarios para compilar desde nuestro propio dispositivo usando ADB.<br />
Puede resultarte más fácil o difícil este método. En mi opinión, es bastante denso el trabajo que hay que hacer, y os recomiendo saber qué cosas tenéis del entorno de compilación y cuáles no antes de comenzar.<br />
<br />
*Este tutorial también es aplicable a Miui v7*<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>1. Preparar Entorno de Compilación</b></span><br />
<br />
Lo primero será preparar todo lo necesario para portar Miui a nuestro dispositivo. Habrá que instalar varias cosas que a lo mejor algunas ya tendréis instaladas; os recomiendo borrarlas y configurarlas desde cero.<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Java 7 OpenJKD</b></span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Evidentemente, esta no hará falta que la borres si ya la tienes. Si no, la instalamos así:</div>
<div style="text-align: left;">
<br /></div>
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 333px;" wrap="VIRTUAL">sudo apt-get update
sudo apt-get install openjdk-7-jdk
</textarea><br />
<br />
Si tienes instalada otra versión de Java, cambiamos a usar el JDK7 por deecto con este comando:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">sudo update-alternatives --config java
sudo update-alternatives --config javac
</textarea>
<br />
<br />
Ejecutamos cada comando por separado, y cuando aparezca la pantalla de selección, escribimos el número que corresponda a JDK7 y damos a enter.<br />
<br />
Te preguntarás cómo es que usamos Java 7 si es para compilar KiKat. Yo la primera vez que fui a compilar tenía Java 6, y en un paso del proceso de compilación me dio un error. Tuve la corazonada de instalar Java 7 y el problema desapareció.<br />
<br />
Hecho esto ya tendremos la versión de Java más adecuada para trabajar en esta ROM.<br />
<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Android-SDK // ADB & Fastboot</b></span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Si has hecho el <a href="http://spanish-android-developers.blogspot.com.es/2015/08/como-hacer-un-logcat.html" target="_blank">tutorial de tomar LogCat</a> ya lo tendrás, así como el ADB y Fastboot. Recomiendo borrarlas y empezar de cero. Para configurarlo haremos lo siguiente:</div>
<div style="text-align: left;">
<br /></div>
Descargamos el archivo comprimido de su <a href="https://developer.android.com/sdk/index.html#top" target="_blank">página oficial</a>. Estará en la carpeta "Downloads"<br />
*Para descargarlo vete al final de la página donde dice "SDK Tools Only" y elige la versión para Linux.<br />
<br />
Una vez descargado lo descomprimimos y copiamos la carpeta "android-sdk-linux" y la pegamos en el directorio "home" en una carpeta nueva con el nombre "android".<br />
<br />
Entonces instalamos unos paquetes de compatibilidad necesarios:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 68px; margin: 0px; width: 511px;" wrap="VIRTUAL">sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libncurses5:i386 libstdc++6:i386 zlib1g:i386
</textarea>
<br />
<br />
Una vez ejecutados los tres comandos, abrimos el mánager de SDK:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 66px; margin: 0px; width: 329px;" wrap="VIRTUAL">android/android-sdk-linux/tools/android
</textarea>
<br />
<br />
Se abrirá una interfaz. Entonces elegiremos instalar todos los paquetes que aparezcan debajo del paquete "Tools" y aceptamos.<br />
<span style="background-color: white; font-family: 'Times New Roman', Times, FreeSerif, serif; font-size: 14.8500003814697px; line-height: 20.7900009155273px;">Una vez descargado dirígete al directorio "home" con el explorador de archivos. Presiona Ctrl+h (mostrar archivos ocultos) e identifica el archivo ".bashrc" (si no existe lo creamos). A continuación lo abrimos y pegamos lo siguiente:</span><br />
<span style="background-color: white; font-family: 'Times New Roman', Times, FreeSerif, serif; font-size: 14.8500003814697px; line-height: 20.7900009155273px;"><br /></span>
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 480px;" wrap="VIRTUAL">export PATH=$PATH:~/android/android-sdk-linux
export PATH=$PATH:~/android/android-sdk-linux/platform-tools
export PATH=$PATH:~/android/android-sdk-linux/tools
</textarea>
<br />
<br />
Guardamos y salimos. Ahora instalamos ADB & Fastboot:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 476px;" wrap="VIRTUAL">sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install android-tools-adb android-tools-fastboot
</textarea>
<br />
<br />
Y con esto ya habremos instalado las herramientas necesarias para compilar esta ROM.<br />
<br />
*ADB lo configuraremos posteriormente*<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>2. Crear Directorio de Trabajo</b></span><br />
<br />
Ahora crearemos la carpeta donde descargaremos las sources de Miui. Para ello ejecutamos en Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">mkdir patchrom
</textarea>
<br />
<br />
Con ello crearemos la carpeta de trabajo. Ahora nos situamos en ella:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd patchrom
</textarea>
<br />
<br />
Con esto ya habremos creado la carpeta de trabajo y nos habremos situado en ella en Terminal.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>3. Descargar las Sources</b></span><br />
<br />
En este paso inicializaremos los archivos de código abierto de la ROM que vayamos a compilar, en este caso Miui v6, y las sincronizaremos a nuestra carpeta de trabajo. Para este paso es necesario el binario repo que ya instalamos al inicializar el entorno de trabajo.<br />
Estando situados en la carpeta "patchrom", ejecutamos el siguiente comando:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 66px; margin: 0px; width: 448px;" wrap="VIRTUAL">repo init -u git://github.com/MiCode/patchrom.git -b miui-6
</textarea>
<br />
<br />
Si todo ha ido bien, se iniciará tu repositorio local usando las sources de MIUI v6. Para asegurarse de que se ha descargado, vete a la carpeta patchrom con el explorador de archivos, y pulsa Ctrl+h y deberá aparecer una carpeta llamada ".repo"<br />
Al finalizar la descarga, Terminal dirá que tienes que registrarte con una cuenta de GitHub. Id a su página oficial y os creáis una cuenta. Una vez creada y comprobada por correo, volver a Terminal y ejecutáis estos dos comandos por separado:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 356px;" wrap="VIRTUAL">git config --global user.email "tu@correo.com"
git config --global user.name "Tu Nombre"
</textarea><br />
*Reemplaza "tu@correo.com" y "Tu Nombre" por los que hayas usado al crear la cuenta. Ojo, sin las comillas pero con el espacio después de "user.email" y "user.name" respectivamente*<br />
<br />
Una vez registrado recomiendo ejecutar otra vez el comando de descarga de sources y veréis que os aparecerá que estáis identificados al terminar el proceso. Por otro lado, cuando el Terminal os pida si queréis visualización de colores en vuestra cuenta (Enable colour display) escribe una N y le dais a enter.<br />
<br />
Hecho esto ya tendremos nuestra carpeta de trabajo lista para obtener las sources de la ROM con la que vamos a trabajar.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>4. Sincronizar Repositorio</b></span><br />
<br />
Como sabéis, en este paso se descargarán todos los archivos necesarios del repositorio de la ROM con la que vayamos a trabajar. Lo bueno de Miui es que sus sources pesan menos de la mitad que las de otras ROMs, por lo que no tardará más de dos horas en sincronizar.<br />
Para sincronizar los repositorios ejecutamos (Estando situados en "patchrom" con Terminal"):<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">repo sync -j#
</textarea>
<br />
<br />
El # indica el número de trabajos que se usarán para descargar los archivos. Depende de tu velocidad de Internet cuánto ponerle. Yo recomiendo usar de 2 a 4. Por lo tanto, si usas dos el comando quedaría así: repo sync -j2<br />
<br />
Tras ejecutar el comando empezará la descarga. Cuando termine la sincronización, ya tendremos las sources en nuestra carpeta de trabajo.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>5. Preparar Dispositivo </b></span><br />
<br />
En esta parte lo que haremos será preparar nuestro dispositivo (móvil, tablet) para que el PC extraiga los archivos necesarios para compilar Miui. Lo primero de todo será saber qué condiciones debe tener nuestro dispositivo:<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Recovery-ROM</b></span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Lo primero será aclarar dos conceptos: ROM y Recovery-ROM. Cuando nos referimos a "Recovery-ROM", hablamos sobre una ROM que es flashebale (que se instala) mediante el modo recovery de tu dispositivo (CWM/TWRP). Es un archivo comprimido (zip) que contiene todos los archivos de sistema que serán instalados.</div>
<div style="text-align: left;">
Y por otro lado, una ROM es aquel archivo que se instala en tu dispositivo para actualizar el sistema, y su método de instalación varía. Por ejemplo, las Stock ROMs de los Samsung vienen en formato ".tar" y se instalan por medio de un programa de ordenador llamado "Odin".</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Teniendo esto claro, hay que saber que al compilar Miui se creará una Recovery-ROM, por lo que sobra decir que tu dispositivo necesita acceso a modo recovery, además de tener instalado un Custom Recovery como ClockWorkMod o TeamWinRecoveryProject.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Elegir una ROM Adecuada</b></span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Como he dicho, para compilar Miui tendremos que extraer los archivos necesarios desde nuestro dispositivo. Por ello, necesitamos tener instalada una ROM adecuada para la versión de Miui que vayamos a compilar. Para elegir bien tu ROM base, debes tener en cuenta la siguiente:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
</div>
<ul>
<li>Versión de Android: Si vamos a compilar Miui v6 (Android KitKat), deberemos estar en una ROM que tenga Android 4.4.x. Es decir, debemos estar en la misma versión Android que vayamos a compilar, o con diferencia mínima.</li>
</ul>
<ul>
<li>ROM: Se recomienda estar usando la Stock ROM (la que viene por defecto) ya que es la más estable. Sin embargo, se puede usar CyanogenMod u otra ROM, recomendando que sea estable. En mi caso, usaré CyanogenMod 11 de base ya que en mi Ace 3 la Stock ROM trae Android 4.2.2.</li>
</ul>
<ul>
<li>Root: Debemos tener rooteado el dispositivo. Hay dos tipos de root: privilegio root y kernel root. El primero es mediante una app (Superuser) que maneja el acceso root. El segundo, es root que viene por defecto en el kernel; este tipo de root es más recomendable. Por ejemplo, CyanogenMod ya trae root en el kernel; mientras que si usas OmniRom (por ejemplo) la deberás rootear.</li>
</ul>
<ul>
<li>Recovery: Como dije antes, necesitas que tu dispositivo tenga acceso a un custom recovery.</li>
</ul>
<div>
Si cumplimos todos los requisitos, estaremos listos para el siguiente paso.</div>
<div>
<br /></div>
<div>
*Recomendación: Usad siempre que podáis CyanogenMod de base. Si usáis por ejemplo una Stock ROM tendréis que seguir antes <a href="http://spanish-android-developers.blogspot.com/2015/09/preparar-stock-rom-para-patchrom.html" target="_blank">este tutorial</a>*<br />
<br /></div>
<div>
*CONSEJO: Recomiendo que para cuando vayamos a extraer los archivos, tengamos la ROM que usaremos de base recién instalada y limpia.*</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<span style="color: cyan; font-size: xx-large;"><b>6. Crear ROM Base</b></span></div>
<div>
<br /></div>
<div>
Si miras dentro de la carpeta "patchrom" verás varias carpetas, y una de ellas se llama "nexus5". Esa carpeta contiene los archivos necesarios para compilar Miui v6 para el Nexus 5. Pues en este paso, crearemos la misma carpeta pero para nuestro dispositivo. Para ello haremos en Terminal:</div>
<div>
<br /></div>
<div>
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">. build/envsetup.sh
</textarea>
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">mkdir codename
</textarea><br />
*Sustituimos "codename" por el correspondiente a nuestro dispositivo. Recuerdo que lo podemos ver en la línea "ro.product.name" en el Build.prop de tu dispositivo*<br />
<br />
Creada la carpeta nos situamos en ella:<br />
<br /></div>
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd codename
</textarea><br />
<br />
Ahora iniciaremos una herramienta que generará automáticamente una recovery-ROM desde nuestro dispositivo. Te preguntarás por qué debemos hacer este paso si ya hemos encontrado una recovery-ROM para nuestro dispositivo y es adecuada para compilar. Hay dos razones:<br />
<br />
<ul>
<li>La mayoría de Stock ROMs no vienen en formato recovery-ROM, así que si actualmente estás en una Stock, tendrás que usar esta herramienta.</li>
<li>Usar esta función es vital para generar automáticamente la Miui recovery-ROM y su versión OTA, que hace a Miui tan especial.</li>
</ul>
<div>
Para que el programa extraiga los archivos, deberemos asegurarnos de configurar bien el Android Debug Bridge (ADB). Para ello:<br />
<br />
Primero ejecutaremos un comando en Terminal para que el PC reconozca los dispositivos conectados:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">lsusb
</textarea>
<br />
Verás algo así:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 96px; margin: 0px; width: 472px;" wrap="VIRTUAL">Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 098:ID 04e8:685e Samsung Electronics Co.,Ltd
</textarea><br />
<br />
Ahora deberás identificar tu dispositivo. En mi caso, será el último que aparece. Tendremos que quedarnos con los dos códigos que aparecen después de ID (04e8 y 685e) ya que son los identificadores del vendor y product para tu dispositivo.<br />
Ahora ejecutaremos lo siguiente el Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 343px;" wrap="VIRTUAL">sudo gedit /etc/udev/rules.d/99-android.rules
</textarea><br />
<br />
Se abrirá un archivo de texto. Añadiremos la siguiente línea:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 501px;" wrap="VIRTUAL">SUBSYSTEMS=”usb”, ATTRS{idVendor}=”04e8”,ATTRS{idProduct}=”685e”,
MODE=”0666” , OWNER=”current_user”
</textarea>
<br />
*Es una sola línea; no me cabe entera*<br />
<br />
Sustituimos los ID por los correspondientes a tu dispositivo. Guardamos los cambios y cerramos. Seguidamente ejecuta en Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 379px;" wrap="VIRTUAL">sudo chmod +x /etc/udev/rules.d/99-android.rules
</textarea>
<br />
Y luego:<br />
<br /></div>
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">sudo restart udev
</textarea><br />
<br />
Y reconectamos nuestro dispositivo. Asegúrate de que tiene habilitada la opción "Depuración USB" en ajustes del teléfono.<br />
<br />
Ahora reiniciaremos nuestro dispositivo en modo recovery. Puedes hacerlo manualmente o con este comando:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">adb reboot recovery
</textarea>
<br />
<br />
Ahora nos dirigimos al directorio de trabajo con Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd patchrom
</textarea>
<br />
<br />
Y ejecutamos la herramienta de extracción de archivos:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 348px;" wrap="VIRTUAL">./tools/releasetools/ota_target_from_phone -r
</textarea>
<br />
*Si ese comando no funciona prueba con "../tools/releasetools/ota_target_from_phone -r"*<br />
<br />
Al terminar se habrá creado un "stockrom.zip" y un directorio "metadata" en la carpeta de nuestro dispositivo, que serán usadas para compilar Miui v6. Ya habremos creado la ROM base.<br />
<br />
*Si usáis una ROM que ya esté en formato zip, puedes saltarte este paso de extraer la ROM desde el dispositivo Entonces tienes que extraer la carpeta "system" y el "boot.img" del zip de la ROM que vayas a usar de base, y lo copias en la ruta /patchrom/codename/stockrom (creamos la carpeta). Luego sigue con los pasos de abajo*<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>7. Compilar ROM</b></span><br />
<br />
Llegamos al "último" paso de este tutorial. Lo primero que haremos será crear un "makefile" que especificará varios parámetros necesarios para compilar.<br />
Podrás encontrar el archivo en la carpeta "nexus5" dentro de patchrom. Cópialo en la carpeta de tu dispositivo, ábrelo con Gedit y borra todo lo que aparezca (es mejor hacerlo de cero).<br />
La estructura que seguiremos para ese archivo será la siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 406px; margin: 0px; width: 648px;" wrap="VIRTUAL">#
# Makefile for codename
#
# The original zip file, MUST be specified by each product
local-zip-file := stockrom.zip
# The output zip file of MIUI rom, the default is porting_miui.zip if not specified
local-out-zip-file := MIUI_codename.zip
# All apps from original ZIP, but has smali files chanded
local-modified-apps :=
local-modified-jars :=
# All apks from MIUI
local-miui-removed-apps :=
local-miui-modified-apps :=
local-phone-apps :=
local-phone-priv-apps :=
local-density :=
# To include the local targets before and after zip the final ZIP file,
# and the local-targets should:
# (1) be defined after including porting.mk if using any global variable(see porting.mk)
# (2) the name should be leaded with local- to prevent any conflict with global targets
local-pre-zip := local-zip-misc
local-after-zip:=
# The local targets after the zip file is generated, could include 'zip2sd' to
# deliver the zip file to phone, or to customize other actions
include $(PORT_BUILD)/porting.mk
# To define any local-target
local-zip-misc:
</textarea>
<br />
<br />
<br />
Para adaptarlo a nuestro dispositivo lo primero que haremos será cambiar "codename" por el correspondiente a nuestro dispositivo.<br />
Luego habrá que añadir valores a los parámetros. Significan lo siguiente:<br />
<br />
<ul>
<li>local-zip-file: nombre del zip extraído como rom base. Si no has editado el nombre, será "stockrom.zip"</li>
</ul>
<ul>
<li>local-out-zip-file: nombre que tendrá el archivo zip al terminar de compilar la ROM. Recomiendo dejarlo como aparece arriba cambiando el codename.</li>
</ul>
<ul>
<li>local-modified-apps: aquí especificamos las apps de la ROM original que hayamos modificado. Si no has modificado ninguna, la dejamos en blanco.</li>
</ul>
<ul>
<li>local-modified-jars: lo mismo que la línea de arriba, pero con archivos ".jar" en vez de ".apk"</li>
</ul>
<ul>
<li>local-miui-removed-apps: especificamos apps de Miui que no queramos incluir en la ROM final porque no son compatibles. Recomiendo dejarlo la primera vez en blanco, y al haber compilado ya la ROM e instalarla, sabrás qué apps poner porque darán forzar cierre.</li>
</ul>
<ul>
<li>local-miui-modified-apps: todas las apps de Miui aparecén listadas en el archivo patchrom/build/miuiapps.mk. Si hemos modificado alguna, la especificamos.</li>
</ul>
<ul>
<li>local-phone-apps: esta variable define qué apps de la ROM base queremos mantener en la ROM final. Por ejemplo, si la cámara nativa de Miui da forzar cierre, la ponemos en miui-removed-apps y añadiríamos en esta línea la cámara de la ROM base.</li>
</ul>
<ul>
<li>local-phone-priv-apps: lo mismo que la línea de arriba, pero con aquellas apps que en la ROM base estuvieran en system/priv-app y no en system/app.</li>
</ul>
<ul>
<li>local-density: la densidad/resolución de tu pantalla (MDPI. HDPI, XHDPI, o XXHDPI)</li>
</ul>
<ul>
<li>local-pre-zip: define la inclusión de local-zip-misc. Es decir, deja la línea como en el ejemplo.</li>
</ul>
<ul>
<li>local-after-zip: lo dejamos en blanco (o no la ponemos). Tampoco sé para qué sirve.</li>
</ul>
<ul>
<li>local-zip-misc: este comando te permite definir modificaciones locales a incluir en la build. Por ejemplo, incluir apps de Google o un build.prop modificado. En mi caso la he dejado en blanco.</li>
</ul>
Para mi Galaxy Ace 3 (loganreltexx) hice un makefile así:<br />
<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 141px; margin: 0px; width: 648px;" wrap="VIRTUAL">#
# Makefile for loganreltexx
#
# The original zip file, MUST be specified by each product
local-zip-file := stockrom.zip
# The output zip file of MIUI rom, the default is porting_miui.zip if not specified
local-out-zip-file := MIUI_loganreltexx.zip
# All apps from original ZIP, but has smali files chanded
local-modified-apps :=
local-modified-jars :=
# All apks from MIUI
local-miui-removed-apps :=
local-miui-modified-apps :=
local-phone-apps :=
local-phone-priv-apps :=
local-density := HDPI
# To include the local targets before and after zip the final ZIP file,
# and the local-targets should:
# (1) be defined after including porting.mk if using any global variable(see porting.mk)
# (2) the name should be leaded with local- to prevent any conflict with global targets
local-pre-zip := local-zip-misc
local-after-zip:=
# The local targets after the zip file is generated, could include 'zip2sd' to
# deliver the zip file to phone, or to customize other actions
include $(PORT_BUILD)/porting.mk
# To define any local-target
local-zip-misc:
</textarea><br />
<br />
*Como he dicho, necesitarás probar la ROM primero para saber qué incluir en varias de las líneas*<br />
*Recomiendo la primera vez dejar las líneas de apps a incluir y eliminar en blanco, y así al probar la build veremos qué apps no funcionan, cuáles faltan, etc*<br />
<br />
<br />
Una vez creado el archivo y guardado, habremos hecho una parte complicada del trabajo. Ahora ejecutamos lo siguiente en Terminal:<br />
*Debemos estar situados en la carpeta "patchrom/codename"*<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">make workspace
</textarea>
<br />
<br />
Al finalizar habrá extraído framework/android.policy/services.jar y framework-res.apk del stockrom.zip y los habrá desmontado.<br />
A continuación usaremos este comando:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">make firstpatch
</textarea>
<br />
<br />
<br />
*Si en algún momento mientras el Terminal parchea te encuentras con esto:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 478px;" wrap="VIRTUAL">Reversed (or previously applied) patch detected! Assume -R? [n]
</textarea><br />
Solo debes escribir una "y" (sin las comillas) y darle a enter*<br />
<br />
<br />
Con esto lo que haremos será transformar el código de nuestra ROM base a código de Miui.<br />
Hay tres directorios de código smali involucrados:<br />
<br />
<ul>
<li>old framework.jar.out</li>
<li>new framework.jar.out</li>
<li>target framework.jar.out</li>
</ul>
<div>
En principio, el "old framework" será el framework.jar desmontado que se compila desde el código fuente lanzado por Google. El "new framework" será el framework.jar desmontado que se compila desde el código fuente de MIUI. Y por último, el "target framework" será el framework.jar desmontado de nuestro dispositivo que ya está preparado cuando hicimos "make workspace".</div>
<div>
<br /></div>
<blockquote class="tr_bq">
Con el fin de facilitar este proceso , tratamos de hacer cambios mínimos en el código fuente de Google . Puedes ver estos cambios al comparar miui/src y android/src. Sin embargo, a menuda habrán conflictos al aplicar los parches.</blockquote>
<br />
Al ejecutar el comando "make firstpatch" se habrán creado 5 sub-carpetas temporales. Serán los siguientes:<br />
<br />
<ul>
<li>old_smali : el código smali del "old framework" con la .línea eliminada.</li>
<li>new_smali : . el código smali del "new framework" con la .línea eliminada.</li>
<li>dst_smali_orig : . el código smali del "target framewrok" con la .línea eliminada.</li>
<li>dst_smali_patched : el código smali después de aplicar el parche al "target framework" con la línea eliminada.</li>
<li>reject : el parche rechazado. Utilizaremos este directorio para resolver los posibles conflictos.</li>
</ul>
<div>
*Recomendación: en principio no hagas nada en reject. Si al compilar la ROM funciona, perfecto. Si no compila, ya nos meteríamos a aplicar los parches*<br />
<br />
<b>Para solucionar los rejects, <a href="http://spanish-android-developers.blogspot.com/2015/09/solucionar-rejects-en-miui-failed-hunks.html" target="_blank">sigue este tutorial aparte</a>.</b><br />
<br />
Y por último de todo, compilamos la ROM final Miui v6:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">make fullota
</textarea>
<br />
<br />
Seguramente tendrás errores al compilar. Intentaré publicar todos los que encuentre, pero siéntete libre de comentar tu problema y trataré de ayudar.<br />
Al terminar, tendrás un archivo zip en el directorio patchrom/out con el nombre que le hayas dado al archivo en el makefile.<br />
<br />
Ahora solo tendrás que instalar por CWM/TWRP. Si no arranca, <a href="http://spanish-android-developers.blogspot.com.es/2015/08/como-hacer-un-logcat.html" target="_blank">haz LogCat</a> y así podrás ver qué falla y lo podrás solucionar con parches.<br />
<br />
<br />
<div style="text-align: center;">
<b style="color: magenta; font-size: xx-large; text-align: left;">¡Listo! Has Compilado MIUI v6</b></div>
<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>8. Errores al Compilar</b></span><br />
<br />
Como dije, agrego aquí la solución a los errores que te puedes encontrar al hacer "make fullota":<br />
<br />
<br /></div>
<div>
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Error con Reject</b></span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Puede que a la hora de compilar te encuentres con algo así:</div>
</div>
<div style="text-align: center;">
<br /></div>
<textarea cols="40" name="textarea" rows="4" style="height: 232px; margin: 0px; width: 659px;" wrap="VIRTUAL">out/telephony-common/smali/com/android/internal/telephony/gsm/GSMPhone.smali[3447,4] Invalid register: v16. Must be between v0 and v15, inclusive.
Exception in thread "main" brut.androlib.AndrolibException: Could not smali file: com/android/internal/telephony/gsm/GSMPhone.smali
at brut.androlib.src.SmaliBuilder.buildFile(SmaliBuilder.java:71)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:55)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:41)
at brut.androlib.Androlib.buildSourcesSmali(Androlib.java:354)
at brut.androlib.Androlib.buildSources(Androlib.java:294)
at brut.androlib.Androlib.build(Androlib.java:280)
at brut.androlib.Androlib.build(Androlib.java:255)
at brut.apktool.Main.cmdBuild(Main.java:225)
at brut.apktool.Main.main(Main.java:84)
make: *** [out/telephony-common.jar] Error 1
</textarea><br />
<br />
Este error se debe a que has parcheado mal un reject. Debes ir al archivo que indica el Terminal, en este caso sería el archivo GSMPhone.smali que se encuentra en telephony-common.jar.<br />
Una vez abierto el archivo, localizamos su correspondiente reject y corregimos el parche aplicado.<br />
<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Error de Values</b></span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Un error muy común, cuya solución es realmente simple, pero complicada de averiguar si no la conoces. En Terminal obtendrás un error así:</div>
<div style="text-align: left;">
<br /></div>
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 262px; margin: 0px; width: 661px;" wrap="VIRTUAL">using prebuilt boot.img...
Traceback (most recent call last):
File "/home/develop/patchrom/tools/releasetools/ota_from_target_files", line 884, in <module>
main(sys.argv[1:])
File "/home/develop/patchrom/tools/releasetools/ota_from_target_files", line 852, in main
WriteFullOTAPackage(input_zip, output_zip)
File "/home/develop/patchrom/tools/releasetools/ota_from_target_files", line 432, in WriteFullOTAPackage
Item.GetMetadata(input_zip)
File "/home/develop/patchrom/tools/releasetools/ota_from_target_files", line 163, in GetMetadata
name, uid, gid, mode = columns[:4]
ValueError: need more than 2 values to unpack
make: *** [fullota] Error 1
</textarea>
<br />
<br />
Para solucionarlo, debemos ir a la carpeta "metadata" dentro del directorio raíz de nuestro dispositivo (patchrom/codename/metadata) y abrir un archivo llamado "filesystem_config.txt".<br />
<br />
Dentro de él encontraremos una gran variedad de líneas. Lo que hay que hacer es borrar la primera línea que aparece, llamada "Segmentation fault" y no dejar espacios en blanco. También asegurarse que en el resto del archivo todas las líneas estén juntas, es decir, sin líneas en blanco.<br />
<br />
Al terminar se guardan los cambios y listo!<br />
<br />
<br />
Y esos son todos los errores que me encontré. Si sufres alguno más, no dudes en comentarlo.<br />
<br />
<br />Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com6tag:blogger.com,1999:blog-568035879551155991.post-43050837623221258002015-08-29T18:58:00.002+01:002015-08-29T18:58:27.986+01:00Añadir Apps a BuildEn este tutorial os enseñaré algo bastante simple pero que os puede resultar bastante útil, que es añadir aplicaciones para que se añadan al compilar la ROM. Las añadiremos una vez descargada la source y tengamos todo listo para compilar.<br />
Hay varios métodos y los voy a explicar todos. Empecemos:<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>1. Añadir Apps desde Source</b></span><br />
<br />
El primer método de todos es mi preferido, aunque no necesariamente el más sencillo. Para incluir Apps con este método necesitaremos que sea de código abierto, y que esté disponible para su uso.<br />
<br />
Tomaré de ejemplo <a href="http://forum.xda-developers.com/apps/spirit-fm/app-spirit2-free-source-real-fm-radio-t2951455" target="_blank">Spirit2FM</a>, que aunque no funcione siendo aplicación de sistema, es un buen ejemplo ya que tiene un código sencillo.<br />
Lo primero que haremos será acceder y su código fuente en GitHub, que nos dejará el enlace el desarrollador de la aplicación. Tendrá un aspecto <a href="https://github.com/mikereidis/spirit2_free" target="_blank">así</a>.<br />
<br />
Entonces descargaremos los archivos (Download zip que aparece a la izquierda) y extraemos los archivos y carpetas. Pegamos lo extraído en la carpeta de trabajo de la ROM en la ruta packages/app/Spirit2FM<br />
<br />
*Spirit2FM lo cambias por el nombre de la app que estés usando*<br />
<br />
Una vez copiado debemos ver si existe el archivo "Android.mk". Si no existe, lo creamos. Para ello, crea el archivo y pega lo siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 214px; margin: 0px; width: 409px;" wrap="VIRTUAL">LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := nombre_app
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
include $(call all-makefiles-under,$(LOCAL_PATH))
</textarea>
<br />
<br />
*nombre_app lo cambias por el mismo nombre de la carpeta (Spirit2FM en mi caso)*<br />
*Si existe el archivo, deberás nombrar la carpeta como diga la línea package_name*<br />
<br />
Guardamos los cambios y cerramos. Hecho esto nos dirigimos a la carpeta de nuestro dispositivo (marca/device/modelo) y abrimos el "device.mk" (en vez de device saldrá el codename de tu dispositivo) y añadiremos la siguiente línea:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL"># Nombre App
PRODUCT_PACKAGES += \
Nombre App (Carpeta)
</textarea>
<br />
<br />
En mi caso, quedaría así:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL"># Spirit2FM
PRODUCT_PACKAGES += \
Spirit2FM
</textarea>
<br />
<br />
Guardar y salir. Ya estas listo para compilar la ROM con la app incluida.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>2. Añadir Prebuilt APK</b></span><br />
<br />
Este método os resultará bastante sencillo, ya que usaremos el archivo ".apk" para incluirlo en la ROM. Seguiré tomando de ejemplo Spirit2FM (aunque igualmente no sirva como app de sistema) y mi Samsung Galaxy Ace 3 (loganreltexx). Muchos tutoriales incluyen la app en la carpeta "device", sin embargo, es muy propenso a dar errores. Por ello, la añadiremos en el repositorio "vendor".<br />
<br />
Lo primero de todo será descargar la aplicación en formato APK. Una vez obtenida, la copiaremos en la ruta vendor/samsung/loganreltexx/propietary/app/nombreapk (o la de tu dispositivo).<br />
Una vez copiada la apk, nos dirijimos a vendor/samsung/loganreltexx y abrimos el archivo "Android.mk". Añadiremos lo siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 188px; margin: 0px; width: 303px;" wrap="VIRTUAL">LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Nombre App
LOCAL_SRC_FILES := propietary/app/Spirit2FM/Spirit2FM.apk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .apk
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)
</textarea>
<br />
<br />
*Si la línea "LOCAL_PATH" ya aparece, no la copiamos*<br />
*Sustituye el "nombre app" y la ruta de la línea "src" por tus correspondientes*<br />
<br />
Ahora nos dirigimos a device/samsung/loganreltexx y abrimos loganreltexx.mk (o lo correspondiente a tu dispositivo) y añadimos el siguiente código:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL"># Spirit2FM
PRODUCT_PACKAGES += \
Spirit2FM
</textarea>
<br />
<br />
*El nombre del paquete tiene que ser siempre el mismo. También la carpeta que creamos se tiene que llamar igual*<br />
<br />
También puede que la app que vayamos a incluir requiera sus librerías. Esto lo sabrás si al incluir la app en la build y abrirla da forzar cierre. Para añadir las libs, las extraemos de la apk con WinRar. Estarán en una carpeta llamada "armeabi".<br />
Una vez extraídas, las copiaremos en vendor/samsung/loganreltexx/propietary/lib. Si no está la carpeta, la creamos. Ahora para que se incluyan los archivos en la build, editamos el Android.mk de antes, añadiendo este código:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 139px; margin: 0px; width: 428px;" wrap="VIRTUAL">include $(CLEAR_VARS)
LOCAL_MODULE := libtime_genoff
LOCAL_SRC_FILES := proprietary/lib/libtime_genoff.so
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
include $(BUILD_PREBUILT)
</textarea>
<br />
*Cambiamos "libtime_genoff" por el nombre del archivo lib (.so)*<br />
*Añadiremos un código por cada archivo*<br />
<br />
Al terminar guardamos los cambios y salimos. Ya tendremos la aplicación lista para incluir.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>3. Añadir Funcionalidad Data/app</b></span><br />
<br />
Bueno, este método no es parecido a los anteriores, ya que no añadiremos la app como de sistema, sino como app de usuario. Es decir, el usuario podrá desinstalarla y demás, como si la hubiera instalado por Google Play.<br />
Es muy útil práctico. Útil porque si una app no funcionaba bien o daba forzar cierre al instalarla en "system" ahora funcionará (sí, por fin funciona Spirit2FM); y práctico porque el proceso se hace una vez compilada la ROM.<br />
<br />
Para ello tendremos que tener el archivo zip de la ROM ya compilada y el archivo ".apk" que queramos incluir. Una vez tenido esto, añadiremos en el zip la carpeta data/app (las dos carpetas, es decir, la carpeta app dentro de la carpeta data) y agregamos la apk allí.<br />
<br />
Actualizamos el zip y ahora nos dirigimos al updater-script del zip. Está en la carpeta META-INF/com/google/android<br />
Lo abrimos con un editor y encima de la línea package_extract_dir("system", "/system"); añadiremos las siguientes líneas:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">run_program("/sbin/mount", "/data");
package_extract_dir("data", "/data");
</textarea>
<br />
<br />
Hecho este guardamos y actualizamos el zip. Ahora, para que no te de error al instalar la ROM, deberás firmarla (sign). Puedes hacerlo siguiendo <a href="http://www.htcmania.com/showthread.php?t=656671" target="_blank">este estupendo tutorial de htcmania</a>, o usando alguna kitchen. Si tuvieras alguna duda, no dudes en comentarla.<br />
<br />
Una vez firmado el zip, ya estarás listo para instalar la ROM.<br />
<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>¡Listo! Has Agregado Una App a la Build</b></span></div>
<br />Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com0tag:blogger.com,1999:blog-568035879551155991.post-68599991671520939312015-08-28T21:36:00.001+01:002015-08-29T15:02:03.974+01:00Local Manifest GenéricosMuy buenas a todos! En esta entrada haré algo que espero que os ayude mucho. Voy a ir haciendo archivos local_manifest genéricos, con los repositorios comunes para distintos dispositivos, mayoritariamente Samsung. Con eso no se asegura que para tu dispositivo sea exactamente igual por coincidir el chipset, pero en la mayoría de los casos sí.<br />
<br />
Antes que nada, explicaré más detalladamente el funcionamiento de este archivo.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>1. Funcionamiento de Local Manifest</b></span><br />
<br />
<br />
Si queremos cambiar la lista del manifest.xml, podemos editar el default.xml directamente. Sin embargo, esto haría que la copia local del manifest haga conflicto con la versión oficial en github. Esto podría crear problemas cuando actualicemos el manifest oficial, ya que entra en conflicto con los cambios.<br />
Por ello, no pienses en editar el "default.xml" (Aunque a veces lo hagamos pero para otra cosa, como en OmniRom, para añadir la cuenta del developer de GitHub).<br />
<br />
<b>Aquí es donde el local manifest entra en juego.</b><br />
<b><br /></b>
Crearde un local manifest nos permite personalizar la lista de repositorios utilizados en nuestra copia del código fuente, reemplazando o complementando el manifest por defecto. De esta manera, se puede agregar, quitar o cambiar el código fuente en el manifest oficial con el nuestro propio. Al incluir los repositorios (que ni siquiera tiene por qué residir en GitHub) en un local manifest, podemos sincronizar con el comando "repo sync" del mismo modo que teníamos previamente. Sólo que ahora, tanto los repositorios oficiales del manifest por defecto y los repositorios adicionales que especifiquemos serán comprobados para las actualizaciones.<br />
Por ello, "Local_Manifest" es algo fundamental para los desarrolladores.<br />
<br />
Si usamos Local Manifest, se sincronizarán las sources del dispositivo cada vez que ejecutemos el comando para sincronizar repositorio de CyanogenMod (repo sync), por lo que se sobreescribirán los archivos de nuestro dispositivo, pero tranquilo, no desaparecen.<br />
<br />
De forma muy resumida, Local Manifest es un archivo cuya función es sincronizar proyectos en la carpeta de trabajo local.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>2. Usos del Local Manifest</b></span><br />
<br />
Ahora pasaré a explicar todo lo que puedes hacer con el local manifest, aunque muchas de esas cosas no las usaremos para compilar ROMs, pero el saber no ocupa lugar de más. ;-)<br />
<br />
Para añadir repositorios locales, lo primero que haremos será crear el archivo. Aunque lo he explicado en las entradas de compilación, lo explicaré todo en este post. Para crear el archivo, ejecutamos en Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd ruta-de-la-carpeta/.repo/local_manifests
</textarea>
<br />
<br />
Una vez situados el el directorio, crearemos el archivo.<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">nano local_manifest.xml
</textarea>
<br />
*También podéis crear el archivo usando el explorador de archivos y editarlo con gedit*<br />
<br />
Ahora añadiremos el contenido que queramos sincronizar localmente. Una vez completados los cambios, presiona "Ctrl+o" y pulsa "Enter" para guardar los cambios. Para salir del editor presiona "Ctrl+x".<br />
<br />
La estructura por defecto del Local Manifest es así:<br />
<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 81px; margin: 0px; width: 640px;" wrap="VIRTUAL"><?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project path="directorio" name="repo" remote="web" revision="branch" />
</manifest>
</textarea>
<br />
<br />
Así sería el formato para añadir repositorios/proyectos. La terminología es la siguiente:<br />
<br />
- path (directorio): ruta local donde estará el repo<br />
- name (repo): enlace del repositorio quitando "https://github.com/"<br />
- remote (web): en el 99% de los casos hay que poner github<br />
- revision (branch): la marca a usar de dicho repositorio (cm-11.0, android-5.0, etc)<br />
<br />
Pues así sería para añadir un proyecto, y crearíamos una línea por cada proyecto a añadir. <a href="https://github.com/kostoulhs/loganreltexx_local_manifest/blob/cm-11.0/local_manifest.xml" target="_blank">Éste</a> sería un ejemplo de un local_manifest para añadir repositorios.<br />
<br />
Sin embargo, se pueden hacer más cosas a parte de añadir proyectos. Podríamos encontrarnos con uno así:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 188px; margin: 0px; width: 635px;" wrap="VIRTUAL"><?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remove-project name="CyanogenMod/android_hardware_qcom_fm" />
<project path="hardware/qcom/fm" name="aogp/hardware/qcom/fm" remote="github"/>
</manifest>
</textarea>
<br />
<br />
Explico cuál es la función de cada cosa. Antes que nada, aprovecho y explico también qué significa la primera línea de todas.<br />
<br />
<div style="text-align: center;">
<span style="color: magenta;"><b><?xml version="1.0" encoding="UTF-8"?></b></span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Esta línea es una declaración estándar de XML, diciendo que es un archivo de lenguaje extensible. Una vez establecido, las etiquetas <manifest> y </manifest> encierran el contenido que será reconocido por el comando repo.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<span style="color: magenta;"><b><remove-project name="CyanogenMod/android_hardware_qcom_fm" /></b></span><br />
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Esta línea se encarga de eliminar un proyecto (el hardware de fm en este caso) que se encuentre declarado en el default manifest. Esto nos sirve por si hay proyectos en el manifest por defecto que no queremos que se descarguen ya que no serán necesarios, por lo que ahorraremos tiempo de descarga y espacio de disco. Una vez ejecutemos "repo sync", el repositorio eliminado no estará disponible en el source tree que hayamos sincronizado.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<b><span style="color: magenta;"><project path="hardware/qcom/fm" name="aogp/hardware/qcom/fm" remote="github"</span></b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Como expliqué antes, esta línea añade un proyecto, y debe constar de las cuatro partes que expliqué. Sin embargo, "revision" es opcional, ya que si no especificamos la branch a descargar (o el repositorio solo tiene una), se sincronizará la que esté por defecto (o la única disponible).</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Y esto sería toda la explicación sobre este archivo. Ahora pasaremos a lo más interesante.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="color: cyan; font-size: xx-large;"><b>3. Local Manifest Genéricos</b></span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Bueno, aquí iré añadiendo local manifest genéricos que os serán útiles si tu dispositivo no tiene soporte oficial de CyanogenMod.</div>
<div style="text-align: left;">
Los que publicaré serán para CyanogenMod 11, ya que es la ROM que el 99% de desarrollador compilan primero para dispositivos no soportados, ya que es muy fácil usarla de base para portar otras ROMs.<br />
Si vas a compilar otra versión de CyanogenMod, vete al repositorio y comprueba que esté disponible la versión de android (branch) que vayas a trabajar.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Samsung Qcom MSM-8930</b></span></div>
<div style="text-align: left;">
<span style="color: magenta; font-size: large;"><b><br /></b></span></div>
<div style="text-align: left;">
El local manifest si tu dispositivo es un Samsung Qualcomm MSM-8930 será <a href="http://pastebin.com/LeyTtPhw" target="_blank">así</a>. Recuerda que debes cambiar la líneas que son específicas para cada dispositivo (las dos últimas en este caso). </div>
<div style="text-align: left;">
Todos los archivos estarán en mi cuenta de PasteBin, así los podréis copiar o descargar fácilmente.</div>
</div>
<div style="text-align: left;">
<br /></div>
<br />
<br />
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large; text-align: left;">Samsung Bcm 21553</b></div>
<div style="text-align: center;">
<br /></div>
<div>
El local manifest si tu dispositivo es una Samsung Broadcom 21553 será <a href="http://pastebin.com/rwPsE8UZ" target="_blank">así</a>. Recuerda que debes cambiar la líneas que son específicas para cada dispositivo (la penúltima en este caso). </div>
<div>
Todos los archivos estarán en mi cuenta de PasteBin, así los podréis copiar o descargar fácilmente.<br />
<br />
<br /></div>
Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com1tag:blogger.com,1999:blog-568035879551155991.post-74233087750945016462015-08-21T16:59:00.000+01:002015-08-21T16:59:43.748+01:00Hacer Stock ROM Flasheable por CWMMuy buenas a todos! Hoy os traigo un tutorial bastante interesante, ya que a partir de los archivos ".img" de nuestra Stock ROM, haremos que sea instalable por un custom recovery. Es una buena base para empezar con las custom roms basadas en Stock. Dicho esto, empecemos con el Tutorial:<br />
<br />
<span style="font-size: large;"><b><br /></b></span>
<span style="font-size: large;"><b>Pre-requisitos:</b></span><br />
<span style="font-size: large;"><b><br /></b></span>
- JDK (Java Development Kit)<br />
<br />
*Recomiendo haber hecho el proceso de <a href="http://spanish-android-developers.blogspot.com.es/2015/08/inicializar-entorno-para-compilar.html" target="_blank">inicializar entorno de compilación</a>*<br />
<br />
<span style="color: cyan; font-size: x-large;"><b>1. Inicializar Entorno</b></span><br />
<br />
Lo primero que haremos será configurar la herramienta que utilizaremos para hacer el trabajo, y será <a href="http://forum.xda-developers.com/showthread.php?t=633246" target="_blank">dsixda's kitchen</a>. Lo primero que haremos será descargar el paquete necesario desde <a href="https://github.com/dsixda/Android-Kitchen/tags" target="_blank">aquí</a><br />
Una vez descargado el paquete comprimido, copiamos la carpeta extraída al directorio "home" (por defecto al abrir el explorador de archivos). Ahora nos situaremos en ella con Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd kitchen
</textarea>
<br />
<br />
Y la abrimos:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">./menu
</textarea><br />
Si cumplimos todos los pre-requisitos, debería abrirse sin problemas. Veremos una interfaz así:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 250px; margin: 0px; width: 546px;" wrap="VIRTUAL">===================================================================
Android Kitchen - by dsixda (xda-developers.com)
===================================================================
Main Menu
1. Set up working folder from ROM
2. Add root permissions
3. Add BusyBox
4. Disable boot screen sounds
5. Add wireless tethering
6. Zipalign all *.apk files to optimize RAM usage
7. Change wipe status of ROM
8. Change name of ROM
9. Check update-script for errors
10. Show working folder information
Advanced Options
11 - Deodex files in your ROM
12 - Add task killer tweak for speed (stock ROM only)
13 - Add /data/app functionality
14 - Add Nano text editor + sysro/sysrw
15 - Add Bash (command shell)
16 - Add Apps2SD
17 - Add /etc/init.d scripts support (busybox run-parts)
18 - Add custom boot animation functionality
19 - Porting tools (experimental)
20 - Tools for boot image (unpack/re-pack/etc.)
21 - Unpack data.img
22 - Sign APK or ZIP file(s)
23 - Convert update-script or updater-script
24 - Miscellaneous optins / Plugin scripts
99. Build ROM from working folder
00. About/Update kitchen
0. Exit
</textarea><br />
<br />
Hecho esto ya habremos configurado la cocina.<br />
<br />
<br />
<span style="color: cyan; font-size: x-large;"><b>2. Añadir Soporte a tu Dispositivo</b></span><br />
<br />
Lo que haremos ahora será añadir soporte a tu dispositivo para la cocina. No es algo estrictamente vital para lo que vamos a hacer ya que podemos editar los mount points luego, pero recomiendo hacerlo y así ya lo tienes con soporte para todas las veces que la uses.<br />
<br />
La lista oficial de dispositivos soportados es la siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 230px; margin: 0px; width: 451px;" wrap="VIRTUAL">---------------------------------------------------
MediaTek MT65xx-based devices
- Discussion thread here
- MT657X devices: See this post
for details
- MT6589 devices: See this post
- IMPORTANT: You may need to define your device under the kitchen's
/tools/edify_defs folder, or it might not boot! Read the instructions in FAQ
section: 'How to Add New Devices'
---------------------------------------------------
Alphabetical list of rest of devices:
Acer Liquid
Dell Streak 7
HTC Amaze 4G
HTC Aria / Liberty
HTC Desire
HTC Desire HD / Inspire 4G
HTC Desire S
HTC Desire Z / Vision / T-Mobile G2
HTC Dream / G1
HTC Droid DNA
HTC Droid Eris
HTC Evo 3D
HTC Evo 4G
HTC Evo 4G LTE
HTC Evo View 4G (untested)
HTC Evo Shift 4G
HTC Flyer (untested)
HTC HD2
- Use NAND ROM method (Please follow this thread for details)
HTC Hero / G2 Touch
HTC Incredible
HTC Incredible 2
HTC Incredible S
HTC Legend
HTC Magic / myTouch 3G
HTC myTouch 3G Slide
HTC myTouch 4G / Glacier
HTC Nexus One
HTC One (m7 variant)
HTC One S
HTC One X
HTC One X+ (AT&T and International versions)
HTC One XL
HTC One V (including CDMA version)
HTC Rezound
HTC Sensation
HTC Tattoo / Click
HTC Thunderbolt
HTC Wildfire / Buzz
HTC Wildfire S
Huawei - Newer devices (2013+):
- Custom ROMs *not* supported, but to extract files from firmware,
please follow this thread.
Huawei Ideos X6
- Please follow this thread for details
Huawei U8100/U8110/U8120/U8150/U8160/U8180/U8650
Huawei U8220 / T-Mobile Pulse
LG Ally
LG GT540 Optimus
LG Motion 4G
- Please follow this thread for details
LG Nexus 4 (mako)
LG Optimus 2X (P990)
LG Optimus Black
- Please follow this thread for details
LG Optimus G2X (P999)
LG P500
- Please follow this thread for details
LG Shine Plus
LG Vortex
Micromax A60
Motorola Atrix (unconfirmed)
Motorola CLIQ / CLIQ XT
Motorola Droid
Motorola Droid Bionic
- Please follow this thread for details
Motorola Milestone (unconfirmed)
- You may need to remove the boot.img before building
Prestigio MultiPhone 4500 DUO
Prestigio MultiPhone PAP4500TDUO
Samsung Galaxy Ace 2 - GT-I8160(L/P)
Samsung Galaxy Mini
Samsung Galaxy Nexus (untested, 'maguro' and 'toro' versions only)
Samsung Galaxy Note
- GT-N7000 - please follow this thread for details
- SGH-I717 - Please follow this thread for details
Samsung Galaxy Note 2
- Supported for:
-- Sprint variants - SPH-L900 - Please follow this guide
-- T-Mobile variants - SGH-T889(V) - Please follow this guide
-- Verizon variants - SCH-I605
(unconfirmed - see this equivalent guide)
-- International variants - GT-N7100/N7105(T)/N7108
(unconfirmed - see this equivalent guide)
-- AT&T/Rogers/Bell/Telus variants - SGH-I317(M)
(unconfirmed - see this equivalent guide)
-- US Cellular variants - SCH-R950
(unconfirmed - see this equivalent guide)
Samsung Galaxy R GT-I9103
Samsung Galaxy S (GT-I9000 and most variants)
- Please follow this thread for details
Samsung Galaxy S Plus (GT-I9001)
- Please follow this thread for details
Samsung Galaxy S2
- Supported for:
-- GT-I9100 and Exynos CPU variants - Please follow this thread for details
-- Qualcomm/LTE variants
(AT&T Skyrocket, Rogers, Telus, T-Mobile, Bell HD LTE SGH-I757M,
Telstra GT-I9210T)
- Please follow this thread for details
Samsung Galaxy S3
- Supported for:
-- T-Mobile/Mobilicity/Wind variants: SGH-T999(V) - Click here for a guide
-- AT&T/Rogers/Bell/Telus variants: SGH-I747(M) - Click here for a guide
-- Verizon variants: SCH-I535, SCH-R530U - Click here for a guide
-- Sprint variants: SPH-L710, SCH-L710 - Click here for a guide
-- International variants: GT-I9300(T) - Click here for a guide
-- International LTE variants: GT-I9305(T) - Click here for a guide
-- Korean variants: SHV-E210K/L/S and SHW-M440S (unconfirmed)
Samsung Galaxy S4
- NOTE: Kitchen only supports creating ROMs from stock firmware
or importing ROMs made only with kitchen!
- Supported for:
-- AT&T variant (SGH-I337)
-- Bell/Telus/Rogers variant (SGH-I337M)
-- T-Mobile variant (SGH-M919)
-- Wind/Mobilicity variants (SGH-M919V) - untested
-- International non-LTE variant (GT-I9500) - untested
-- International LTE variant (GT-I9505) - untested
-- Other American variants (SCH-R970, SPH-L720, SCH-I545) - untested
Samsung Galaxy W (GT-I8150)
- Please follow this thread for details
Samsung Nexus S / Nexus S 4G
Sony Ericsson Xperia 2010 devices (X10 / X10 Mini / X10 Mini Pro)
- Can only build ROM without boot.img (please follow this thread for details)
Sony Xperia 2011-12 devices, specifically:
- TX, P, U, Sola
- Active, Arc, Arc S, Mini, Mini Pro, Neo, Neo V, Neo L,
Play, Ray (follow steps below):
- Can only build ROM without boot.img
- If using stock FTF for kitchen:
1) Unzip FTF file, extract the system.sin
2) Dump system image from system.sin w/ Flashtool
(Advanced-> SIN Editor)
3) Rename dumped file to system.img
- OR If using Nandroid backups: Rename system.yaffs2.img to system.img
- Use this system.img in kitchen's original_update folder
- WARNING - If using a ROM made from system.sin (not Nandroid), it
is recommended to flash from the temporary (fastboot) Clockwork
Recovery, rather than the regular Clockwork Recovery, otherwise
device may not boot (possibly because custom recovery files in
system folder are not added to ROM? e.g. recovery.tar).
ZTE Blade / Orange San Francisco
</textarea>
<br />
<br />
Si tu dispositivo no se encuentra en esa lista, habrá que hacer lo siguiente:<br />
<br />
Nos dirijimos a la carpeta kitchen/tools/edify_defs y creamos un archivo vacío que lleve de nombre el "codename" de nuestro dispositivo. (El codename lo puedes ver en la línea ro.product.device del build.prop de tu dispositivo)<br />
Una vez creado, tendremos que obtener los mount points de nuestro dispositivo. Para ello habrá que desempaquetar el "recovery.img" de tu dispositivo, y abrir el archivo "recovery.fstab" que estará en la carpeta ramdisk. Puedes hacer ese proceso de desempaquetado con la misma dsxida's kitchen o con <a href="http://spanish-android-developers.blogspot.com.es/2015/08/desempaquetar-kernel.html" target="_blank">este tutorial</a>.<br />
<br />
Cuando tengamos localizados los puntos de montaje, abriremos el archivo vacío que creamos y habrá que especificarle a la cocina en ese archivo cuáles son los mount points de nuestro dispositivo. Para ello abre otro archivo de tools/edify_defs de un dispositivo del mismo manufacturador que el tuyo y sigue el mismo esquema en tu archivo. Una vez hecho, guarda los cambios y cierra.<br />
<br />
Con esto ya habrás dado soporte a la cocina. Sigamos:<br />
<br />
<br />
<span style="color: cyan; font-size: x-large;"><b>3. Crear Zip Flashable</b></span><br />
<br />
Este será el ansiado paso final en el que por fin crearemos la Stock ROM para instalar por CWM/TWRP.<br />
Lo primero que haremos será copiar los archivos "boot.img" y "system.img" a la carpeta kitchen/original_update<br />
<br />
*Puede que tu dispositivo use otro formato de archivo y demás, pero el proceso es el mismo*<br />
Además, recomiendo copiar "cache.img" (también puede venir como cache.img.ext4, le quitamos la extensión ext4) para añadir los CSC (código de país) a la Stock.<br />
<br />
Una vez copiados los archivos necesarios, iremos al Terminal con la cocina abierta, y teclearemos el número 1 (Set up working folder from ROM) y le damos a enter. Esto inicializará la carpeta donde trabajará la cocina.<br />
<br />
*Te dirá que no encuentra archivo cache. Si lo quieres implementar, lo copiaremos ahora en la carpeta de trabajo que creó la cocina, para que la implemente luego*<br />
<br />
Ahora puedes añadirle root, busybox y demás características a tu ROM. Eso lo dejo de forma libre. Una vez hayas terminado de tematizar, teclea la opción 99 (Build ROM from working folder) y cuando te diga que tipo de guía durante la instalación, elige la interactiva.<br />
La interfaz te irá guiando durante el proceso, y lee con atención todo lo que te vaya preguntando, pero no deberá haber ningún tipo de problema.<br />
<br />
Atención: Puede que al añadir soporte a tu dispositivo, no se haya implementado correctamente. Una vez creado el zip, abre el archivo "updater-script" que se encontrará en la carpeta META-INF. Una vez abierto hay que asegurarse de que los mount points sean los de nuestro dispositivo. (Los mount points saldrán en líneas en las que haga format system, extract boot.img y así). Corregimos lo necesario, guardamos y actualizamos el zip. Así habremos terminado.<br />
<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>¡Ya Has Creado tu Stock ROM por CWM!</b></span></div>
<br />Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com0tag:blogger.com,1999:blog-568035879551155991.post-37055787259487339762015-08-21T12:02:00.002+01:002015-09-02T10:30:01.954+01:00Cómo Hacer un LogCatMuy buenas a todos! Hoy aprenderemos una parte muy importante a la hora de desarrollar Android, y es el LogCat, registro de informe de errores. Con esta herramienta podremos identificar las causas de errores y bugs de los cuales no se ve la solución con un simple testeo. Como símil, serían los aparatos OBD que hacen diagnóstico de errores de un automóvil.<br />
Pues una vez entendido su función, empecemos con el Tutorial:<br />
<br />
*Atención: Hay maneras de hacer LogCat desde el móvil con apps como <a href="https://play.google.com/store/apps/details?id=com.nolanlawson.logcat" target="_blank">CatLog</a>, pero yo explicaré el método "tradicional" por Terminal, que a mí me gusta más*<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>1. Preparar Entorno</b></span><br />
<br />
Lo primero de todo será descargar los archivos necesarios para trabajar (si no los tienes ya instalados). Para ello, ejecutaremos los siguientes comandos en Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">sudo apt-get install ia32-libs
</textarea>
<br />
Esto descargará la librerías de 32-bits, necesarias si trabajamos en una PC de 64-bits.<br />
<br />
Luego instalaremos Android-SDK y JDK (Java), además de ADB y FastBoot, que si seguiste el tuto de "<a href="http://spanish-android-developers.blogspot.com.es/2015/08/inicializar-entorno-para-compilar.html" target="_blank">Inicializar Entorno para Compilar</a>" ya lo tendrás. Si no, será ejecutar lo siguiente:<br />
<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Java</b></span></div>
<div style="text-align: left;">
<br /></div>
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 348px;" wrap="VIRTUAL">sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
</textarea><br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Android-SDK</b></span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Descargamos el archivo comprimido de su <a href="https://developer.android.com/sdk/index.html#top" target="_blank">página oficial</a>. Dejamos el archivo en la carpeta "Downloads"</div>
<div style="text-align: left;">
*Para descargarlo vete al final de la página donde dice "SDK Tools Only" y elige la versión para Linux.</div>
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>ADB & Fastboot</b></span></div>
<div style="text-align: center;">
<br /></div>
<textarea cols="40" name="textarea" rows="4" style="height: 65px; margin: 0px; width: 475px;" wrap="VIRTUAL">sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install android-tools-adb android-tools-fastboot
</textarea><br />
<br />
Ahora deberás seguir los siguientes pasos muy atentamente. Primero crearemos el siguiente directorio:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">mkdir android
</textarea>
<br />
<br />
Extraemos el SDK descargado:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 389px;" wrap="VIRTUAL">tar -zxvf ~/Downloads/android-sdk_r21.0.1-linux.tgz
</textarea>
<br />
<br />
Y lo movemos al directorio creado:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">mv android-sdk-linux ~/android/sdk
</textarea>
<br />
<br />
Ahora abrimos el mánager de SDK:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">android/sdk/tools/android
</textarea>
<br />
<br />
Este comando abrirá el programa. Entonces elegiremos "SDK Tools" y "Adnroid SDK Platform Tools for ADB" e instalamos los paquetes seleccionados.<br />
<br />
Ahora dirígete al directorio "home" con el explorador de archivos. Presiona Ctrl+h (mostrar archivos ocultos) e identifica el archivo ".bashrc". A continuación lo abrimos y pegamos lo siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 65px; margin: 0px; width: 364px;" wrap="VIRTUAL">export PATH=$PATH:~/android/sdk
export PATH=$PATH:~/android/sdk/platform-tools
export PATH=$PATH:~/android/sdk/tools
</textarea>
<br />
*Si los paquetes se descargaron en una carpeta con nombre diferente, simplemente cámbialo*<br />
<br />
Ahora ejecutaremos un comando en Terminal para que el PC reconozca cualquier dispositivo:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 341px;" wrap="VIRTUAL">sudo gedit /etc/udev/rules.d/51-android.rules
</textarea>
<br />
<br />
Se abrirá un archivo con gedit. Pegamos lo siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 65px; margin: 0px; width: 431px;" wrap="VIRTUAL">SUBSYSTEM=="usb", ATTR{idVendor}=="0502", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="413c", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="0489", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="091E", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="0482", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="1004", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="0955", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="10A9", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="04dd", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="0fce", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="19D2", MODE="0666"
</textarea>
<br />
<br />
Guardamos los cambios y cerramos, y ejecutamos en Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 369px;" wrap="VIRTUAL">sudo chmod +x /etc/udev/rules.d/51-android.rules
</textarea>
<br />
Y luego:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">sudo gedit /etc/rc.local
</textarea>
<br />
<br />
Esto abrirá otro archivo. Ahora añadiremos la siguiente línea justo encima de donde aparece escrito "exit 0"<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 430px;" wrap="VIRTUAL">/home/usuario/android/sdk/platform-tools/adb start-server
</textarea>
<br />
*En usuario escribe el nombre de usuario que tenga la PC*<br />
<br />
Una vez que todo esté instalado, ejecutaremos lo siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd ~/android/sdk/tools
./android
</textarea><br />
<br />
Y ahora estaremos listos para tomar un LogCat.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>2. Tomar el LogCat:</b></span><br />
<br />
Ahora por fin haremos el diagnóstico de errores de nuestra ROM. Para ello lo primero será comprobar que nuestro dispositivo está conectado:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">adb devices
</textarea><br />
<br />
Deberá aparecer nuestro dispositivo. A continuación escribimos:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">adb logcat > logcat.txt
</textarea>
<br />
<br />
Con ello el LogCat se guardará en el archivo de texto "logcat.txt". También puedes ejecutar este otro comando:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">adb logcat -v long > logcat.txt
</textarea>
<br />
<br />
Este hará que el LogCat se guarde con estilo largo, por lo que todo estará más ordenado y cada línea estará donde le corresponde.<br />
<br />
*Cuando se da salida a un archivo, verás una nueva línea, pero nada impreso, esto es normal. Para detener LogCat de escritura en un archivo, presiona Ctrl+C *<br />
<br />
Una vez hecho esto, ya habremos tomado el LogCat.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>3. Terminología del LogCat:</b></span><br />
<br />
Aquí voy a explicar lo que significa cada término en el LogCat. Dichos términos aparecerán al principio de la frase en el LogCat.<br />
<br />
<blockquote class="tr_bq">
I/> ===> Information<br />
S/> ===> Silent<br />
D/> ===> Debug<br />
W/> ===> Warning<br />
E/> ===> Error<br />
F/> ===> Fatal</blockquote>
<br />
No creo que de problema a la hora de entenderlo. Lo que sale arriba es que está correcto,y cuanto más abajo es que es más grave. "Debug" significa depuración. Y eso sería todo.<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>¡Listo! Has Hecho un LogCat</b></span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com0tag:blogger.com,1999:blog-568035879551155991.post-76737319816361749042015-08-18T15:21:00.001+01:002015-08-18T15:21:40.038+01:00Subir Device Tree a Github¡Muy buenas seguidores! Hoy traigo un tutorial muy importante para los que estén empezando a ser ya desarrolladores con algo de experiencia: aprenderemos a publicar un repositorio con el código de dispositivo que hayamos editado localmente y demás.<br />
Pero antes de nada, ¿qué es GitHub?<br />
<br />
<blockquote class="tr_bq">
GitHub es una plataforma de desarrollo colaborativo de software para alojar proyectos utilizando el sistema de control de versiones Git. El código se almacena de forma pública, aunque también se puede hacer de forma privada, creando una cuenta de pago.<br />
GitHub aloja tu repositorio de código y te brinda herramientas muy útiles para el trabajo en equipo, dentro de un proyecto.<br />
Además de eso, puedes contribuir a mejorar el software de los demás. Para poder alcanzar esta meta, GitHub provee de funcionalidades para hacer un fork y solicitar pulls.</blockquote>
<br />
Pues dicho esto, empecemos con el proceso.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>1. Crear Cuenta en GitHub:</b></span><br />
<br />
Como es evidente, este será el primer paso. Entramos en su <a href="https://github.com/" target="_blank">página oficial</a> y nos registramos.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguQ69yJYapPpt-OZjgnohhjvXwR_EcNHicrb0Zj5blLmjjcbDUw2LgylvBiZlvp7WUfbQD0nKZqhwIUqExtPFTv6En7FtI_HQSjYjYb3GZacM5DAjNWJLamUBrRl_WA5EgFxu5_sdDpFlW/s1600/GitHub+Account.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="284" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguQ69yJYapPpt-OZjgnohhjvXwR_EcNHicrb0Zj5blLmjjcbDUw2LgylvBiZlvp7WUfbQD0nKZqhwIUqExtPFTv6En7FtI_HQSjYjYb3GZacM5DAjNWJLamUBrRl_WA5EgFxu5_sdDpFlW/s400/GitHub+Account.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Rellena los datos que te pide y confirma el registro con el correo electrónico que te enviarán.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: cyan; font-size: xx-large;"><b>2. Instalar Git</b></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: cyan; font-size: xx-large;"><b><br /></b></span></div>
<div class="separator" style="clear: both; text-align: left;">
Ahora instalaremos el sofware necesario para trabajar. <a href="https://es.wikipedia.org/wiki/Git" target="_blank">Aquí</a> tienes más información sobre él. Seguramente tengas instalado los archivos, pero si no, ejecuta lo siguiente en Terminal:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">sudo apt-get install git
</textarea>
<br />
<br />
Cuando se haya instalado, tendremos que configurarlo con nuestra cuenta de GitHub. Usaremos dos comandos que ya usamos en su momento al compilar CyanogenMod.<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 375px;" wrap="VIRTUAL">git config --global user.name "Tu Nombre de GitHub"
</textarea><br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 377px;" wrap="VIRTUAL">git config --global user.email "tu_email@ejemplo.com"
</textarea><br />
<br />
Con esto habremos configurado Git con nuestra cuenta de GitHub.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>3. Generar Clave SSH</b></span><br />
<span style="color: cyan; font-size: xx-large;"><b><br /></b></span>
Ahora crearemos una SSH Key, para poder establecer una conexión segura entre tu PC y el servidor de GitHub. Para generar la clave haremos lo siguiente en Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 336px;" wrap="VIRTUAL">ssh-keygen -t rsa -C "tu_email@ejemplo.com"
</textarea>
<br />
*El correo debe ser siempre el mismo que hemos estado usando*<br />
<br />
Le damos a enter y veremos lo siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 455px;" wrap="VIRTUAL"># Creates a new ssh key, using the provided email as a label
# Generating public/private rsa key pair.
# Enter file in which to save the key (/home/you/.ssh/id_rsa):
</textarea>
<br />
<br />
Le daremos a enter de nuevo sin escribir nada. Esto creará el directorio donde se guardará la clave. A continuación nos pedirá introducir una contraseña (passphrase). No la confundas con la de GitHub; yo para no liarme usé la misma que la que uso en la cuenta de GitHub.<br />
Verás lo siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 477px;" wrap="VIRTUAL"># Enter passphrase (empty for no passphrase): Escribir contraseña
# Enter same passphrase again: Repetir contraseña
</textarea>
<br />
Una vez configurada la contraseña, aparecerá lo siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 79px; margin: 0px; width: 513px;" wrap="VIRTUAL">Your identification has been saved in /home/you/.ssh/id_rsa.
# Your public key has been saved in /home/you/.ssh/id_rsa.pub.
# The key fingerprint is:
# 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db tu_email@ejemplo.com
</textarea>
<br />
<br />
Con esto habremos creado nuestra clave SSH.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>4. Añadir Clave a GitHub</b></span><br />
<span style="color: cyan; font-size: xx-large;"><b><br /></b></span>
Ahora lo que haremos será añadir la SSH Key a GitHub. Para ello vamos a la carpeta ".ssh" que estará en el directorio "Home". Abrimos el archivo "id_rsa.pub" con gedit y copiamos el contenido.<br />
<br />
Una vez hecho vamos a GitHub y nos dirigimos a ajustes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqTOV16ihdbBLSeLfdHBy0G0MMc37mE9sTUHFhkYl1VPCy1iraBTTUxG-YQKqm2ehJp8XdugrD7yY1Z92MUPZ8Na9oAnki1Mxs_OUfCVML0IX9qP8oWxZnL0GbhNqnRVR7vL0DWyZVT3Kn/s1600/GitHub+SSH+Key.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqTOV16ihdbBLSeLfdHBy0G0MMc37mE9sTUHFhkYl1VPCy1iraBTTUxG-YQKqm2ehJp8XdugrD7yY1Z92MUPZ8Na9oAnki1Mxs_OUfCVML0IX9qP8oWxZnL0GbhNqnRVR7vL0DWyZVT3Kn/s640/GitHub+SSH+Key.PNG" width="640" /></a></div>
<br />
<br />
Allí iremos a la pestaña "SSH Keys". Le daremos a "Add SSH Key" arriba a la derecha, y en el cuadro de texto pega el contenido de la clave, guarda los cambios y acepta.<br />
Para comprobar que funcione, ejecutaremos lo siguiente en Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">ssh -T git@github.com
</textarea>
<br />
<br />
Deberá aparecer lo siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 541px;" wrap="VIRTUAL">The authenticity of host 'github.com (207.97.227.239)' can't be established.
# RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
# Are you sure you want to continue connecting (yes/no)?
</textarea>
<br />
<br />
Escribimos "yes" y le damos a enter. Veremos este código:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 489px;" wrap="VIRTUAL">Hi username! You've successfully authenticated, but GitHub does not
# provide shell access.
</textarea>
<br />
<br />
Con esto ya estaremos listos para subir el Device Tree a GitHub.<br />
<br />
<br />
<span style="color: cyan; font-size: xx-large;"><b>5. Crear Repositorio</b></span><br />
<br />
Ahora crearemos el repositorio en nuestro GitHub y almacenaremos el código allí. Lo primero de todo será situarnos en la carpeta la cual vayamos a subir.<br />
<br />
*Pondré mi ejemplo con la carpeta device de mi Ace 3 (loganreltexx) modificada para OmniRom 4.4*<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd omni/device/samsung/loganreltexx
</textarea>
<br />
Ahora escribimos:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">git init
</textarea>
<br />
<br />
Eso inicializará un repo vacío en la carpeta ".git" en la ruta donde estamos. Lo siguiente será configurar los archivos que se copiarán en GitHub. Ejecuta:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">git add .
</textarea>
<br />
<br />
Ahora comentaremos los archivos que vamos a subir con el siguiente comando:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL"> git commit -m "first commit"
</textarea>
<br />
<br />
Hecho esto vamos a GitHub y clicamos en la cruz y le damos a "Nuevo repositorio".<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfjAV_Xqw9IKTXR1PpFvakpWry2QsWU7ToIPandfp8Lko2olX5aYv8kKtDkAzIRox6ZF-XCVs-2FFqbfBotiy1zDEnx8vl68EG3i6K3PjyoNepbqceaqDMhxmo65Rm-BBt4lBwZo811Sgw/s1600/GitHub+Repo.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="184" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfjAV_Xqw9IKTXR1PpFvakpWry2QsWU7ToIPandfp8Lko2olX5aYv8kKtDkAzIRox6ZF-XCVs-2FFqbfBotiy1zDEnx8vl68EG3i6K3PjyoNepbqceaqDMhxmo65Rm-BBt4lBwZo811Sgw/s640/GitHub+Repo.PNG" width="640" /></a></div>
<br />
<br />
Entraremos en la página de configuración del repositorio. Ahí añadimos un nombre para el repo y una descripción. Siguiendo mi ejemplo, lo haría así:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLypL97SBOWZYCM_9o1FuG7uPi2Zjiq9UU_lCTRNq7cu78TjFAQkleATTHD-k2JIDqGFU_444EsUkCREkoWFQnQV-AxDyqCdkAHCSHQ2wC6p5F4i2wazZfPw7A5aDw-0giwJ1OmyEwIyZa/s1600/Repo+Config.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLypL97SBOWZYCM_9o1FuG7uPi2Zjiq9UU_lCTRNq7cu78TjFAQkleATTHD-k2JIDqGFU_444EsUkCREkoWFQnQV-AxDyqCdkAHCSHQ2wC6p5F4i2wazZfPw7A5aDw-0giwJ1OmyEwIyZa/s640/Repo+Config.PNG" width="640" /></a></div>
<br />
<br />
Le damos a crear repositorio y verás la siguiente pantalla:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgej7z8zfuBc04zis3r2a7Q99ewT_D18tKVGIneQ2MSzwQTEITw1hIwQUwQzM0ehd-kKq81c9dkN7H4G9TRjMqlqEpC0NZuqhyphenhyphen4CNaJgGU4Oitjln6BuCiU36knmTsUvUs9oCRm4cdD_vVF/s1600/Repo+Link.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="504" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgej7z8zfuBc04zis3r2a7Q99ewT_D18tKVGIneQ2MSzwQTEITw1hIwQUwQzM0ehd-kKq81c9dkN7H4G9TRjMqlqEpC0NZuqhyphenhyphen4CNaJgGU4Oitjln6BuCiU36knmTsUvUs9oCRm4cdD_vVF/s640/Repo+Link.PNG" width="640" /></a></div>
<br />
<br />
<br />
Debéis copiar el código HTTPS que aparece al principio, o debajo, es el mismo. Entonces volvemos a Terminal y escribimos lo siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 636px;" wrap="VIRTUAL"> git remote add omni https://github.com/Javier-Alonso/omni_device_samsung_loganreltex.git
</textarea>
<br />
<br />
*Cambia "omni" por el nombre de la ROM en la que se basa el device tree, y el link cámbialo por el correspondiente al tuyo*<br />
<br />
Ahora crearemos la branch. Para ello:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL"> git branch android-4.4
</textarea>
<br />
<br />
*Android-4.4 lo cambias por la que estés trabajando (cm-11.0, kitkat, master, etc). Yo he puesto "android-4.4 porque así es como viene KitKat en el repo oficial de OmniRom*<br />
<br />
Y comprobamos:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">git checkout android-4.4
</textarea>
<br />
<br />
Hecha la comprobación, será el ansiado momento de subir los archivos. Tendrás que ejecutar en Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL"> git push -u omni android-4.4
</textarea>
<br />
<br />
*Como es evidente, sustituye "omni" y "android-4.4" por lo que hayas puesto antes*<br />
<br />
Te pedirá introducir la passphrase, la escribes y das a enter. Empezará a publicar los archivos de la carpeta elegida.<br />
<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>¡Listo! Ya Has Subido el Device Tree a GitHub</b></span></div>
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b><br /></b></span></div>
<div style="text-align: center;">
-----------------------------------------------------------------------------------------------------</div>
<div style="text-align: left;">
Iré actualizando el post con más cosas útiles sobre GitHub. Esto es todo de momento. Saludos!</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com0tag:blogger.com,1999:blog-568035879551155991.post-39874027894803248642015-08-16T16:54:00.000+01:002017-01-23T10:16:51.119+00:00Desempaquetar KernelMuy buenas a todos! Hoy os traigo un tutorial sencillo sobre cómo desempaquetar/extraer los archivos de vuestro kernel, también aplicable a recovery.<br />
<br />
<b><span style="font-size: large;"><br /></span></b>
<b><span style="font-size: large;">Requisitos:</span></b><br />
<b><span style="font-size: large;"><br /></span></b>
*Sistema operativo Windows o Linux<br />
*Conocimiento mínimo sobre ordenadores<br />
*Kernel/Recovery en formato ".img"<br />
<br />
<b>Atención</b>: asegúrate de que el nombre del kernel/recovery no tiene espacios. Recomiendo llamarlos boot.img y recovery.img respectivamente.<br />
<br />
Si ya tienes eso, empecemos con el tutorial:<br />
<br />
<br />
<span style="color: cyan; font-size: x-large;"><b>1. Descargar Android Image Kitchen</b></span><br />
<span style="color: cyan; font-size: x-large;"><b><br /></b></span>
Lo primero que haremos será descargar la herramienta necesaria para trabajar, por cortesía de @<a href="http://forum.xda-developers.com/member.php?u=4544860" target="_blank">osm0sis</a>, reconocido desarrollador de XDA.<br />
Los enlaces de descarga son los siguientes:<br />
<br />
- Windows: <a href="https://forum.xda-developers.com/attachment.php?attachmentid=3638835&d=1454959265" target="_blank">CLICK AQUÍ</a><br />
- Linux: <a href="http://forum.xda-developers.com/attachment.php?attachmentid=3229486&d=1427333849" target="_blank">CLICK AQUÍ</a><br />
<br />
Una vez terminada la descarga vayamos al siguiente paso.<br />
<br />
<br />
<span style="color: cyan; font-size: x-large;"><b>2. Extraer Archivos</b></span><br />
<br />
Ahora extrae el archivo descargado y copia la carpeta en el directorio que quieras (En Linux recomiendo en HOME).<br />
Si usas Windows no hay problema, pero si usas Linux sitúate (una vez extraída la carpeta) en el directorio con Terminal. Si la has puesto en HOME, tendrás que ejecutar:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd AIK-Linux
</textarea>
<b><br /></b><br />
<br />
<br />
<span style="color: cyan; font-size: x-large;"><b>3. Desempaquetar Imagen</b></span><br />
<span style="color: cyan; font-size: x-large;"><b><br /></b></span>
Ahora es el momento de desempaquetar la imagen. Para ello, seguiremos estos sencillos pasos:<br />
<br />
<b>1. </b>Copia el archivo ".img" a la carpeta contenedora de los archivos del programa<br />
<b>2. </b>Arrastra el kernel/recovery encima del archivo "unpackimg" y suelta<br />
<b>3. </b>Se abrirá un cuadro de diálogo y el kernel se extraerá en una subcarpeta<br />
<b>4. </b>Haz los cambios que quieras o lo que necesites<br />
<br />
Si usas Linux, los pasos 1 y 2 los harás con terminal. Para ello, ya ubicado en el directorio" ejecuta el siguiente comando:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">./unpackimg.sh boot.img
</textarea><br />
<br />
El nombre "boot.img" lo cambias por el nombre que tenga el archivo de imagen que quieras extraer.<br />
<br />
<br />
<span style="color: cyan; font-size: x-large;"><b>4. Re-empaquetar Imagen</b></span><br />
<span style="color: cyan; font-size: x-large;"><b><br /></b></span>
Ahora para volver a empaquetar la imagen con los cambios realizados, solo abrá que ejecutar el archivo "repackimg" haciendo doble click izquierdo. En Linux, se ejecutará el siguiente comando en Terminal:<br />
<b style="color: cyan; font-size: xx-large;"><br /></b> <textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">./repackimg.sh boot.img
</textarea><br />
<br />
El nombre "boot.img" lo cambias por el nombre que tenga el archivo de imagen que quieras empaquetar.<br />
<br />
<br />
<span style="color: cyan; font-size: x-large;"><b>5. Limpiar Carpeta de Trabajo</b></span><br />
<span style="color: cyan; font-size: x-large;"><b><br /></b></span>
Si quieres eliminar la carpeta con los datos extraídos de forma rápida, ejecuta el archivo "cleanup"<br />
En Linux, usa el siguiente comando de terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">./cleanup.sh
</textarea><br />
<br />
Eso sería todo el tutorial. Espero que os haya sido de ayuda. Saludos!<br />
<br />
<br />
<br />Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com2tag:blogger.com,1999:blog-568035879551155991.post-32990158206694620942015-08-16T15:02:00.000+01:002015-08-28T13:43:33.413+01:00Compilar OmniRom 4.4 Desde SourceBuenas a todos los seguidores! Hoy aprenderemos a compilar OmniRom, la segunda que he compilado y que se caracteriza por ser lo más OpenSource posible, con el código de TWRP añadido.<br />
Para compilarla necesitaréis varias cosas previas que ya haya hecho un desarrollador, ya que incluso yo no sé hacerlas todavía. En cuanto aprenda, lo publicaré y añadiré enlace para redireccionaros a la publicación y luego seguiréis con este tutorial.<br />
Vayamos al lío:<br />
<br />
<br />
<span style="font-size: large;"><b>Pre-requisitos:</b></span><br />
<span style="font-size: large;"><b><br /></b></span>* Device Tree de CM11 para tu dispositivo (Buscad en GitHub)<br />
* Local_Manifest para tu dispositivo (recomendado)<br />
* TWRP para tu dispositivo (recomendado) <br />
* <a href="http://spanish-android-developers.blogspot.com.es/2015/08/inicializar-entorno-para-compilar.html" target="_blank">Entorno de Compilación Configurado</a><br />
<br />
En este tuto, voy a tomar el Device Tree de CyanogenMod 11, ya que si un desarrollador ha hecho un Device Tree para OmniRom, es que ya ha compilado dicha rom o está en ello.<br />
El device tree es lo más importante. Es lo necesario para que compile con los archivos y características de tu dispositivo para que la ROM sea compatible. Necesitas que algún desarrollador experto lo haga. Yo estoy aprendiendo y en cuanto pueda lo compartiré. El device tree se compone principalmente de tres partes: Device, Kernel y Vendor. <a href="https://github.com/TheWhisp/android_device_samsung_jena" target="_blank">Aquí</a> tenéis un ejemplo de device tree (solo device) y como veis son varios archivos y carpetas. Fijaos arriba a la izquierda donde pone "branch" y es una pestaña deslizable. Debéis aseguraros de que vuestro device tree tiene cm-11.0 en esa pestaña.<br />
Dicho esto, prosigamos:<br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
<b style="color: cyan; font-size: xx-large;">1. Crear Directorio de Trabajo:</b><br />
<br />
El primer paso será crear la carpeta en la que tendremos todo los archivos y en la que se trabajará. La podéis llamar como queráis, pero yo recomiendo llamarla por el nombre de la ROM que vayamos a compilar. Para crear la carpeta hacemos lo siguiente con Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 410px;" wrap="VIRTUAL">mkdir omni
*Como dije, podéis cambiar omni por lo que queráis*
</textarea><br />
<br />
Ahora se habrá creado una carpeta en el directorio Home. La podéis ver si abrís el explorador de archivos. Ahora, vamos a situarnos en esa carpeta con Terminal. Para ello:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd omni
</textarea><br />
Con esto ya habremos creado la carpeta de trabajo y nos habremos situado en ella en Terminal.<br />
<br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
<b style="color: cyan; font-size: xx-large;">2. Descargas las Sources:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
En este paso inicializaremos los archivos de código abierto de la ROM que vayamos a compilar, en este caso OmniRom 4.4, y las sincronizaremos a nuestra carpeta de trabajo. Para este paso es necesario el binario repo que ya instalamos al inicializar el entorno de trabajo.<br />
Estando situados en la carpeta "omni", ejecutamos el siguiente comando:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 466px;" wrap="VIRTUAL">repo init -u git://github.com/omnirom/android.git -b android-4.4
</textarea><br />
Puede que el terminal os dé algún error y os pida ejecutar algún comando para instalar archivos necesarios. En ese caso, copia lo que te diga el Terminal que ejecutes, y cuando termine vuelve a ejecutar el comando de arriba.<br />
Si todo ha ido bien, se iniciará tu repositorio local usando las sources de OmniRom 4.4. Para asegurarse de que se ha descargado, vete a la carpeta omni con el explorador de archivos, y pulsa Ctrl+h y deberá aparecer una carpeta llamada ".repo"<br />
Al finalizar la descarga, Terminal dirá que tienes que registrarte con una cuenta de GitHub. Id a su <a href="https://github.com/" target="_blank">página oficial</a> y os creáis una cuenta. Una vez creada y comprobada por correo, volver a Terminal y ejecutáis estos dos comandos por separado:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 418px;" wrap="VIRTUAL">git config --global user.email "tu@correo.com"
git config --global user.name "Tu Nombre" <br></textarea><br />
*Reemplaza "tu@correo.com" y "Tu Nombre" por los que hayas usado al crear la cuenta. Ojo, sin las comillas pero con el espacio después de "user.email" y "user.name" respectivamente*<br />
<br />
Una vez registrado recomiendo ejecutar otra vez el comando de descarga de sources y veréis que os aparecerá que estáis identificados al terminar el proceso. Por otro lado, cuando el Terminal os pida si queréis visualización de colores en vuestra cuenta (Enable colour display) escribe una N y le dais a enter.<br />
<br />
Hecho esto ya tendremos nuestra carpeta de trabajo lista para obtener las sources de la ROM con la que vamos a trabajar.<br />
<br />
<br />
<b style="color: cyan; font-size: xx-large;">3. Sincronizar Repositorio:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
Este es el paso más pesado para todo el mundo, ya que descargaremos las sources y pesa entre 10-15GB aproximadamente. Es muy recomendado tener una velocidad de Internet elevada si no quieres morir de aburrimiento. En caso de que quieras aburrirte, ejecuta lo siguiente en Terminal:<br />
<br />
*Atención, debemos estar situados en la carpeta omni. Si has seguido los pasos tal cual sin cerrar el Terminal, estarás situado en ella (lo veréis donde dice ~/omni~$ al principio de la línea). Si no, sitúate ejecutando "cd && cd onmi".*<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">repo sync -j#
</textarea><br />
El # indica el número de trabajos que se usarán para descargar los archivos. Depende de tu velocidad de Internet cuánto ponerle. Yo recomiendo usar de 2 a 4. Por lo tanto, si usas dos el comando quedaría así: repo sync -j2<br />
<br />
Tras ejecutar el comando empezará la descarga, y llevará unas cuantas horas, así que podéis ir a tomaros algo o salir a caminar, que es saludable. Cuando termine la sincronización, ya tendremos las sources en nuestra carpeta de trabajo.<br />
<br />
<br />
<b style="color: cyan; font-size: xx-large;">4. Configurar Tu Dispositivo:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
En este paso es quizá el más complicado ya que no solo será ejecutar comandos en Terminal, sino que tendréis que editar y escribir líneas en varios archivos. Sin embargo, si sigues bien el tutorial te resultará bastante sencillo.<br />
<br />
Como dije al principio, es necesario tener localizado el device, kernel y vendor de nuestro dispositivo. En este paso lo que haremos en añadir un archivo a la carpeta de trabajo para que sincronice y descargue las sources específicas de nuestro dispositivo.<br />
<br />
Tomaré de ejemplo mi actual dispositivo, el Galaxy Ace 3. Aquí tenéis enlaces de GitHub para que veáis con qué nombre suelen estar:<br />
<br />
- Device: <a href="https://github.com/kostoulhs/android_device_samsung_loganreltexx">https://github.com/kostoulhs/android_device_samsung_loganreltexx</a><br />
- Kernel: <a href="https://github.com/kostoulhs/android_kernel_samsung_loganreltexx">https://github.com/kostoulhs/android_kernel_samsung_loganreltexx</a><br />
- Vendor: <a href="https://github.com/kostoulhs/proprietary_vendor_samsung_loganreltexx">https://github.com/kostoulhs/proprietary_vendor_samsung_loganreltexx</a><br />
<br />
Os preguntaréis por qué pone loganreltexx. Ese el el codename del Galaxy Ace 3. Podéis ver fácilmente el vuestro en el build.prop (en la carpeta system) de tu dispositivo, concretamente en la línea "ro.product.name".<br />
<br />
Ahora que tenemos localizados los tres enlaces, vamos a sincronizarlos con nuestra carpeta. Para ello hay dos opciones: usar Git Clone o usar Local Manifest.<br />
Si usamos Local Manifest, se sincronizarán las sources del dispositivo cada vez que ejecutemos el comando para sincronizar repositorio (repo sync), por lo que se sobreescribirán los archivos de nuestro dispositivo, pero tranquilo, no desaparecen.<br />
Por otro lado, al usar Git Clone, las sources del dispositivo se descargarán a la carpeta de trabajo pero no serán afectadas cuando sincronizamos repositorio. Esta opción es recomendada si haces cambios en tu source una vez descargas. Si eres un usuario nuevo, no creo que vayas a modificar nada, así que elige la opción de Local Manifest. En cambio, si eres un usuario avanzado y tú mismo sabes crear device tree, usa Git Clone.<br />
<br />
Atención: Seguramente si ya hay un desarrollador que ha hecho un Device Tree para CyanogenMod 11, ya haya hecho un local_manifest. Lo encontraréis en su página de GitHub y tendrá un aspecto como <a href="https://github.com/kostoulhs/loganreltexx_local_manifest" target="_blank">éste</a>. En este caso, primero seleccionamos la branch con la que estamos trabajando en la pestaña. La página recargará, entonces clicamos en "local_manifest.xml" y veréis las líneas que tendréis que poner (copiar y pegar) cuando creéis el local manifest siguiendo el tutorial.<br />
<br />
<br />
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large; text-align: left;">Git Clone:</b></div>
El código que usaremos será el siguiente:<br />
<div style="text-align: left;">
<br /></div>
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">git clone repo -b branch directorio-local
</textarea><br />
- repo: lo sustituimos por el link del repositorio de nuestro device tree.<br />
- branch: lo sustituimos por la ROM con la que trabajemos. En este caso: cm-11.0<br />
- directorio local: lo sustituimos por la carpeta donde se descargarán los archivos.<br />
<br />
*Por defecto, el directorio local suele ser device/marca/codename, vendor/marca/codename y kernel/marca/codename*<br />
<br />
Un ejemplo con Git Clone para mi Galaxy Ace 3 sería así:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 379px;" wrap="VIRTUAL">git clone https://github.com/kostoulhs/android_device_samsung_loganreltexx -b cm-11.0 device/samsung/loganreltexx
</textarea><br />
<br />
Haríamos esto mismo con el kernel y con el vendor.<br />
<br />
<br />
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large; text-align: left;">Local Manifest:</b></div>
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large; text-align: left;"><br /></b></div>
<div style="text-align: left;">
Aquí explicaros que los repositorios varían muchísimo si tu dispositivo no es soportado oficialmente por la ROM con la que trabajes, pero hemos hecho este tutorial para que puedas portarlo para tu dispositivo. No digo esto en Git Clone ya que si lo usas supongo que ya eres un usuario más experimentado.</div>
<div style="text-align: left;">
Pues a lo que iba, no hay una fórmula única para hacer el local manifest, pero intentaré explicarme lo mejor que pueda. Antes que nada, habrá que ejecutar los siguientes comandos [antes debéis estar situados en omni (cd && cd omni)]:<br />
<br /></div>
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">mkdir .repo/local_manifests
</textarea><br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 339px;" wrap="VIRTUAL">nano .repo/local_manifests/local_manifest.xml
</textarea><br />
*También podéis crear la carpeta y el archivo usando el explorador de archivos*<br />
<br />
Se abrirá en terminal el archivo vacío. La estructura por defecto del Local Manifest es así:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 98px; margin: 0px; width: 663px;" wrap="VIRTUAL"><?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project path="directorio local" name="nombre del repo" remote="página del repo" revision="branch del repo" />
</manifest>
</textarea><br />
<br />
*Perdón, pero no me cabe el línea entere. La línea de "proyect path" llega hasta "branch del repo". No hay punto y aparte, es toda seguida*<br />
<br />
- directorio local: ruta donde estará el repo (device, kernel y vendor)<br />
- nombre del repo: enlace del repo quitando "https://github.com/"<br />
- página del repo: en el 99% de los casos hay que poner github<br />
- branch del repo: en nuestro caso, cm-11.0<br />
<br />
Pues haríamos una lína de proyect por cada repositorio que necesitemos para nuestro dispositivo. Si ya hay un desarrollador que ha hecho un local manifest, no hay problema, solo copia y pega. Si no, vamos al lío:<br />
<br />
Si tu dispositivo no tiene soporte oficial ni local manifest ya creado, tendrás que hacerlo tú mismo. Es un poco complicado, ya que para cada marca y modelo habrá que añadir unos repositorios comunes (master) a parte del device y el vendor. No domino ninguno, así que puede que no te funcione. Ahí tendrás que meterte a investigar por tu cuenta.<br />
<br />
Para un dispositivo Samsung con chip <b>Qualcomm MSM8930</b> tendríais que hacer un Local Manifest así:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAZcn4HNMOn6AxSvLFOywwBy4B9FtOOjTugo8W1CaKXoaGmMXUcbShvd2r2ra5VMt8bIbrrjJsPYRxDaKmniM1A5pC9OTTrh4sZKJMExN6E5im2Xwv0pnnCnjTr76rvtm7OLgPrTSWrKl2/s1600/samsung_qcom-msm8930_omnirom.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="108" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAZcn4HNMOn6AxSvLFOywwBy4B9FtOOjTugo8W1CaKXoaGmMXUcbShvd2r2ra5VMt8bIbrrjJsPYRxDaKmniM1A5pC9OTTrh4sZKJMExN6E5im2Xwv0pnnCnjTr76rvtm7OLgPrTSWrKl2/s640/samsung_qcom-msm8930_omnirom.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
*Podéis copiar el texto <a href="http://pastebin.com/8t28Tpze" target="_blank">aquí</a>*<br />
<br />
Como no tiene soporte oficial hay que añadir los repos comunes de OmniRom y CyanogenMod. Las línas sombreadas (dos últimas) tienen que ser ya de tu dispositivo, tenéis que buscarlas en el device tree que haya hecho algún desarrollador para tu dispositivo. Tenéis que sustituir codename y repo por vuestro correspondiente. Luego el kernel puede que tu desarrollador haya cogido la base del común (la primera línea que ves) y la haya modificado. En ese caso, cambia CyanogenMod por el nombre de la cuenta de dicho desarrollador.<br />
También puede que los repo 2º, 3º y 7º los haya copiado en su propio repositorio (podéis ver un ejemplo <a href="https://github.com/kostoulhs?tab=repositories" target="_blank">aquí</a>, justo debajo del segundo pone "forked from"). En ese caso lo puedes cambiar o puedes dejarlo así, debería funcionar igual, aunque si tu desarrollador lo ha copiado, cámbialo por el repo de él.<br />
<br />
Espero haberme explicado, ya que esto puede ser lo más difícil de entender, sobre todo si como he dicho, no tienes un local manifest ya hecho. La mecánica si tu dispositivo no es <b>Qualcomm MSM8930 </b>es<b> </b>similar. Tenéis que buscar en el repo de <a href="https://github.com/CyanogenMod" target="_blank">CyanogenMod</a> y <a href="https://github.com/omnirom" target="_blank">OmniRom</a> los repositorios comunes acorde con tu dispositivo y lo sustituyes en las líneas que dicen CyanogenMod y OmniRom, es cuestión de buscar y probar.<br />
<br />
Un ejemplo de cómo es el de mi dispositivo, lo tenéis <a href="https://github.com/kostoulhs/loganreltexx_local_manifest/blob/cm-11.0/local_manifest.xml" target="_blank">aquí</a>. Podéis ver que los tres primeros repositorios son common de CyanogenMod, pero que el desarrollador a copiado (forked) a su propio repo y lo ha cambiado en su local manifest. Espero que la explicación os haya resultado comprensible. Sigamos:<br />
<br />
Una vez finalizado de escribir el Local Manifest, presiona Ctrol+O y enter para guardar. Luego Ctrl+x para salir del editor. Revisa que el archivo esté en cm11/.repo/local_manifest y que se haya guardado correctamente.<br />
<br />
<br />
Después de todo esto, ejecuta el comando "repo sync" de nuevo. Tranquilo, no tardará tanto como la primera vez, ya que solo descargará los repo que añadimos en el local manifest.<br />
<br />
<br />
<br />
<b style="color: cyan; font-size: xx-large;">5. Editar La Source:</b><br />
<br />
<div>
Aquí se viene un paso que no aparece en la entrada de compilar CyanogenMod 11, y son ligeros cambios y modificaciones que haremos a las sources descargadas del device tree de nuestro dispositivo y demás. Esto es necesaria para cualquier ROM que queramos compilar y que la estemos basando en CyanogenMod. En este tutorial saldrá específicamente para OmniRom. Primero de todo, debemos hacer:<br />
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Eliminar Archivos</b></span></div>
<div style="text-align: center;">
<br /></div>
</div>
<div>
Debemos borrar los archivos cm.mk y cm.dependencies. Estos dos archivos estarán en la carpeta omni/device/samsung/codename. Además, aparecerá un cm.dependecies en omni/device/samsung/qcom-common si usamos ese repo. En este último caso, sólo renómbralo a onmi.dependencies.<br />
<div style="text-align: left;">
<span style="color: magenta;"><span style="font-size: large;"><b><br /></b></span></span></div>
<span style="color: magenta; font-size: large;"></span><br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Añadir omni.mk</b></span></div>
<span style="color: magenta; font-size: large;">
</span></div>
<br />
Ahora ha llegado el momento de añadir los archivos que borramos, pero con el código de OnmiRom. Creamos en la ruta un archivo vacío y lo llamamos onmi.mk y lo abrimos con gedit. Ahora hay que escribirlo. Para los Samsung, tenéis <a href="http://pastebin.com/P8L9myyj" target="_blank">aquí</a> una base creada por mí.<br />
<br />
<div>
Copia y pega el contenido y modifica lo necesario. </div>
<div>
<br />
- Donde dice "codename" ponéis el nombre de vuestro dispositivo (ya sabéis dónde aparece en el build.prop). ¡Ojo! Donde dice "full_codename.mk" ahí "codename" lo cambiarás por el nombre con el que salga ese archivo full en la ruta donde mismo estás, aunque por defecto tiene el mismo nombre que el codename. <br />
- En la línea 30, donde dice "model" (solo el minúscula) escribimos el modelo del dispositivo. Lo puedes encontrar en la línea "ro.product.device" del archivo build.prop de tu dispositivo.<br />
- Y por último, lo que debéis poner en "BUILD_FINGERPRINT" y "PRIVATE_BUILD_DESC" también lo podéis ver en el build.prop. El primero aparecerá como "ro.build.fingerprint" y el segundo como "pro.build.description".<br />
<br />
Guardamos los cambios y cerramos.<br />
<br />
*Atención: Es una base, puede que tengáis que añadir cosas diferentes o variar*</div>
<div>
<br />
<b></b><br />
<div style="text-align: center;">
<b><b><span style="color: magenta; font-size: x-large;">Añadir omni.dependencies</span></b></b><br />
<br />
<div style="text-align: left;">
Ahora vamos con el segundo archivo a crear. Es bastante fácil. Creamos archivo vacío (con nombre omni.dependencies) en el directorio y abrimos con gedit. Ahora toca escribirlo; este archivo se basa en el local_manifest. <a href="https://github.com/OliverG96/android_device_samsung_serranoltexx/blob/android-4.4/omni.dependencies">Aquí </a>tenéis un ejemplo de como es. Si has entendido el local_manifest, te resultaŕa fácil hacer este archivo. Varía un poco, ya que aquí la terminología es:</div>
</div>
<br />
- remote: cuenta de github (CyanogenMod, onmirom, etc)<br />
- repository: enlace del repo quitando "https://github.com/" y el nombre de la cuenta.<br />
- target_path: ruta local del repo. La misma que ponga el local_manifest<br />
- revision: igual que el local_manifest<br />
<br />
Debéis añadir todos los repos de vuestro local manifest siguiendo el formato del ejemplo. Al terminar guardamos y cerramos.<br />
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large;"><br /></b></div>
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large;">Editar manifest.xml</b></div>
<div style="text-align: center;">
<br /></div>
Con este paso añadiremos la cuenta del developer de github para nuestro device tree al manifest de omnirom. Es necesario porque si no dará error al intentar compilar; dirá que no encuentra el repo en su servidor. Pues nos dirijimos a omni/.repo y abrimos el manifest.xml con gedit. Verás lo siguiente al principio:<br />
<br />
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7Y8mfGdzTUGMt7e_pAkUFfnc75f2O1Jk116bh3IZoOJN0-KrZbV6h2RtRmOx9yfLRBebPSGIGko7lV93PYnC-M5J1I9eedtIe9cwBvuxvFt8uRjG-HtV3hUmqjCXbZ7UYgGXQWv5yrkhM/s1600/Screenshot+from+2015-08-14+16%253A55%253A55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7Y8mfGdzTUGMt7e_pAkUFfnc75f2O1Jk116bh3IZoOJN0-KrZbV6h2RtRmOx9yfLRBebPSGIGko7lV93PYnC-M5J1I9eedtIe9cwBvuxvFt8uRjG-HtV3hUmqjCXbZ7UYgGXQWv5yrkhM/s1600/Screenshot+from+2015-08-14+16%253A55%253A55.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Para añadir la cuenta de github de donde sacamos el device tree de nuestro dispositivo, lo añadimos siguiendo la estructura de la imagen de arriba:<br />
<br />
Copia el remote de github debajo del de onmirom, y en name cambia "github" por el nombre de la cuenta, y luego en fetch añades el mismo nombre después de la barra. Para mi dispositivo (cuya cuenta donde está el device tree se llama "kostoulhs" se vería así:<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOaD8qLSnx10P2WXPdImGPv1JlxlQj2lRH2bmJOnrcF_kuqqI0hcgNeM3w-1Olm-83sIp9ZeOdeOoMzkSXvmiCSeKXKayKlfgmdt64nhsiV2Sc1vL7zeuX6PwRU7IXh0ktXjSiSja4hix7/s1600/Screenshot+from+2015-08-14+17%253A05%253A26.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOaD8qLSnx10P2WXPdImGPv1JlxlQj2lRH2bmJOnrcF_kuqqI0hcgNeM3w-1Olm-83sIp9ZeOdeOoMzkSXvmiCSeKXKayKlfgmdt64nhsiV2Sc1vL7zeuX6PwRU7IXh0ktXjSiSja4hix7/s1600/Screenshot+from+2015-08-14+17%253A05%253A26.png" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
Listo. Guarda los cambios y cierra el archivo. Sigamos.<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div style="text-align: center;">
<br />
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<b><span style="color: magenta;"><b><span style="color: magenta;"><b><span style="color: magenta;"><b><span style="color: magenta; font-size: x-large;">Añadir AndroidProducts.mk</span></b></span></b></span></b></span></b></div>
<span style="font-size: large;"><b><span style="font-size: large;"><span style="color: magenta;"><b><span style="font-size: large;"><span style="color: magenta;">
</span></span></b></span></span></b></span></div>
<span style="font-size: large;"><b><span style="font-size: large;"><span style="color: magenta;">
</span></span></b></span></div>
<span style="font-size: large;">
</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
<span style="color: magenta;"></span><br />
<div style="text-align: center;">
<div style="text-align: left;">
Otro archivo que hay que crear en la misma ruta. Seguimos el mismo procedimiento (créalo con el nombre AndroidProducts.mk) y lo abrimos con gedit. Pegad el contenido de <a href="https://github.com/omnirom/android_device_samsung_n7100/blob/android-4.3/AndroidProducts.mk">este ejemplo.</a></div>
</div>
</div>
<div>
Ahora para hacerlo compatible para nuestro dispositivo, haz lo siguiente:<br />
<br />
- En la primera línea de "LOCAL_DIR" cambia "aosp_n7100.mk" por "full_codename.mk". Cambia codename por el de tu dispositivo, o como dije antes, por el nombre con el que aparezca ese archivo en la ruta.<br />
- En la segunda línea, cambia "n7100" por el codename de tu dispositivo.<br />
<br />
Guardamos los cambios y cerramos.<br />
<div style="text-align: left;">
<span style="color: magenta;"><span style="font-size: large;"><b> </b></span></span><span style="color: magenta;"><span style="font-size: large;"><b> </b></span></span></div>
<div style="text-align: center;">
<b><span style="color: magenta; font-size: x-large;">Editar vendorsetup.sh</span></b></div>
<div style="text-align: center;">
<span style="color: magenta;"><span style="font-size: large;"><b><br /></b></span></span></div>
En la misma ruta (omni/device/samsung/codename) abrimos el archivo "vendorsetup.sh" con gedit. Nos aparecerá una línea así:<br />
<blockquote class="tr_bq">
add_lunch_combo cm_device-userdebug</blockquote>
Simplemente cambia "cm" por "omni". Listo, guarda y sal.<br />
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br />
<span style="color: magenta;"><span style="font-size: large;"><b> </b></span></span><b style="color: cyan; font-size: xx-large;">6. Añadir Código TWRP</b></div>
<div style="text-align: center;">
<br /></div>
Hasta ahora todo había sido muy fácil. Pero ahora llega lo complicado. Hay que editar archivos igual, pero es más difícil saber qué añadir.<br />
<div style="text-align: left;">
<br /></div>
<span style="color: magenta; font-size: large;"></span><br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Editar BoardConfig.mk</b></span></div>
<span style="color: magenta; font-size: large;">
</span>
<br />
<div style="text-align: center;">
<br /></div>
<div>
Esta parte es la más complicada. Primero de todo vete a onmi/device/samsung/codename y abre el archivo BoardConfig.mk con Gedit. Busca una línea (Ctrl+f) llamada TARGET_RECOVERY_INITRC. Si aparece, después del igual estará escrita una ruta a un archivo "init.recovery.rc". Id a esa ruta (suele estar en rootdir dentro de omni/device/samsung/codename) y abre el archivo. Al principio verás lo siguiente:<br />
<span style="color: magenta;"><span style="font-size: large;"><span style="font-size: small;"><span style="color: black;"><br /></span></span></span></span>
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">on init
export PATH /sbin
</textarea><br />
<br />
Añade debajo la siguiente línea:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">export LD_LIBRARY_PATH .:/sbin
</textarea><br />
<br />
Y debería quedar así:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">on init
export PATH /sbin
export LD_LIBRARY_PATH .:/sbin
</textarea><br />
<br />
Guarda los cambios y sal. Sigamos trabajando:<br />
Luego, vuelve a BoardConfig.mk y busca la línea "TARGET_RECOVERY_LCD_BACKLIGHT_PATH" y escribe delante de esa línea escribe un almohadilla (#). La línea se volverá azul. Tanto esa línea como la de "TARGET_RECOVERY_INITRC" estarán debajo de una línea con la etiqueta #Recovery.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span class="pl-c">Ahora llega lo complicado. Hay que añadir líneas (flags) de TWRP. Cuesta un poco saber qué líneas añadir. Puede que tengas la suerte de que haya TWRP para tu dispositivo, por lo que el desarrollador tendrá en su Device Tree, dentro del repo device en branch saldrá "TWRP", entonces allí estará el archivo BoardConfig.mk y lo puedes abrir y buscar las líneas a copiar. Es por ello que al principio puse en pre-requisitos tener TWRP. Si no, tendrás que hacerlo tú mismo. Para cada dispositivo es diferente, y no tengo tiempo para explicar cada línea, así que aquí os dejo un <a href="http://forum.xda-developers.com/showthread.php?t=1943625" target="_blank">tutorial en XDA</a> (en cuanto tenga tiempo hago un post con eso traducido y explicado).</span></div>
<div style="text-align: left;">
<span class="pl-c"><br /></span></div>
<div style="text-align: left;">
<span class="pl-c">Aquí tenéis un ejemplo de las líneas que añadí para mi dispositivo:</span></div>
<div style="text-align: left;">
<span class="pl-c"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbce-MCXIW6mJRZ4wShGA284hqOPgLRmU9RIP3goNNrF5VzUeWW8N3-S_Mg_9rAbGiBTmUAZVFiaaWF6iy7xzrbiibaGoyvczTLPhK6mg8FVafIUi68NvgvPfFLvz7yebc1_ctWmfBkphe/s1600/Screenshot+from+2015-08-14+17%253A47%253A24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbce-MCXIW6mJRZ4wShGA284hqOPgLRmU9RIP3goNNrF5VzUeWW8N3-S_Mg_9rAbGiBTmUAZVFiaaWF6iy7xzrbiibaGoyvczTLPhK6mg8FVafIUi68NvgvPfFLvz7yebc1_ctWmfBkphe/s640/Screenshot+from+2015-08-14+17%253A47%253A24.png" width="640" /></a></div>
<div style="text-align: left;">
<span class="pl-c"><br /></span></div>
<div style="text-align: left;">
<span class="pl-c">Si sois capaces de entender cómo funciona el rollo, genial. Como he dicho, pronto haré un post con los flags traducidos. Las líneas las añades al final del archivo bajo la etiqueta "#TWRP config". También puedes buscar dispositivos similares al tuyo con OmniRom y mirad el BoardConfig de su device tree (ojo, abriendo la pestañita branch y elige omni-4.4).</span></div>
<div style="text-align: left;">
<span class="pl-c"><a href="https://github.com/OliverG96/android_device_samsung_serranoltexx/blob/android-4.4/BoardConfig.mk" target="_blank">Aquí</a> tenéis un ejemplo que usa las flags básicas para un Samsung. <a href="http://tipsstrips.blogspot.com.es/2015/02/compile-twrp-for-any-android.html" target="_blank">Aquí</a> otro ejemplo más básico todavía.</span><br />
<span class="pl-c"><br /></span>
<span class="pl-c">*Atención, la línea que pusimos la almohadilla antes, indica la ruta de la configuración de brillo. Como véis en la imagen, se hace una línea de código TW para esa función*</span></div>
<div style="text-align: left;">
<span class="pl-c">Hechos los cambios, guarda y cierra.</span></div>
<div style="text-align: left;">
<br /></div>
<span style="color: magenta;"></span><br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>Recovery.fstab</b></span></div>
<span style="color: magenta;">
</span>
<br />
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Para esto lo más sencillo es coger y en omni/device/samsung/codename creamos una carpeta llamada "recovery". Dentro, creamos un archivo llamado twrp.fstab</div>
<div style="text-align: left;">
Ahora abrimos el archivo, y primero que todo escribiremos los mount points de nuestro dispositivo. Los tenéis en la carpeta rootdir que tuvimos que visitar en un paso anterior, en el archivo llamado fstab. Son las líneas que digan algo así como "dev/block/..."</div>
<div style="text-align: left;">
Pues habrá que copiarlas a twrp.fstab, pero con orden diferente. Aqúi podréis ver la diferencia de formato:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
- <a href="https://github.com/kostoulhs/android_device_samsung_loganreltexx/blob/twrp/rootdir/fstab.qcom">fstab.qcom</a></div>
<div style="text-align: left;">
- <a href="https://github.com/kostoulhs/android_device_samsung_loganreltexx/blob/twrp/recovery/twrp.fstab" target="_blank">twrp.fstab</a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
*Atención, os abréis fijado que en el fstab.qcom salen menos mount points que en el de twrp, eso es porque en ese archivo no salen todos. Puedes ver los demás en el archivo recovery.fstab que está al <a href="http://spanish-android-developers.blogspot.com.es/2015/08/desempaquetar-kernel.html" target="_blank">desempaquetar un recovery</a> (recovery.img) para tu dispositivo (es muy fácil)*</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Como véis primero pondremos el nombre de la partición, luego el formato y luego la ruta. Cuando lo hayas pegado (ojo, no se pega lo que sale debajo de flags en el fstab.qcom; lo que está al final de la línea no se copia) tocará añadir flags. En la mayoría de los casos, son las mismas que en el ejemplo, y el número que sale en lenghts está en el fstab.qcom</div>
<div style="text-align: left;">
En el tutorial que pronto tendré sobre flags también traduciré esas. De momento, las tienes en el tuto de XDA que dejé antes.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Una vez terminado, guarda cambios y cierra.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Ahora fíjate en la imagen de arriba donde salían los flags que yo puse en el BoardConfig, la primera línea debajo de la etiqueta, es para especificar la ruta donde hemos creado el archivo twrp.fstab</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Hecho todo esto, tendremos la source lista para compilar.</div>
<blockquote class="tr_bq">
<pre><span style="font-size: small;"><span style="font-family: inherit;"></span></span>
</pre>
</blockquote>
<br />
<b style="color: cyan; font-size: xx-large;">7. Compilar la ROM:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
Este es el ansiado paso final con el que crearemos el zip flasheable para nuestro dispositivo. Para ello ejecuta en Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd omni
*Si ya estás ubicado no hace falta*
</textarea><br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">. build/envsetup.sh
</textarea><br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">lunch
</textarea><br />
Ahora localiza tu dispositivo (saldrá algo como omni_codename-userdebug) por su codename, que en mi caso sería loganreltexx (saldría así cm_loganreltexx-userdebug) y miramos el número que tiene. Lo escribimos y le damos enter. Luego ejecutamos:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">brunch codename
</textarea><br />
En este se sustituye codename por el de nuestro dispositivo (loganreltexx en mi caso).<br />
<br />
Tras ello empezará a compilar y tardará unas horas, todo depende de la potencia que tenga tu PC. Cuando termine, si todo ha ido bien, tendrás el archivo en out/target/codename. En mi caso estaría en out/target/loganreltexx.<br />
<br />
<br />
<br />
<div>
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>¡Listo! Ya has compilado OmniRom 4.4</b></span></div>
<span style="color: magenta; font-size: x-large;"><b><br /></b></span>
<br />
<span style="color: magenta; font-size: x-large;"><b><br /></b></span>
<span style="color: magenta; font-size: x-large;"><b><br /></b></span>
<br />
<div style="text-align: left;">
<b style="color: cyan; font-size: xx-large;">8. Errores al Compilar:</b></div>
<div style="text-align: left;">
<br />
<br /></div>
Posiblemente ocurran errores al compilar. Aquí diré la solución a los que me han surgido a mí:<br />
<div style="text-align: left;">
<br />
<br /></div>
<div>
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large;">Línea Recovery.fstab Dañada</b></div>
<div style="text-align: center;">
<span style="color: magenta; font-size: large;"><b><br /></b></span></div>
<div style="text-align: left;">
El error que aparecerá en terminal será algo así:<br />
<br /></div>
</div>
</div>
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">ValueError: malformed recovery.fstab line
</textarea><br />
Para solucionarlo abre BoardConfig.mk que hemos estado editando, y en la parte donde pusimos las flags de TW, pon una almohadilla delante de "TARGET_RECOVEY_FSTAB" y la línea se volverá azul. Guarda y cierra.<br />
<br />
<br />
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large;">Error con Radio FM</b></div>
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large;"><br /></b></div>
<div style="text-align: left;">
Este error será muy común, ya que OmniRom 4.4 no trae compatibilidad para la radio FM de manera nativa, por lo que sin modificar el repo de FM de CyanogenMod, dará error al compilar.</div>
<div style="text-align: left;">
Saldrán unas líneas en rojo que hablarán sobre varios archivos de FM y dirá algo como "Uses a deprecated API". La solución más rápida es desimplementar la radio FM de la ROM.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Para ello abrá que borrar el repo de fm del archivo omni.dependencies. Luego, abre el archivo codename.mk (en codename saldrá el nombre de tu disposotivo) y busca una línea que aparezca con la equiqueta "# FM Radio" y añade almohadilla a las líneas que aparezcan bajo esa etiqueta. Quedaría así:</div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBcTvo073gqyVxJNXa_rpKuqybNm8TZH8m0DjY3kBK8CCaOJ4YoYHE7bp_9pLILyGq4pHdARb2Gi2JPrWVAbcoVJiliJzOzyPIDwBXCtcdJXDXGK4uCSBj0M0UOHj4WrSw8qfCQERnSlTu/s1600/Captura.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBcTvo073gqyVxJNXa_rpKuqybNm8TZH8m0DjY3kBK8CCaOJ4YoYHE7bp_9pLILyGq4pHdARb2Gi2JPrWVAbcoVJiliJzOzyPIDwBXCtcdJXDXGK4uCSBj0M0UOHj4WrSw8qfCQERnSlTu/s1600/Captura.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large; text-align: left;">Error con Soft Reboot</b></div>
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large; text-align: left;"><br /></b></div>
<div>
<div style="text-align: left;">
<span style="text-align: center;">Otro error bastante común, ya que OmniRom no trae opción de reinicio suave. Si ocurre, aparecerá algo en terminal que hablará sobre una línea en el archivo "arrays.xml" que no está declarada.</span></div>
<div style="text-align: left;">
<span style="text-align: center;">Para arregralo vamos a "device/samsung/qcom-common/overlays/framework/base/core/res/res/values y abrimos el archivo arrays.xml</span></div>
<div style="text-align: left;">
<span style="text-align: center;">Borramos las dos líneas que hablen sobre soft reboot. Al final quedaría así:</span></div>
<div style="text-align: left;">
<span style="text-align: center;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSK8hiwde3euc6gMJLx5jg7rpsXJVhHoHVAksbbuohjXoOYeDMHq2jqkHb44ApDIIKqNQHaxMlI7p-vXDEmYpk-1ys71nUsJguo9G7znCV0g8g6rdTGAta_vpqlv5rKt0LadYrh99HgIMo/s1600/Captura1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="380" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSK8hiwde3euc6gMJLx5jg7rpsXJVhHoHVAksbbuohjXoOYeDMHq2jqkHb44ApDIIKqNQHaxMlI7p-vXDEmYpk-1ys71nUsJguo9G7znCV0g8g6rdTGAta_vpqlv5rKt0LadYrh99HgIMo/s400/Captura1.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div style="text-align: center;">
<b><span style="color: magenta; font-size: x-large;">Error Líneas no Declaradas</span></b></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: magenta; font-size: large;"><b><br /></b></span></div>
<div class="separator" style="clear: both; text-align: left;">
Este error ocurre mucho a la hora de compilar cualquier ROM. El error dice así:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="text-align: center;"><br /></span></div>
</div>
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 632px;" wrap="VIRTUAL">Resource at "" appears in overlay but not in the base package; use <add-resource> to add.
</textarea>
<br />
<br />
Es muy sencillo de solucionar y en cuanto pilles el truco será muy sencillo para ti. Justo al principio de la línea del error saldrá la ruta a un archivo donde se encuentra lo que no está declarado en la source base.<br />
En el 85% de los casos la ruta es:<br />
<blockquote class="tr_bq">
device/marca/codename/overlay/frameworks/base/core/res/res/values/config.xml</blockquote>
Abrimos ese archivo, y buscamos la línea de lo que no está declarado (que es lo que saldrá donde yo puse comillas en el código de error arriba). Una vez encontrado, lo pegaremos en el archivo base, que se encuentra en "framework/base/core/res/res/values/config.xml" (todo esto dentro de la carpeta omni". Abrimos el archivo y pegamos las líneas que ocupe el código. Yo recomiendo ubicarla cercana al mismo sitio donde estaba en el primer archivo. Una vez pegada en el archivo base, ya estará listo.<br />
<div style="text-align: center;">
<br />
<br /></div>
<div style="text-align: center;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<div style="display: inline !important;">
<span style="font-size: x-large;">
</span>
<br />
<div style="display: inline !important;">
<span style="color: magenta;"><b><b><b><span style="font-size: x-large;"><b>Error Shared Libraries</b></span></b></b></b></span></div>
<span style="color: magenta;"><span style="font-size: large;"><b><span style="font-size: large;"><b><span style="font-size: large;">
</span></b></span></b></span></span></div>
<span style="color: magenta;"><span style="font-size: large;"><b><span style="font-size: large;">
</span></b></span></span></div>
<span style="color: magenta;"><span style="font-size: large;">
</span></span></div>
</div>
</div>
<span style="color: magenta;">
</span>
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: large;"><b><br /></b></span></div>
<div style="text-align: left;">
Este error no sé si es común o no, pero bueno, sé la solución en este caso. Terminal dirá algo sobre que hay líneas de SHARED_LIBRARIES duplicadas en la ruta hardware/qcom/power y device/marca/codename/power</div>
<div style="text-align: left;">
Lo que hay que hacer es ir a la ruta power de nuestro dispositivo, y abrir el archivo Android.mk</div>
<div style="text-align: left;">
Entonces añadiremos una almohadilla delante de las líneas "LOCAL_SHARED_LIBRARIES", "LOCAL_SRC_FILES" y "include $(BUILD_SHARED_LIBRARY)". Al final quedaría así:</div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic6zX5slwgiWxBhe4QphbYEXTWfLdG_2b8gm5SlX5T1D3tkJWwA3T__IK9MAObShIQqq0sZgsq69otNUF52PElWA9NFJn_VrQ8mmGivzm79By4T4s-So7dAOfwFQaqxe29IQSGLRvU8aGt/s1600/Captura3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic6zX5slwgiWxBhe4QphbYEXTWfLdG_2b8gm5SlX5T1D3tkJWwA3T__IK9MAObShIQqq0sZgsq69otNUF52PElWA9NFJn_VrQ8mmGivzm79By4T4s-So7dAOfwFQaqxe29IQSGLRvU8aGt/s400/Captura3.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Yo solo tuve que hacerlo en esas líneas. A lo mejor ustedes tenéis que hacerlo en más o en menos, depende de cuáles estén duplicadas. Como veis, las líneas que edité ya aparecían en el Android.mk de hardware/qcom/power</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimQwgDkaPV3851W2L8i9iLhUl-vy9k1HEtQKgSXjOjspHAxUJXS59t5JgG1ut5J0p-bdlPYqUoKe7vdv6BlSl3RnlknOb0BnA9hV63FjacdQDcAlMfMf5ejZcbqA9tESCV9_JyLJD4EvWU/s1600/Captura5.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimQwgDkaPV3851W2L8i9iLhUl-vy9k1HEtQKgSXjOjspHAxUJXS59t5JgG1ut5J0p-bdlPYqUoKe7vdv6BlSl3RnlknOb0BnA9hV63FjacdQDcAlMfMf5ejZcbqA9tESCV9_JyLJD4EvWU/s400/Captura5.PNG" width="400" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Esos son todos los errores que me pasaron al compilar. Si sufres otro, no dudes en comentar y trataremos de ayudarte. Eso sería todo. Saludos!</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
</div>
</div>
Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com1tag:blogger.com,1999:blog-568035879551155991.post-34213127336774079342015-08-07T13:05:00.000+01:002015-08-28T21:38:01.990+01:00Compilar CyanogenMod 11 desde SourceBuenas a todos los seguidores! Ya que tenemos todo listo para compilar, vamos a empezar con la primera entrada para compilar. Empezaré con CM11, ya que es la primera que he logrado construir satisfactoriamente, y la ROM necesaria para basar las demás en ella.<br />
Para compilarla necesitaréis varias cosas previas que ya haya hecho un desarrollador, ya que incluso yo no sé hacerlas todavía. En cuanto aprenda, lo publicaré y añadiré enlace para redireccionaros a la publicación y luego seguiréis con este tutorial.<br />
Vayamos al lío:<br />
<br />
<br />
<span style="font-size: large;"><b>Pre-requisitos:</b></span><br />
<span style="font-size: large;"><b><br /></b></span>
* Device Tree de CM11 para tu dispositivo (Buscad en GitHub)<br />
* Local_Manifest de CM11 para tu dispositivo (recomendado)<br />
* <a href="http://spanish-android-developers.blogspot.com.es/2015/08/inicializar-entorno-para-compilar.html" target="_blank">Entorno de Compilación Configurado</a><br />
<br />
El device tree es lo más importante. Es lo necesario para que compile con los archivos y características de tu dispositivo para que la ROM sea compatible. Necesitas que algún desarrollador experto lo haga. Yo estoy aprendiendo y en cuanto pueda lo compartiré. El device tree se compone principalmente de tres partes: Device, Kernel y Vendor. <a href="https://github.com/TheWhisp/android_device_samsung_jena" target="_blank">Aquí</a> tenéis un ejemplo de device tree (solo device) y como veis son varios archivos y carpetas. Fijaos arriba a la izquierda donde pone "branch" y es una pestaña deslizable. Debéis aseguraros de que vuestro device tree tiene cm-11.0 en esa pestaña.<br />
Dicho esto, prosigamos:<br />
<br />
<br />
<b style="color: cyan; font-size: xx-large;">1. Crear Directorio de Trabajo:</b><br />
<br />
El primer paso será crear la carpeta en la que tendremos todo los archivos y en la que se trabajará. La podéis llamar como queráis, pero yo recomiendo llamarla por el nombre de la ROM que vayamos a compilar. Para crear la carpeta hacemos lo siguiente con Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 410px;" wrap="VIRTUAL">mkdir cm11
*Como dije, podéis cambiar cm11 por lo que queráis*
</textarea><br />
<br />
Ahora se habrá creado una carpeta en el directorio Home. La podéis ver si abrís el explorador de archivos. Ahora, vamos a situarnos en esa carpeta con Terminal. Para ello:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd cm11
</textarea><br />
Con esto ya habremos creado la carpeta de trabajo y nos habremos situado en ella en Terminal.<br />
<br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
<b style="color: cyan; font-size: xx-large;">2. Descargas las Sources:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
En este paso inicializaremos los archivos de código abierto de la ROM que vayamos a compilar, en este caso CyanogenMod 11, y las sincronizaremos a nuestra carpeta de trabajo. Para este paso es necesario el binario repo que ya instalamos al inicializar el entorno de trabajo.<br />
Estando situados en la carpeta "cm11", ejecutamos el siguiente comando:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 466px;" wrap="VIRTUAL">repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0
</textarea><br />
Puede que el terminal os dé algún error y os pida ejecutar algún comando para instalar archivos necesarios. En ese caso, copia lo que te diga el Terminal que ejecutes, y cuando termine vuelve a ejecutar el comando de arriba.<br />
Si todo ha ido bien, se iniciará tu repositorio local usando las sources de CyanogenMod 11. Para asegurarse de que se ha descargado, vete a la carpeta cm11 con el explorador de archivos, y pulsa Ctrl+h y deberá aparecer una carpeta llamada ".repo"<br />
Al finalizar la descarga, Terminal dirá que tienes que registrarte con una cuenta de GitHub. Id a su <a href="https://github.com/" target="_blank">página oficial</a> y os creáis una cuenta. Una vez creada y comprobada por correo, volver a Terminal y ejecutáis estos dos comandos por separado:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 418px;" wrap="VIRTUAL">git config --global user.email "tu@correo.com"
git config --global user.name "Tu Nombre"
</textarea><br />
*Reemplaza "tu@correo.com" y "Tu Nombre" por los que hayas usado al crear la cuenta. Ojo, sin las comillas pero con el espacio después de "user.email" y "user.name" respectivamente*<br />
<br />
Una vez registrado recomiendo ejecutar otra vez el comando de descarga de sources y veréis que os aparecerá que estáis identificados al terminar el proceso. Por otro lado, cuando el Terminal os pida si queréis visualización de colores en vuestra cuenta (Enable colour display) escribe una N y le dais a enter.<br />
<br />
Hecho esto ya tendremos nuestra carpeta de trabajo lista para obtener las sources de la ROM con la que vamos a trabajar.<br />
<br />
<br />
<b style="color: cyan; font-size: xx-large;">3. Sincronizar Repositorio:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
Este es el paso más pesado para todo el mundo, ya que descargaremos las sources y pesa entre 10-15GB aproximadamente. Es muy recomendado tener una velocidad de Internet elevada si no quieres morir de aburrimiento. En caso de que quieras aburrirte, ejecuta lo siguiente en Terminal:<br />
<br />
*Atención, debemos estar situados en la carpeta cm11. Si has seguido los pasos tal cual sin cerrar el Terminal, estarás situado en ella (lo veréis donde dice ~/cm11~$ al principio de la línea). Si no, sitúate ejecutando "cd cm11".*<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">repo sync -j#
</textarea><br />
El # indica el número de trabajos que se usarán para descargar los archivos. Depende de tu velocidad de Internet cuánto ponerle. Yo recomiendo usar de 2 a 4. Por lo tanto, si usas dos el comando quedaría así: repo sync -j2<br />
<br />
Tras ejecutar el comando empezará la descarga, y llevará unas cuantas horas, así que podéis ir a tomaros algo o salir a caminar que es saludable. Cuando termine la sincronización, ya tendremos las sources en nuestra carpeta de trabajo.<br />
<br />
<br />
<b style="color: cyan; font-size: xx-large;">4. Configurar Tu Dispositivo:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
En este paso es quizá el más complicado ya que no solo será ejecutar comandos en Terminal, sino que tendréis que editar y escribir líneas en varios archivos. Sin embargo, si sigues bien el tutorial te resultará bastante sencillo.<br />
<br />
Como dije al principio, es necesario tener localizado el device, kernel y vendor de nuestro dispositivo. En este paso lo que haremos en añadir un archivo a la carpeta de trabajo para que sincronice y descargue las sources específicas de nuestro dispositivo.<br />
<br />
Tomaré de ejemplo mi actual dispositivo, el Galaxy Ace 3. Aquí tenéis enlaces de GitHub para que veáis con qué nombre suelen estar:<br />
<br />
- Device: <a href="https://github.com/kostoulhs/android_device_samsung_loganreltexx">https://github.com/kostoulhs/android_device_samsung_loganreltexx</a><br />
- Kernel: <a href="https://github.com/kostoulhs/android_kernel_samsung_loganreltexx">https://github.com/kostoulhs/android_kernel_samsung_loganreltexx</a><br />
- Vendor: <a href="https://github.com/kostoulhs/proprietary_vendor_samsung_loganreltexx">https://github.com/kostoulhs/proprietary_vendor_samsung_loganreltexx</a><br />
<br />
Os preguntaréis por qué pone loganreltexx. Ese el el codename del Galaxy Ace 3. Podéis ver fácilmente el vuestro en el build.prop (en la carpeta system) de tu dispositivo, concretamente en la línea "ro.product.name".<br />
<br />
Alguno puede que se haya fijado en que al abrir los enlaces, en branch sale cm-12.1. Sin embargo, no es relevante, ya que posteriormente especificaremos en el archivo necesario la marca que queremos descargas (cm-11.0 en nuestro caso), así que dejad el enlace tal cual aparece al abrirlo, sin clicar en la pestaña "branch" pero asegurándose de que aparece "cm-11.0".<br />
<br />
Ahora que tenemos localizados los tres enlaces, vamos a sincronizarlos con nuestra carpeta. Para ello hay dos opciones: usar Git Clone o usar Local Manifest.<br />
Si usamos Local Manifest, se sincronizarán las sources del dispositivo cada vez que ejecutemos el comando para sincronizar repositorio de CyanogenMod (repo sync), por lo que se sobreescribirán los archivos de nuestro dispositivo, pero tranquilo, no desaparecen.<br />
Por otro lado, al usar Git Clone, las sources del dispositivo se descargarán a la carpeta de trabajo pero no serán afectadas cuando sincronizamos repositorio. Esta opción es recomendada si haces cambios en tu source una vez descargas. Si eres un usuario nuevo, no creo que vayas a modificar nada, así que elige la opción de Local Manifest. En cambio, si eres un usuario avanzado y tú mismo sabes crear device tree, usa Git Clone.<br />
<br />
Atención: Seguramente si ya hay un desarrollador que ha hecho un Device Tree para CyanogenMod 11, ya haya hecho un local_manifest. Lo encontraréis en su página de GitHub y tendrá un aspecto como <a href="https://github.com/kostoulhs/loganreltexx_local_manifest" target="_blank">éste</a>. En este caso, primero seleccionamos la branch con la que estamos trabajando (cm11) en la pestaña. La página recargará, entonces clicamos en "local_manifest.xml" y veréis las líneas que tendréis que poner (copiar y pegar) cuando creéis el local manifest siguiendo el tutorial.<br />
<br />
<br />
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large; text-align: left;">Git Clone:</b></div>
El código que usaremos será el siguiente:<br />
<div style="text-align: left;">
<br /></div>
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">git clone repo -b branch directorio-local
</textarea><br />
- repo: lo sustituimos por el link del repositorio de nuestro device tree.<br />
- branch: lo sustituimos por la ROM con la que trabajemos. En este caso: cm-11.0<br />
- directorio local: lo sustituimos por la carpeta donde se descargarán los archivos.<br />
<br />
*Por defecto, el directorio local suele ser device/marca/codename, vendor/marca/codename y kernel/marca/codename*<br />
<br />
Un ejemplo con Git Clone para mi Galaxy Ace 3 sería así:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 379px;" wrap="VIRTUAL">git clone https://github.com/kostoulhs/android_device_samsung_loganreltexx -b cm-11.0 device/samsung/loganreltexx
</textarea><br />
<br />
Haríamos esto mismo con el kernel y con el vendor.<br />
<br />
<br />
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large; text-align: left;">Local Manifest:</b></div>
<div style="text-align: center;">
<b style="color: magenta; font-size: x-large; text-align: left;"><br /></b></div>
<div style="text-align: left;">
Aquí explicaros que los repositorios varían muchísimo si tu dispositivo no es soportado oficialmente por CyanogenMod, pero hemos hecho este tutorial para que puedas portarlo para tu dispositivo. No digo esto en Git Clone ya que si lo usas supongo que ya eres un usuario más experimentado.</div>
<div style="text-align: left;">
Pues a lo que iba, no hay una fórmula única para hacer el local manifest, pero intentaré explicarme lo mejor que pueda. Antes que nada, habrá que ejecutar los siguientes comandos [antes debéis estar situados en cm11 (cd cm11)]:<br />
<br /></div>
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">mkdir .repo/local_manifests
</textarea><br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 339px;" wrap="VIRTUAL">nano .repo/local_manifests/local_manifest.xml
</textarea><br />
*También podéis crear la carpeta y el archivo usando el explorador de archivos*<br />
<br />
Se abrirá en terminal el archivo vacío. La estructura por defecto del Local Manifest es así:<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 98px; margin: 0px; width: 663px;" wrap="VIRTUAL"><?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project path="directorio local" name="nombre del repo" remote="página del repo" revision="branch del repo" />
</manifest>
</textarea><br />
<br />
*Perdón, pero no me cabe el línea entere. La línea de "proyect path" llega hasta "branch del repo". No hay punto y aparte, es toda seguida*<br />
<br />
- directorio local: ruta donde estará el repo (device, kernel y vendor)<br />
- nombre del repo: enlace del repo quitando "https://github.com/"<br />
- página del repo: en el 99% de los casos hay que poner github<br />
- branch del repo: en nuestro caso, cm-11.0<br />
<br />
Pues haríamos una lína de proyect por cada repositorio que necesitemos para nuestro dispositivo. Si ya hay un desarrollador que ha hecho un local manifest, no hay problema, solo copia y pega. Si no, vamos al lío:<br />
<br />
Si tu dispositivo no tiene soporte oficial ni local manifest ya creado, tendrás que hacerlo tú mismo. Es un poco complicado, ya que para cada marca y modelo habrá que añadir unos repositorios comunes (master) a parte del device y el vendor. No domino ninguno, así que puede que no te funcione. Ahí tendrás que meterte a investigar por tu cuenta.<br />
<br />
<b>*Local Manifest mejor explicado en <a href="http://spanish-android-developers.blogspot.com/2015/08/local-manifest-genericos.html" target="_blank">este tutorial</a>*</b><br />
<br />
Para un dispositivo Samsung con chip <b>Qualcomm MSM8930</b> tendríais que hacer un Local Manifest así:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLPgTzg-aSJUPdPMlvMQpcJXmWmKeXPoVsas2gQgVLJG1gCFfSmz9csIKo1XGfDwnC6iTSI-PlaUoe_LO_DVLvVkXbFAOQjeuNFA3o2oYxT3ziBXAajv4mrqpe-MhMZ1TsXNv4IS5Bi4T-/s1600/samsung_qcom-msm8940.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="104" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLPgTzg-aSJUPdPMlvMQpcJXmWmKeXPoVsas2gQgVLJG1gCFfSmz9csIKo1XGfDwnC6iTSI-PlaUoe_LO_DVLvVkXbFAOQjeuNFA3o2oYxT3ziBXAajv4mrqpe-MhMZ1TsXNv4IS5Bi4T-/s640/samsung_qcom-msm8940.png" width="640" /></a></div>
<br />
*Podéis copiar el texto <a href="http://pastebin.com/LeyTtPhw" target="_blank">aquí</a>*<br />
<br />
Como no tiene soporte oficial hay que añadir los repos comunes de CyanogenMod. Las línas sombreadas (dos últimas) tienen que ser ya de tu dispositivo, tenéis que buscarlas en el device tree que haya hecho algún desarrollador para tu dispositivo. Tenéis que sustituir codename y repo por vuestro correspondiente. Luego el kernel puede que tu desarrollador haya cogido la base del común (la primera línea que ves) y la haya modificado. En ese caso, cambia CyanogenMod por el nombre de la cuenta de dicho desarrollador.<br />
También puede que los repo 2º, 3º y 7º los haya copiado en su propio repositorio (podéis ver un ejemplo <a href="https://github.com/kostoulhs?tab=repositories" target="_blank">aquí</a>, justo debajo del segundo pone "forked from"). En ese caso lo puedes cambiar o puedes dejarlo así, debería funcionar igual, aunque si tu desarrollador lo ha copiado, cámbialo por el repo de él.<br />
<br />
Espero haberme explicado, ya que esto puede ser lo más difícil de entender, sobre todo si como he dicho, no tienes un local manifest ya hecho. La mecánica si tu dispositivo no es <b>Qualcomm MSM8930 </b>es<b> </b>similar. Tenéis que buscar en el repo de <a href="https://github.com/CyanogenMod" target="_blank">CyanogenMod</a> los repositorios comunes acorde con tu dispositivo y lo sustituyes en las líneas que dicen CyanogenMod, es cuestión de buscar y probar.<br />
<br />
Un ejemplo de cómo es el de mi dispositivo, lo tenéis <a href="https://github.com/kostoulhs/loganreltexx_local_manifest/blob/cm-11.0/local_manifest.xml" target="_blank">aquí</a>. Podéis ver que los tres primeros repositorios son common de CyanogenMod, pero que el desarrollador a copiado (forked) a su propio repo y lo ha cambiado en su local manifest. Espero que la explicación os haya resultado comprensible. Sigamos:<br />
<br />
Una vez finalizado de escribir el Local Manifest, presiona Ctrol+O y enter para guardar. Luego Ctrl+x para salir del editor. Revisa que el archivo esté en cm11/.repo/local_manifest y que se haya guardado correctamente.<br />
<br />
<br />
Después de todo esto, ejecuta el comando "repo sync" de nuevo. Tranquilo, no tardará tanto como la primera vez, ya que solo descargará los repo que añadimos en el local manifest.<br />
<br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
<b style="color: cyan; font-size: xx-large;">5. Obtener Pre-Builts:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
En este paso obtendremos apps necesarias para compilar (o algo así, no estoy seguro). En muchos tutoriales no lo ponen, pero cuando yo fui a compilar dio error porque pedía la app Terminal.apk, entonces lo hice y luego funcionó perfecto. Para ello:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd cm11/vendor/cm
</textarea>
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">./get-prebuilts
</textarea>
<br />
<br />
<b style="color: cyan; font-size: xx-large;">6. Compilar la ROM:</b><br />
<b style="color: cyan; font-size: xx-large;"><br /></b>
Este es el ansiado paso final con el que crearemos el zip flasheable para nuestro dispositivo. Para ello ejecuta en Terminal:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">cd cm11
*Si ya estás ubicado no hace falta*
</textarea><br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">. build/envsetup.sh
</textarea><br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">lunch
</textarea><br />
Ahora localiza tu dispositivo (saldrá algo como cm_codename-userdebug) por su codename, que en mi caso sería loganreltexx (saldría así cm_loganreltexx-userdebug) y miramos el número que tiene. Lo escribimos y le damos enter. Luego ejecutamos:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">make -j# otapackage
</textarea><br />
El asterisco lo cambiamos por el número de núcleoss que tenga nuestra PC +1. Por ejemplo, si es dual-core, será -j3. Le damos enter y empezará a compilar.<br />
<br />
Un comando alternativo sería el siguiente:<br />
<br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">time brunch <codename> -j#
</textarea><br />
En este se sustituye codename por el de nuestro dispositivo (loganreltexx) en nuestro caso, y el # lo mismo que he explicado arriba.<br />
<br />
Tras ello empezará a compilar y tardará unas horas, todo depende de la potencia que tenga tu PC. Cuando termine, si todo ha ido bien, tendrás el archivo en out/target/codename. En mi caso estaría en out/target/loganreltexx.<br />
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>¡Listo! Ya has compilado CyanogenMod 11</b></span><br />
<span style="color: magenta; font-size: x-large;"><br /></span>
<span style="color: magenta; font-size: x-large;"><br /></span></div>
Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com4tag:blogger.com,1999:blog-568035879551155991.post-62110862778560275422015-08-06T18:14:00.001+01:002015-08-06T18:25:27.798+01:00Inicializar Entorno para CompilarBuenas a todos! En esta entrada os enseñaré cómo configurar Ubuntu para poder empezar a compilar ROMs. Esto es necesario para cualquier ROM que queráis compilar, y se necesita Ubuntu de 64-bits; el de 32-bits no funcionará.<br />
<br />
Antes de seguir cualquier tutorial de este blog, debéis hacer este proceso primero.<br />
<span style="color: red;"><b>También recomiendo leer la página de glosario básico de este blog antes de empezar.</b></span><br />
<br />
<br />
<b><span style="color: cyan; font-size: x-large;">1. Instalar Java Development Kit (JDK)</span></b><br />
<span style="font-size: large;"><b><br /></b></span>
Lo primero que haremos será instalar el pack de desarrollo de Java, algo imprescindible en el entorno Android. Hay diversas versiones de Java, y depende de qué versión de Android vayamos a compilar.<br />
<br />
<br />
<div style="text-align: center;">
<b><span style="font-size: large;">*Para KitKat (e inferiores)*</span></b></div>
<div style="text-align: center;">
<b><span style="font-size: large;"><br /></span></b></div>
<div style="text-align: center;">
<b><span style="color: purple; font-size: large;">Instalar Java V6</span></b><br />
<b><span style="color: purple; font-size: large;"><br /></span></b>
<b>Abrir Terminal y ejecutar lo siguiente:</b></div>
<div style="text-align: center;">
<br /></div>
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 340px;" wrap="VIRTUAL">sudo add-apt-repository ppa:webupd8team/java
</textarea><br />
<textarea cols="40" name="textarea" rows="4" style="height: 65px; margin: 0px; width: 339px;" wrap="VIRTUAL">sudo apt-get update
</textarea><br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 340px;" wrap="VIRTUAL">sudo apt-get install oracle-java6-installer
</textarea><br />
<b style="text-align: left;"><span style="font-size: large;"><br /></span></b>
<br />
<div style="text-align: center;">
<b style="text-align: left;"><span style="font-size: large;"><b><span style="font-size: large;">*Para Lollipop* </span></b></span></b></div>
<div style="text-align: center;">
<b style="text-align: left;"><span style="font-size: large;"><b><span style="font-size: large;"><br /></span></b></span></b></div>
<div style="text-align: center;">
<b style="text-align: left;"><span style="font-size: large;"><b style="font-size: medium;"><span style="color: purple; font-size: large;">Instalar Java V7</span></b></span></b></div>
<div style="text-align: center;">
<b style="text-align: left;"><span style="font-size: large;"><b style="font-size: medium;"><span style="color: purple; font-size: large;"><br /></span></b></span></b></div>
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 409px;" wrap="VIRTUAL">sudo apt-get update && sudo apt-get install openjdk-7-jdk
</textarea><br />
<br />
<b>Con esto ya habremos instalado Java para poder compilar! :-)</b><br />
<b><br /></b>
<b><br /></b>
<b style="font-size: x-large;"><br /></b>
<b><span style="color: cyan; font-size: x-large;">2. Instalar Paquetes Necesarios</span></b><br />
<b style="font-size: x-large;"><br /></b>
<b>Para Ubuntu 14:</b><br />
<b><br /></b>
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 457px;" wrap="VIRTUAL">sudo apt-get install bison g++-multilib git gperf libxml2-utils
</textarea><br />
<br />
<b>Para Ubuntu 12:</b><br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 94px; margin: 0px; width: 481px;" wrap="VIRTUAL">sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386
</textarea><br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 481px;" wrap="VIRTUAL">sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
</textarea><br />
<br />
<b>Tras ejecutar los correspondientes comandos en el Terminal, ya tendremos las librerías necesarias para poder compilar Android.</b><br />
<b><br /></b>
<b><br /></b>
<b><br /></b>
<b><span style="color: cyan; font-size: x-large;">3. Configurar ccache (opcional)</span></b><br />
<b><span style="font-size: x-large;"><br /></span></b>
Primero de todo habrá que crear una carpeta donde queramos que se almacene el cache. Aunque sea opcional, recomiendo hacerlo, además es muy sencillo.<br />
<b><br /></b>
<b>Para crear la carpeta, primero nos vamos al directorio donde queramos que esté la carpeta usando el comando "cd". Yo la creo en el directorio por defecto (que es home), así que no hay que moverse a ningún directorio. Luego lo siguiente:</b><br />
<b><br /></b> <textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 378px;" wrap="VIRTUAL">mkdir ccache
*ccache lo podéis cambiar por el nombre que queráis*
</textarea><br />
<textarea cols="40" name="textarea" rows="4" style="height: 65px; margin: 0px; width: 378px;" wrap="VIRTUAL">nano ~/.bashrc
*Se abrirá un archivo en terminal*
</textarea><br />
<b>Añadir las siguientes líneas en el archivo:</b><br />
<br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 387px;" wrap="VIRTUAL">export USE_CCACHE=1
export CCACHE_DIR=directorio-donde-está-la-carpeta
</textarea> <br />
<b>En mi caso, el directorio sería <span style="color: magenta;">ccache</span></b><br />
<b><span style="color: magenta;"><br /></span></b>
<b>Ahora guardar y salir presionando Ctrl+x, luego escribimos Y y le damos enter. Con esto ya habremos configurado ccache.</b><br />
<b><br /></b>
<b><br /></b>
<b><br /></b>
<b><span style="color: cyan; font-size: x-large;">4. Install ADB & Fastboot (opcional)</span></b><br />
<b><span style="font-size: x-large;"><br /></span></b>
Esto también es opcional, pero muy recomendado instalar, ya que lo necesitaremos para compilar ciertas ROMs, tales como Miui. Siempre es bueno tener instaladas estas herramientas.<br />
<br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 430px;" wrap="VIRTUAL">sudo add-apt-repository ppa:nilarimogard/webupd8
</textarea><br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 431px;" wrap="VIRTUAL">sudo apt-get update
</textarea><br />
<textarea cols="40" name="textarea" rows="4" style="height: 64px; margin: 0px; width: 432px;" wrap="VIRTUAL">sudo apt-get install android-tools-adb android-tools-fastboot
</textarea><br />
<br />
<b>Tras esto ya tendremos estas funcionalidades instaladas.</b><br />
<b><br /></b>
<b><span style="font-size: x-large;"><br /></span></b>
<b><span style="color: cyan; font-size: x-large;">5. Configurar Repo</span></b><br />
<b><span style="font-size: x-large;"><br /></span></b>
Esta parte es muy importante, ya que instalaremos el binario "repo" necesario para sincronizar y demás tareas con Git. Para instalarlo hay que ejecutar lo siguiente en terminal:<br />
<b><br /></b> <textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">mkdir ~/bin
</textarea><br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">PATH=~/bin:$PATH
</textarea><br />
<textarea cols="40" name="textarea" rows="4" style="margin-left: 0px; margin-right: 0px; width: 519px;" wrap="VIRTUAL">curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
</textarea><br />
<textarea cols="40" name="textarea" rows="4" wrap="VIRTUAL">chmod a+x ~/bin/repo
</textarea><br />
<br />
<b>Si no hay ningún error, ya habremos descargado el binario en su carpeta correspondiente (bin) y le habremos dado permisos de lectura-escritura.</b><br />
<b><br /></b>
<b><br /></b>
<br />
<div style="text-align: center;">
<span style="color: magenta; font-size: x-large;"><b>¡Ahora Estás Listo Para Compilar ROMs Desde Source!</b></span></div>
<div style="text-align: center;">
<span style="color: magenta; font-size: large;"><b><br /></b></span></div>
Javier Alonso Delgadohttp://www.blogger.com/profile/09610718464375810292noreply@blogger.com0