Hola a todos, en este tutorial voy a intentar explicar de forma clara y 'rápida' como he ido construyendo la Rom GingerCerecilla.
Solo os pediré que comprendáis una cosa, no me voy a volver loco contestando comentarios sobre Windows, ¿por qué? Principalmente porque no lo uso, no me gusta, no lo apoyo y no lo conozco bien ni se que herramientas se usan en Windows, y además porque ya me lloverán preguntas suficientes para tenerme ocupado :D
Prólogo:
- 1 - Requisitos mínimos
- 2 - Herramientas que necesitaremos
- 3 - Organización del espacio de trabajo
- 4 - Preparación del entorno de trabajo
- 5 - Flasheando una RomStock
- 6 - Recuperando información importante
- 7 - Comenzando a cocinar
- 8 - Usando ADB
- 9 - Flasheando tu propia CustomRom
- 10 - Flasheando tu propia CustomRom
- 11 - Usando apktool para modificar aplicacioens APK's
- 12 - Firmando aplicaciones, alineando
- 13 - Modificando el menú de ajustes para añadir nuevas opciones
Requisitos mínimos para empezar
Para empezar, como en toda buena receta necesitamos los ingredientes:
- - Un terminal GT-S5570i
- - RomStock para modificar (No uséis una modificada porque nunca se sabe lo que puede tener o no tener....)
- - Código fuente de la última versión del Kernel para nuestro terminal.
- - Un pc con Linux instalado o una máquina virtual.
Herramientas y útiles que usaremos
-
Android Kitchen de XDA (Para cocinar la rom, deoxead, firmar, alinear.... vamos, una maravilla de herramienta)
-
apktool (sin scripts ni historias... Descompila y compila APKs para modificación)
md5sum: bb877d467ae906facdaca67568a941b5
-
Odin + pit tassve (Este enlace ya lleva un pit modificado, sirve para flahear el teléfono con la versión Stock base)
md5sum: 516794fbff8bc7e8769b5406f72abbc3
md5sum: 1e501a150be55dcb26755970cc268292
O en su defecto podéis intentar instalarlos desde los repositorios oficiales, pero esto será según disponibilidad en cada distribución Linux.... en las basadas en Debian podemos usar este comando para instalarlos:
sudo apt-get install android-tools-adb android-tools-fastboot
Os pedirá la contraseña, la introducís (no veréis nada en pantalla) y pulsáis la tecla "ENTER" para confirmar.
md5sum: 7799b92dea7125b03b2ac23cf1506def
- Binario
bmlunlock usado durente la instalación de la rom para desbloquear la partición de arranque de nuestro gt-s5570i
Organización ante todo
Para empezar recomiendo encarecidamente organización, así que debéis de crear una carpeta donde tengáis estas otras carpetas: (solo como recomendación...)
Si lo usáis como yo os recomiendo, no tendréis problemas a la hora de usar los comandos de la terminal descritos en esta guía puesto que yo me guiaré por la estructura que he recomendado.
Recomendación: Usar en la medida de lo posible letras minúsculas, además de usar guiones bajos en lugar de espacios, os ayudará muchas veces a no cometer errores bajo línea de comandos. Jamás uséis tildes para los nombres de carpetas/archivos en Linux si creéis que hay posibilidad de pasar esos archivos a Windows, porque Linux soporta utf-8 con tildes... pero Windows no lo soporta y puedes tener problemas.
En vuestra carpeta personal, cread una carpeta que se llame gt-s5570i
Dentro crear estas otras carpetas:
- roms_originales (Dentro ponéis las roms originales que habéis descargado para usarlas como base)
- custom_roms (Dentro ponéis las custom roms que tengáis y que hayáis creado, organizadas por carpetas.... y por versiones, nada de 'cacao maravilláo' que luego pasa lo que pasa)
- herramientas (aquí colocáis las herramientas que habéis descargado para tener siempre las originales en caso de que tengáis que reinstalar o compartirlas)
- utiles (ponéis cosas que no consideréis herramientas... como chuletas o scripts)
- tutoriales (pues eso, si descargáis un tutorial completo como este pues se guarda aquí, o chuletas y apuntes que os valgan para consultas)
- cocina (muy importante, en esta carpeta se cocinará la rom, no meter nada dentro hasta que no llegue la hora de cenar.... :D)
Preparación del entorno de trabajo
1.- Para empezar tendremos que descomprimir el zip de la cocina de Android (
Android Kitchen de XDA) para poder usarla.
Así que solo tenéis que abrir el zip y extraerlo todo a la carpeta "cocina" que habéis creado anteriormente.
Obtendréis una estructura básica para trabajar y un Script llamado "menu"
Asegúrate de que el script "menu" tiene permiso de ejecución (botón derecho > permisos > "Permitir ejecutar como una aplicación")
2.- Ahora, dentro de la carpeta cocina crearemos una carpeta que llamaremos "apktool" y dentro extraeremos el programa apktool y su script (va todo junto)
A su vez, dentro de la carpeta apktool crearemos una última carpeta que se llamará "apks", que será donde posteriormente pongamos nuestras aplicaciones originales para su modificación.
3.- Extraemos el binario de adb, y lo colocamos en /usr/bin/
Nota: Si conseguiste instalar los binarios desde los repositorios sáltate este paso y ve directo al número 4
Para hacerlo, lo ponemos en el escritorio mismo.. y ejecutamos el siguiente comando en una terminal que lo moverá y le dará los permisos:
sudo mv ~/Escritorio/adb /usr/bin/adb && chmod 755 /usr/bin/adb
4.- La cocina necesita tener instalado la aplicación zip, así que la instalamos desde una terminal con el siguiente comando:
sudo apt-get install zip
Listo.
Flasheando una RomStock
Siempre que esteis creando una Custom Rom es muy aconsejable instalar la rom stock sin moficar en el tlf.
Esto más que nada es por si no habéis modificado algunas partes del sistema (particiónes boot, data, CSC....), pues así mantendréis las originales de la rom stock... y solo reescribiréis los cambios.
Aún así, en este caso prácticamente lo que hemos creado es una rom completa
Recupenrando información importante
Llegados a este punto y comprobando que tenemos una rom más o menos viable para trabajar con ella procedemos a hacer una copia de seguridad que mas tarde usaremos para recuperar datos importantes que no están tan fácilmente accesibles desde
Debemos de compiar en la tarjeta SD el archivo pop_plus_CWM.zip.
Una vez dentro de la SD, apagamos el teléfono para iniciarlo en modo recovery.
Para hacerlo presionamos y mantenemos presionados los botones (power + Subir Volumen + Home) os aparecerá el logo de Samsung, cuando este desaparezca ya podemos soltar los botones.... volverá a aparecer el logo de Samsung y dará paso al recovery.
Este es el recovery de Samsung, muy pobre en opciones, elegimos "Install update zip" y de la lista que sale elegimos el archivo pop_plus_CWM.zip.
Se nos abrirá el nuevo recovery (no se queda instalado) y ya podréis usarlo.
Tendréis que hacer un backup seleccionando "Backup and Restore" y luego eligiendo "Backup"
Comenzará un proceso que tardará un rato.
Cuando termine le dais a cancelar hasta llegar a la primera pantalla y ya podremos presionar en "Reboot System now" para reiniciar.
Una vez reiniciado accedemos al teléfono con el cable usb y compartimos la tarjeta SD.
Veremos que hay una carpeta en la SD llamada clockworkmod, esta carpeta contiene los backups que vallamos haciendo, el nombre de cada carpeta es el resultado de la fecha y hora a la que hicimos la copia.
Nos interesa obtener la carpeta System que se encuentra en el archivo System oviamente.
Pasad ese archivo al pc para tenerlo a mano.
Comenzando a cocinar
Si! Llegó la hora y no hemos tardado nada ¿verdad?
Vamos allá.
Pero antes os doy una nueva ayudita....
Os facilitaré la vida un poco, resulta que el updater-script que se creará con la cocina de xda no contempla nuestro modelo porque es desconocido, para eso he creado un archivo que se ha de meter en "gt-s5570i/cocina/tools/edify_defs/"
El archivo contiene las líneas para el correcto montaje de las particiones de nuestro modelo, aquí lo tenéis (no le cambien el nombre):
md5sum: 1ecb74803a3557a3cb615ff72beebbe4
Ahora si que si!
Abrimos la carpeta gt-s5570i/ (Recomiendo partir la ventana en dos o usar múltiples ventanas para no estar yendo de atrás a adelante o viceversa, en Linux se suele usar F3 para partir las ventanas de navegación en 2 verticalmente)
Ahora necesitamos copiar la imagen de sistema a la carpeta "gt-s5570i/cocina/original_update"
Para eso abrimos el zip de la RomStock, dentro podremos ver varios archivos, nos interesa el que tenga parte de su nombre compuesto por "PDA", terminará en md5, pero no es más que un archivo comprimido en formato tar, así que lo copiamos a la carpeta "gt-s5570i/cocina/original_update" y modificamos el nombre a nuestro gusto asegurándonos de eliminar la coletilla .md5 para que quede algo como "mirom.tar"
Ejecutamos el Script "menu", si nos pregunta como abrirlo le decimos que en una terminal y obtendremos un menú como este:
============================================================
Android Kitchen 0.224 - 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 - Zipalign all *.apk files to optimize RAM usage
6 - Change wipe status of ROM
7 - Change name of ROM
8 - Show working folder information
0 - ADVANCED OPTIONS
00 - LEGACY OPTIONS (old and rarely used)
99 - Build ROM from working folder
u - Kitchen Info/Update/Donate
x - Exit
Enter option:
Recomiendo que os familiaricéis con el menú y no sigáis el tutorial al pie de la letra porque puede estar desactualizado....
Lo primero es cargar una nueva rom original, así que elegiremos del menú la opción 1 (Set up working folder from ROM) presionando la tecla 1 y luego enter para cargar una rom, después, para mostrar una lista de nuestras RomStock nuevamente la tecla enter, elegimos el número correspondiente a nuestra rom en la lista y teóricamente podríamos contestar todo lo que siga preguntando por omisión, (presionando simplemente la tecla enter) hasta que muestre una pantalla en la que nos informa de las características de la rom y volverá al menú principal.
Nota: Durante el proceso tal vez pida la contraseña para usar sudo y montar la imagen.
En este punto ya hemos creado una carpeta de trabajo en la raiz de la cocina llamada WORKIMG_XXXXXXX (donde las x son la fecha y hora de la creación) y dentro estará la carpeta system descomprimida y el boot.img para flashear sin modificaciones aún.
Añadiendo archivos importantes:
Ahora llega el punto de usar la imagen System que hicimos en la copia de seguridad.
Tenemos que abrir el zip (porque es un zip)
Tambien abrimos la carpeta de trabajo que está en "gt-s5570i/cocina/WORKING_XXXXXXXXXXXX" (Las X las pongo como ejemplo)
Ya solo nos queda arrastrar cualquier carpeta del directorio raiz de la copia al la carpeta de trabajo... ejemplo:
Ya no necesiaremos más la copia, así que podemos cerrar esa ventana para que no os moleste.
Modificando el nombre de la ROM:
Bueno, de vuelta a la ventana de android Kitchen.
Antes de nada vamos a modificar el nombre de la rom:
Presionamos la tecla 7, nos preguntará si queremos cambiar el nombre por defecto, contestamos que si e introducimos el nuevo nombre de la rom, presionamos enter para confirmar.
Deoxeando la ROM:
Ahora vamos a hacer algo muy básico que toda rom agradece, deoxead.
Básicamente lo que se hace es colocar el archivo .odex que acompaña a cada .apk dentro del mismo .apk, de manera que se eliminan problemas a la hora de modificar aplicaciones.
Presionamos la tecla 0 para ir al menú avanzado, luego elegimos la opción 11 "De-odex files in your ROM".
Aquí tendrémos que tener algo en cuenta, el nivel de API que usa la versión que intentamos deoxear, si no lo tenemos claro veremos que nos da la posibilidad de mostrar una tabla con los valores adecuados:
v = Set Android OS version (Current API level = 17)
Así que para ver las correspondientes API presionamos "v" y confirmamos con el botón enter.
Se nos mostrará algo como esto:
Each API level corresponds to at least one Android OS version.
e.g.
Android 4.2-4.2.2 = API Level 17
Android 4.1-4.1.1 = API Level 16
Android 4.0.3-4.0.4 = API Level 15
Android 4.0-4.0.2 = API Level 14
Android 3.2 = API Level 13
Android 3.1.x = API Level 12
Android 3.0.x = API Level 11
Android 2.3.3+ = API Level 10
Como la versión que tenemos en este tutorial es la de android 2.3.6 tendríamos que seleccionar el nivel de el Nivel de API 10
Así que ponemos 10 y damos enter.
Volveremos a la pantalla anterior y ya podremos seleccionar la opción "b" que es la de deoxear las carpetas /system/app y /system/framwork (b = Deodex both folders (recommended))
Tardará un buen rato.
Cuando termine, si no obtenéis ningún error os mostrará un resumen como este y tendréis la rom deoxeada.
A summary of the deodexing has been logged in deodex_010114_002826.log
0 *.odex files remain in system/app
0 *.odex files remain in system/framework
Press Enter to continue
No alinearemos los zip aún, porque eso ya lo haremos cuando empecemos a crear el zip, ya que nos preguntará antes de crear el zip.
Soporte para init.d:
Elegimos la opción 0 (avanzado) y luego la 14
14 - Add /etc/init.d scripts support (busybox run-parts)
Confirmamos y con eso habremos modificado el arranque del sistema (boot.img) para que atienda a los script que halla en /system/init.d/
Haciendo root:
Para poder hacer root elegimos la opción 2 del menú principal
2 - Add root permissions
Añadiendo Busybox:
Para añadir Busybox elegiremos la opción 3
3 - Add BusyBox
Comprobando estado actual:
Cuando queráis saber el estado en el que se encuentra la rom (las cosas que se le ha hecho o que le faltan por hacer) elegimos la opción 8 del menú principal...
8 - Show working folder information
Que en mi caso mostraía algo como esto:
Working folder information (v0.224)
Android OS version : 2.3.6
Device : GT-S5570I
Model : GT-S5570I
ROM Name : GingerCerecilla_v0.8 By Scorpyo82
CSC version : S5570IOXXLK3
Rooted (Superuser app + su) : YES
Rooted (unsecured boot.img) : YES
BusyBox installed : YES
BusyBox run-parts support : YES
Apps2SD (Apps to EXT) enabled : NO
/data/app enabled : NO
Custom boot animation allowed : NO
Nano text editor installed : YES
Bash shell support : YES
/system/framework is deodexed : YES
/system/app is deodexed : YES
radio.img found : NO
ROM will wipe all data : NO
Press Enter to continue
Añadiendo más scripts/binarios al futuro zip:
Hemos añadido busybox, acceso root y otras cosas.
Algunas de las cosas que añadimos están dentro del boot.img
El problema es que el boot.img no se puede copiar de manera normal en nuestro terminal porque tiene esa partición bloqueada. Para solucionarlo, meteremos el binario bmlunlock dentro de la carpeta de trabajo y luego añadiremos las líneas oportunas al script para poder usarlo.
Creando el Zip para distribuirlo:
Ahora ya podríamos crear nuestro primer zip flasheable con las líneas adecuadas para su montaje.
Elegimos la opción 99
Cuando nos pregunte que modo queremos usar le decimos que el interactivo (por defecto) y a todo contestamos que si (porque todo lo que pregunta es para mejorar el zip)
Pararos con atención cuando nos pregunta si firmar el zip o no....
It is recommended that you sign your ROM.
Sign it (y/n)? (default: y):
lo dejaremos así un momento y observaremos que en la carpeta de trabajo ya se ha creado el zip pero no está firmado, así que aprovecharemos y abriremos el zip para ver el contenido (no descomprimirlo, solo abrirlo y modificar directamente sin descomprimir)....
Confirmamos que justo en la raiz del zip se encuentre el archivo bmlunlock y los scripts que podamos necesitar ejecutar durante el la instalación.
Iremos a la siguiente ruta "/META-INF/com/google/android/"
Dentro podremos ver que hay dos archivos, "update-binary" que es el binario usado para ejecutar la instalación y el "updater-script" que contendrá las ordenes de instalación
Necesitamos modificar el update-binary por el que a mi me está funcionando, que es el que he puesto en el enlace de arriba.
Luego necesitamos abrir el updater-script y comprobar los valores de nuestro terminal para corregir algunas cosas.
Aunque todo debería estar bien, porque ya hemos añadido el correspondiente archivo de configuración para nuestro tlf en la cocina de xda, lo mejor es comprobarlo.
Los valores correctos para el montaje de las particiones en nuestro terminal son estos:
/system rfs /dev/block/stl9
/cache rfs /dev/block/stl10
/sdcard vfat /dev/block/mmcblk0p1
/data rfs /dev/block/stl11
Con esto, podemos observar que la partición de montaje para /system , por ejemplo /dev/block/stl9
Si vemos una línea como esta:
format("rfs", "EMMC", "/dev/block/stl9");
Debemos eliminarla, porque nuestro binario no soporta el formateo, pero si podemos borrar recursivamente, así que borramos esa línea y buscamos esta otra:
mount("rfs", "EMMC", "/dev/block/stl9", "/system");
Y justo debajo colocamos esta otra línea para borrar recursivamente la partición system:
delete_recursive("/system");
Lo hacemos así porque primero necesitamos que la partición esté accesible, que es lo que hace el comando mount... y luego ya podemos borrar el contenido....
Ahora diréis... ¿listo? pues no, si os fijáis dentro del zip en la raiz tendréis el boot.img pero no hay datos dentro del updater-script para flashear correctamente ese archivo en el teléfono, así que modificamos esto:
assert(package_extract_file("boot.img", "/tmp/boot.img"),
run_program("/sbin/busybox", "dd", "if=/tmp/boot.img", "of=/dev/block/bml7"),
delete("/tmp/boot.img"));
Por esto otro que a mi siempre me funciona:
package_extract_file("bmlunlock", "bmlunlock");
package_extract_file("boot.img", "boot.img");
set_perm(0, 0, 0755, "bmlunlock");
#
# Primero se desbloquea el bml7 y luego se flashea...
#
run_program("bmlunlock");
assert(run_program("/system/bin/dd", "if=boot.img", "of=/dev/block/bml7", "bs=4096"));
Y una vez modificado, guardado todo y cerrado el zip, ya podéis volver al menú del script y darle a continuar contestando que si (y) para firmar el zip.
Cuando termine os preguntará si queréis cambiar el nombre del zip.... ya como queráis.
Y en este punto ya tenéis vuestro primer zip flasheable en la carpeta gt-s5570i/cocina/OUTPUT_ZIP
Usando ADB
Para empezar abriremos una terminal o consola, como queráis llamarlo.
Antes de nada, para los que no tengáis nociones de comandos Linux, os recomendaré que siempre uséis el comando man para obtener el manual de un comando.... por ejemplo en este caso poniendo "man adb" obtendríamos el manual de adb, o en su defecto, si queremos algo más simple podemos usar "adb --help" y obtendremos una lista con los posibles parámetros que se le pueden pasar a adb.
Bueno, para pasar rápidamente y sin complicaciones el nuevo zip (o cualquier cosa que queramos) a nuestro teléfono colocaremos el tlf en modo depuración yendo a "Ajustes > Aplicaciones > Desarrollo > Depuración de USB", lo conectaremos mediante el cable usb y usaremos este comando dentro de la terminal que antes abrimos:
adb push ~/gt-s5570i/cocina/OUTPUT_ZIP/rom.zip /sdcard/
Siendo rom.zip el nombre que le dísteis al archivo zip que habéis creado.
Tardará un rato y cuando termine veréis un resumen del tiempo y velocidad de trasferencias alcanzado.
Ahora podéis pasar igualmente el zip con el recovery CWM, si habéis seguido mis consejos lo tendréis guardado en la carpeta herramientas, así que con un:
adb push ~/gt-s5570i/herramientas/pop_plus_CWM-Scorpyo82.zip /sdcard/
Lo tendréis metido en el móvil en un segundín.
En este punto hay que reiniciar el móvil en modo recovery, que es un coñazo usando los botones del movil, pues hay que apagarlo, y luego encenderlo presionando (y manteniendo presionados) los botones de encender+subir volumen+botón central "home", luego, cuando desaparezca el logo de samsung soltáis los botones y aparecerá nuevamente el logo de Samsung para posteriormente dar paso al recovery de samsung...
Peeeero, si queréis hacerlo muuuucho más rápido y dado que ya lo tenéis conectado al ordenador por cable :D...... solo tenéis que poner esto en la consola:
adb reboot recovery
Y el teléfono entrará en modo recovery de forma automática.
Flasheando tu propia CustomRom
Lo que viene ahora es sencillo:
Instalación en el teléfono:
1 - Encender el tlf en modo recovery, (botón power + home + Subir Volumen) usar la opción “Apply update from sdcar”
2 - Elegir el archivo “pop_plus_CWM“
3 - En el nuevo recovery hacer Wipe Data, Wipe cache, y Wipe Davilk Cache (en el menú Avanced)
4 - Volver al menú principal y elegir “Install zip from sd“
5 - Elegir la opción “choose zip from sdcard” y elegir el arhivo de la rom que habéis creado.... y con suerte todo vaya bien.
Listo!
El primer encendido tardará algo, pero es normal porque se está generando la caché para acelerar el arranque la próxima vez que inicie el tlf, solo lo hará la primara vez.
Continuará.......