He creado este tutorial porque actualmente la mayoría de las ROMs cocinadas suele incorporar AROMA (la mayoría de las sacadas de las cocinas de xda, que suelen ser las más extendidas). La idea es que todos los que quieran crear una CUSTOM ROM puedan implementar este instalador si necesidad de tener que invertir tiempo estudiando como hacerlo desde varios post y probando. Aquí está todo estructurado.
AROMA es un instalador que permite que elijamos diferentes opciones al flashear una ROM. Este instalador es muy cómodo, porque el creador de la ROM (cualquiera de nosotros que haga una Custom Rom) puede incorporar diferentes opciones para que cada usuario elija las que se adaptan más a sus necesidades o gustos.
Antes de modificar nada, recomiendo que quien vaya a hacer un instalador AROMA consiga un instalador de una ROM ya hecha. Esto es porque hay algunos parámetros como la calibración de la pantalla y demás que necesitamos conocer y que son diferentes en cada dispositivo. Por lo que es muy sencillo basarse en un instalador hecho, aunque al final lo modificaremos y quedará a nuestro gusto
Si alguien quiere puede descargar el META-INF propio de AROMA, aunque tendríamos que emplear muchísimo tiempo para conseguir que fuera instalador de una ROM. (AROMA puede ser instalador de ROMs o un instalador de Tweaks o aplicaciones... Personalmente, creo que la potencia de AROMA se aprovecha mejor en el instalador de una ROM, ya que también podremos elegir aplicaciones y tweaks que meter)
Pondré como ejemplo SlimMania (ROM para Xperia Arc/S) hecha por luiseteyo y por mi, para el subforo de HTCmania de nuestro terminal.
SlimMania tiene unas características propias, con aplicaciones propias y aplicaciones del sistema propias tambien. Con esto quiero decir que nosotros hemos elegido unas opciones para AROMA determinadas, pero cualquiera puede poner las opciones que quiera. AROMA ES TOTALMENTE PERSONALIZABLE!
Copio el código de SlimMania, es bastante largo, pero es un claro ejemplo de lo que se puede hacer, además, cuanto más largo es mejor porque veis los diferentes grupos y opciones de cada grupo. Es un buen ejemplo!
Cabe destacar unos conceptos importantes de AROMA (no es necesario saberlos):
-selectbox: Conjunto de opciones donde es obligatorio marcar una (da igual la que sea). Se da al elegir opciones del sistema, es decir, el tipo de bloqueo de pantalla, teclado, barra de notificaciones... Ya que son necesarias para que el sistema operativo funcione correctamente. Por defecto, se suele poner una opción por si el usuario quiere instalar las recomendaciones y para que no se olvide marcar ninguna y que tenga que volver a flashear.
-checkbox: Conjunto de opciones donde se pueden elegir todas las que quiera o ninguna. Se da para elegir aplicaciones opcionales o tweaks no necesarios que puede meter el usuario si quiere...
-resread: muestra un archivo .txt modificado previamente por el desarrollador donde aparecen: términos y condiciones o el changelog de la ROM.
-ini_get(): función que llama al ini_set(), donde se han metido previamente unos datos que mostrará después el ini_get. -casi todo lo que está entre comillas: "(lo que sea)" suele ser modificable por el creador para adptarlo a su propia ROM. Si tiene la estructura en aroma-config "@..." no debemos modificarlo, porque @ se refiere a un objeto especial. En updater-script sí debemos modificarlos.
Recomiendo instalar Notepad ++ para editar los textos o el editor de Linux.
Descargas: SlimMania (ROM completa): http://d-h.st/Lqd RECOMENDADO!SlimMania (Ejemplo de AROMA, con META-INF y carpeta aroma de aplicaciones sin aplicaciones, ejemplo de distribución de carpetas): http://www.mediafire.com/?1tgm8634eqk9dfi Aroma installer (original, no recomendado porque faltan muchas cosas): http://d-h.st/vi6
Empezamos!
1-Descargamos cualquier ROM con AROMA de nuestro terminal y extraemos la carpeta META-INF del update.zip (cualquier .zip flasheable de una ROM). También debemos fijarnos en la carpetas carpetas que hay en el flasheable .zip (luego entenderemos mejor el código).
Al lado de la carpeta META-INF ,hay una carpeta llamada aroma, allí meteremos TODOS los archivos que se corresponderán con las opciones. Creamos una carpeta para cada aplicación o archivo y dentro metemos lo que queremos que se extraiga.
La de SlimMania es:
2-Abrimos la carpeta META-INF / com / google /android . Veremos una lista de archivos con una carpeta llamada aroma.
Abrimos los archivos seleccionados en rojo en el editor de texto (Notepad++ en mi caso): aroma-config y updater-script.
En la carpeta /META-INF/com/google/android/aroma tendremos unos archivos .txt importantes para nosotros, es necesario modificarlos, son los marcados (para modificarlos seguimos la estructura que tienen, no me voy a extender más porque sino sería un tutorial muy amplio)
También debemos modificar sample.png para poner la imagen que queramos con un tamaño 480x854 pixeles:
Empezamos con el aroma-config. Os pondré fragmentos de mi código y explico para que sirve cada cosa. El creador pone comentarios en inglés con la estructura: #comentario. Yo los pondré en rojo
Todas las frases que pone modificable, son las que se pueden cambiar manualmente según queramos, la ROM que sea o según el idioma, NO se cambian automáticamente con el idioma de AROMA.
Introducción
(Click para mostrar/ocultar)
Introducción en AROMA, configuración esencial: Datos de la ROM, calibración de pantalla (depende del modelo del teléfono), fuente del instalador e imagen propia de la ROM.
Código:
calibrate("0.9718","4","1.0176","-9"); Calibración de la pantalla, cada modelo tendrá una distinta, no la tocamos
loadlang("langs/es.lang"); Lenguaje del instalador AROMA, yo he puesto español (es.lang) en inglés sería (en.lang). Además del idioma del instalador debemos cambiar las frases que ponemos entre comillas, iré avisando cuales son)
fontresload( "0", "ttf/DroidSans.ttf", "12" ); Fuente del instalador, no la tocamos
fontresload( "1", "ttf/DroidSans.ttf", "18" );
ini_set("rom_name", "SlimMania"); Nombre de nuestra ROM
ini_set("rom_version", "1.0"); Versión de nuestra ROM
ini_set("rom_author", "JesusAlber1 & Luiseteyo"); Autores de la ROM
ini_set("rom_device", "Xperia arc S"); Modelo del teléfono
ini_set("rom_date", "29 10 2012"); Fecha de expedición de la ROM
splash(
#-- Duration 6000ms / 5 seconds
6000, Duración en milisegundos de la muestra de la imagen de nuestra ROM.
#-- <AROMA Resource Dir>/sample.png Tenemos que poner nuestra imagen con el nombre sample.png en la carpeta aroma que estaba en la misma carpeta que el archivo que modificamos
"sample"
);
Primera parte del código
(Click para mostrar/ocultar)
Primera parte del código: Selección de tema del propio instalador AROMA, para que se haga más amena la instalación según el gusto de cada usuario.
Código:
###################################################################################################################
#
# STEP 1 - SELECT THEME
#
selectbox( Tipo de selección de opciones, explicado al principio del post
#-- Title
"<~themes.title>",
#-- Sub Title
"<~themes.desc>",
#-- Icon: <AROMA Resource Dir>/icons/personalize.png or <ThemeDir>/icon.personalize.png
"@personalize",
#-- Will be saved in /tmp/aroma/theme.prop Guarda las opciones en un archivo temporal llamado theme.prop (no nos afecta)
"theme.prop",
#---------------------------------[ Selectbox Without Group ]----------------------------------#
# TITLE | SUBTITLE | Initial Value #
#------------------+-----------------------------------------------------------+---------------#
"MIUI", "MIUI Theme by mickey-r & amarullz", 0, #-- selected.0 = 1 Tema estilo MIUI corresponde al 1
"ICS", "Ice Cream Sandwitch by DemonWav & amarullz", 0, #-- selected.0 = 2 Tema estilo ICS corresponde al 2
"MIUI V4", "MIUI 4 Theme by amarullz & Lennox", 0, #-- selected.0 = 3 Tema estilo MIUI v4 corresponde al 3
"Sense", "HTC Sense Theme by amarullz", 0 #-- selected.0 = 4 Tema estilo Sense de HTC corresponde al 4
#--------[ Initial Value = 0: Unselected, 1: Selected, 2: Group Item, 3: Not Visible ]---------#
);
##
# SET THEME
#
#-- Change Info:
# file_getprop : should use absolute path "/tmp/aroma/theme.prop"
# prop : just use relative path "theme.prop" will automatically read the "/tmp/aroma/theme.prop"
# Los if condicionan cada opción, es decir, si elegimos la opción 1 entonces el tema será MIUI, si elegimos la opción 2 entonces el tema será ICS y así hasta las 4 opciones
if prop("theme.prop","selected.0")=="1" then
theme("miui");
endif;
if prop("theme.prop","selected.0")=="2" then
theme("ics");
endif;
if prop("theme.prop","selected.0")=="3" then
theme("miui4");
endif;
if prop("theme.prop","selected.0")=="4" then
theme("sense");
endif;
Segunda parte del código:
(Click para mostrar/ocultar)
Segunda parte del código: Muestra al usuario la información de la ROM más extendida y de forma más clara.
Código:
###################################################################################################################
#
# STEP 2 - SHOW ROM INFORMATION
#
viewbox(
#-- Title
"Bienvenido a SlimMania!", Mensaje de bienvenida al usuario, personalizable por cada desarrollador en el idioma correspondiente
#-- Text
"Vas a instalar <b>"+ Personalizable por cada desarrollador en el idioma correspondiente
#-- Get Config Value
ini_get("rom_name")+ Muestra al usuario el nombre de la ROM, puesto en las primeras líneas de AROMA
"</b> for <b>"+ini_get("rom_device")+"</b>.\n\n"+ Muestra al usuario el dispositivo en el que va a usar la ROM, también indicado en las primeras líneas de AROMA
" Version\t: <b><#selectbg_g>"+ini_get("rom_version")+"</#></b>\n"+ Muestra la versión de la ROM
" Codename\t: <b><#selectbg_g>SlimMania</#></b>\n"+ Muestra el código de la ROM (nombre identificativo, normalmente lo más breve posible), este nombre se cambia aquí!
" Updated\t: <b><#selectbg_g>"+ini_get("rom_date")+"</#></b>\n\n\n"+ Muestra la fecha en la que se creó la ROM, puesta en las primeras líneas también.
"Pulsa Siguiente para continuar con la Instalacion", Mensaje de cada desarrollador en su idioma correspondiente, es para continuar
#-- Icon
"@welcome"
);
Tercera parte del código
(Click para mostrar/ocultar)
Tercera parte del código: Muestra el mensaje de los desarrolladores, en este caso es para aceptar los términos y condiciones de instalar la ROM (No nos hacemos responsables de bootlops ni brikeos...)
Código:
###################################################################################################################
#
# STEP 3 - LICENSE
#
agreebox(
#-- Title
"Terminos y condiciones", Modificable por cada uno
#-- Subtitle / Description
"Lee atentamente y acepta para continuar con la instalacion.", Modificable por cada uno
#-- Icon
"@license",
#-- Text Content ( Read from <AROMA Resource Dir>/license.txt )
resread("license.txt"), AROMA muestra el archivo license.txt, modificado previamente por el creador y se refiere a los términos y condiciones escritos. license.txt está en la carpeta aroma situada junto a aroma-config
#-- Checkbox Text
"Acepto los terminos y condiciones...", Modificable
#-- Unchecked Alert Message
"Por favor, marca la casilla de aceptar..." Modificable
);
Cuarta parte del código:
(Click para mostrar/ocultar)
Cuarta parte del código: Muestra al usuario el changelog (respecto a versiones anteriores o sólo el nuevo, depende de qué pongamos en el archivo correspondiente).
Código:
###################################################################################################################
#
# STEP 4 - CHANGELOG
#
textbox(
#-- Title
"Changelog SlimMania", Modificable
#-- Subtitle
"Changelog de la nueva version de SlimMania", Modificable
#-- Icon
"@update",
#-- Arg 4
resread("changelog.txt") Muestra al usuario el archivo changelog.txt donde está el changelog escrito por el desarrollador. changelog.txt está en la carpeta aroma situada junto a aroma-config
);
Quinta parte del código:
(Click para mostrar/ocultar)
Menú principal: Pide al usuario que elija entre Instalar la ROM o Salir del instalador.
Código:
##
# MAIN MENU
#
menubox(
#-- Title
ini_get("rom_name") + " " + ini_get("rom_version"), Muestra el nombre de la ROM y la versión
#-- Sub Title
"Elige una de las opciones:", Modificable
#-- Icon
"@welcome",
#-- Will be saved in /tmp/aroma/demo.prop Guardará los cambios en demo.prop, no tocamos nada.
"demo.prop",
#-------------------------+-----------------[ Menubox Items ]-------------------------+---------------#
# TITLE | SUBTITLE | Item Icons #
#-------------------------+-----------------------------------------------------------+---------------#
"Instalar ROM", "Instalar SlimMania en este dispositivo", "@install", #-- selected = 1 Modificar según la ROM y el idioma
"Otras opciones", "Salir, reiniciar, etc.", "@apps" #-- selected = 2 Más de lo mismo
);
Si el usuario elige la opción 2, es decir, Otras opciones, el instalador le llevará a una nueva ventana:
Código:
##
# MISC MENU
#
if prop("demo.prop","selected")=="2" then El usuario ha elegido 2 (este if se refiere a: "si el usuario elige la opción 2, entonces -pasa esto-).
#-- Show Other Demo
menubox(
#-- Title
"Cancelando...", Modificable
#-- Sub Title
"Elige una opción", Modificable
#-- Icon
"@cancel",
#-- Will be saved in /tmp/aroma/other_demo.prop Guarda los cambios en other_demo.prop, no tocamos nada.
"other_demo.prop",
#-------------------------+-----------------[ Menubox Items ]-------------------------+---------------#
# TITLE | SUBTITLE | Item Icons #
#-------------------------+-----------------------------------------------------------+---------------#
"Reiniciar", "Reiniciar el dispositivo", "@alert", #-- selected = 1 Modificable
"Salir", "Regresar al recovery", "@install" #-- selected = 2 Modificable
);
Ahora, dentro de este nuevo menú, el instalador dice:
#-- Reboot
if prop("other_demo.prop","selected")=="1" then Si el usuario elige 1, entonces reinicia
if
confirm(
#-- Title
"Reiniciar", Modificable
#-- Text
"¿Reiniciar el dispositivo?", Modificable
#-- Icon (Optional)
"@reboot"
)=="yes"
then
reboot("now"); Reinicia el dispositivo si hemos marcado "yes"
endif;
endif;
#-- Exit
if prop("other_demo.prop","selected")=="2" then Si el usuario elige la opción 2 de este menú:
if
confirm(
#-- Title
"Salir", Modificable
#-- Text
"¿Volver al recovery?", Modificable
#-- Icon (Optional)
"@exit"
)=="yes"
then
#-- Exit -
exit(""); El dispositivo sale del instalador si hemos marcado "yes"
endif;
endif;
#-- Back To Other Demo Menu Si el usuario no elige la segunda opción, va volviendo al menú anterior hasta llegar al menú donde se elige si Instalar la ROM u Otras opciones.
back(
getvar("1")
);
endif;
Si el usuario elige la opción 1, es decir, Instalar la ROM el instalador le llevará a la siguiente ventana: (será elegir el modelo, si queremos instalar la ROM en un terminal específico, omitimos este paso!)
Código:
menubox(
#-- Title
"Elige tu modelo:", Modificable
#-- Sub Title
"Elige el modelo de tu terminal:", Modificable
#-- Icon
"@personalize",
#-- Will be saved in /tmp/aroma/type.prop Guarda las opciones en type.prop, no tocamos nada
"type.prop",
#-------------------------------------+-----------------[ Menubox Items ]-------------------------+---------------#
# TITLE | SUBTITLE | Item Icons #
#-------------------------------------+-----------------------------------------------------------+---------------#
"Arc S", "Sony Xperia arc S LT18i", "@device", #-- selected = 1 La opción 1 es el Arc S, el nombre del dispositivo es modificable
"Arc", "Sony Xperia arc LT15i", "@device" #-- selected = 2 La opción 1 es el Arc, modificamos tanto "Arc" como "Sony Xperia arc LT15i"
);
Sexta parte del código:
(Click para mostrar/ocultar)
Sexta parte del código: aquí elegiremos las opciones esenciales, es decir, tenemos que elegir una de las opciones, da igual la que sea, pero una tiene que haber para que funcione todo.
Código:
selectbox( Obliga a que siempre elijamos una sola opción, da igual la que sea, pero como como máximo y como mínimo tiene que ser una opción.
#-- Title
"Apariencia personalizada", Modificable
#-- Sub Title
"Elige lo que quieras que contenga tu nueva ROM", Modificable
#-- Icon
"@choose",
#-- Will be saved in /tmp/aroma/patch.prop Guardará estos cambios en patch.prop, un archivo temporal, no tocamos nada
"patch2.prop",
#-----------------------+-----------------[ Selectbox ]---------------------------+---------------#
# TITLE | SUBTITLE | Initial Value #
#-----------------------+---------------------------------------------------------+---------------#
"Bloqueo de pantalla", "", 2, #-- Group 1. key = "selected.1" El 2 dice que es un grupo nuevo, será el grupo numero 1 (selected.1)
"AOSP lockscreen", "Bloqueo de pantalla estilo AOSP, elegante y sencillo", 1, #-- selected.1 = 1 El 1 dice que está marcada por defecto y es la posición del grupo 1 (selected.1 = 1)
"Xperia T lockscreen", "Bloqueo del Xperia T con shortcuts. ¡No olvides el parche!", 0, #-- selected.1 = 2 El 0 dice que no está marcada por defecto y que es la posición 2 del grupo 1 (selected.1 = 2)
"Barra de notificaciones", "", 2, #-- Group 2. key = "selected.2" Grupo 2 (selected.2)
"Estilo GX 1", "Estilo GX, bateria en circulo blanco y toggles muy sencillos", 1, #-- selected.2 = 1 Opción 1 del grupo 2 (selected.2 = 1), además está marcada por defecto
"Estilo GX 2", "Estilo GX, similar a la anterior pero semitransparente", 0, #-- selected.2 = 2
"Estilo GX 3", "Estilo GX, bateria de procentaje similar a MIUI", 0, #-- selected.2 = 3
"Estilo GX 4", "Estilo GX, bateria MIUI y toggles diferentes", 0, #-- selected.2 = 4
"Estilo GX 5", "Estilo GX, bateria en circulo blanco y toggles de colores", 0, #-- selected.2 = 5 Opción 5 del grupo 2 (selected.2=5), no está marcada por defecto porque tiene un 0
"Teclado", "", 2, #-- Group 3. key = "selected.3" Grupo 3 (selected.3)
"Xperia stock", "Teclado de stock ICS", 1, #-- selected.3 = 1
"Xperia S", "Teclado del Xperia S", 0, #-- selected.3 = 2
"Iconos", "", 2, #-- Group 4. key = "selected.4"
"Iconos SIII", "Iconos del Samsung Galaxy SIII", 1, #-- selected.4 = 1
"Iconos stock", "Iconos de stock, propios de SONY", 0, #-- selected.4 = 2
"Navegador", "", 2, #-- Group 5. key = "selected.5"
"Dolphin Browser Beta", "Recomendado: Rapido, gran apariencia, soporta HTML 5", 1, #-- selected.5 = 1
"Navegador stock", "Navegador de stock, propio de SONY", 0, #-- selected.5 = 2
"Launcher", "", 2, #-- Group 5. key = "selected.6"
"SlimMania", "Recomendado: Launcher propio de SlimMania, con opciones adicionales", 1, #-- selected.6 = 1
"Launcher stock", "Launcher de stock de Xperia arc S, 4x4 con boton AOSP, simple", 0, #-- selected.6 = 2
"APEX", "Launcher APEX, con apariencia ICS, rapido y fluido", 0, #-- selected.6 = 3 Opción 3 del grupo 6 (seleted.6 = 3)
"ZEAM", "Launcher ZEAM, sencillo y comodo", 0, #-- selected.6 = 4
"MIUI launcher", "Launcher basado en el propio de MIUI, original y diferente", 0 #-- selected.6 = 5
#--------[ Initial Value = 0: Unselected, 1: Selected, 2: Group Item, 3: Not Visible ]---------#
);
Esta chuleta nos muestra que signnifica el primer número que hay despues de la descripción, el 1 muestra que la selecciona por defecto, aunque puede cambiarse. El 2 muestra que es un grupo diferente
Podemos crear tantos grupos como queramos, y tantas opciones dentro del grupo que queramos
Séptima parte del código:
(Click para mostrar/ocultar)
Séptima parte del código: aquí elegiremos las opciones libres, es decir, se pueden coger o no. No hay ninguna opción necesaria, si queremos las cogemos, sino no.
Código:
checkbox(
#-- Title
"Aplicaciones opcionales", Modificable
#-- Sub Title
"Selecciona las aplicaciones opcionales que quieras instalar", Modificable
#-- Icon: <AROMA Resource Dir>/icons/personalize.png or <ThemeDir>/icon.personalize.png
"@choose",
#-- Will be saved in /tmp/aroma/patch.prop Guarda las opciones en un archivo temporal, no nos interesa
"patch.prop",
#-----------------------+-----------------[ Checkbox ]---------------------------+---------------#
# TITLE | SUBTITLE | Initial Value #
#-----------------------+---------------------------------------------------------+---------------#
"Aplicaciones opcionales", "Elige las aplicaciones siguientes que quieras instalar", 2, #-- Group 1. key = "item.1.x" Similar al anterioe, el 2 crea el grupo.
"Youtube", "Aplicacion Youtube", 0, #-- item.1.1 Aplicación 1 del grupo 1 (item.1.1). No está preseleccionada
"Gmail", "Aplicacion GMail para ver tu correo electronico de Google", 0, #-- item.1.2
"Email", "Aplicacion Email de stock de Xperia", 0, #-- item.1.3
"Script Manager", "Aconsejable instalar para configurar despues SuperCharguer", 1, #-- item.1.4 Aplicación 4 del grupo 1 (item.1.4). Está preseleccionada porque tiene el 1 correspondiente
"Notas", "Aplicacion Notas de stock de Xperia", 0, #-- item.1.5
"DroidSail", "Aplicacion que permite pasar apps a la SD, para mayor almacenamiento interno", 0, #-- item.1.6
"SDBooster", "Aplicacion para aumentar la velocidad de transferencia de datos con la SD", 1, #-- item.1.7
"Smart Connect", "Aplicacion para ejecutar ciertas acciones al conectar perifericos", 0, #-- item.1.8 Aplicación 8 del grupo 1 (item.1.8), no está preseleccionada porque tiene el 0 correspondiente
"ES explorador", "Explorador y administrador de archivos ", 0, #-- item.1.9
"Camara 3D", "Camara y Album 3D stock de SONY ", 0 #-- item.1.10
);
Si queremos añadir más grupos, es tan sencillo como poner la misma estructura que la primera linea, pero cambiando en cada caso y poniendo item.2.x, item.3.x (siendo x la aplicación dentro del grupo). Cada grupo nuevo, las x vuelven a empezar en 1.
Ejemplo: Grupo1-> item1.1, item1.2, item1.3
Grupo2-> item2.1, item2.2, item2.3 (cada uno con sus correspondientes aplicaciones)
Octava parte del código:
(Click para mostrar/ocultar)
Octava parte del código: Aquí pedirá que se pulse Instalar o llevará el menú del principio para salir de la instalación o volver a elegir las opciones.
Código:
##
#
# Next Screen is Installation UI
#
ini_set("text_next", "Install"); Indica que el botón siguiente será para instalar
##
# READY TO INSTALL
#
viewbox(
#-- Title
"Instalacion preparada", Modificable
#-- Text
"Todo esta preparado para ser instalado.\n\n"+
"Presiona <b>Instalar</b> para comenzar.\n\n"+
"Si no estas seguro de tus elecciones, presiona <b>Atras</b>\n\n"+
"Pulsar Menu -> Deja la instalacion, salir.",
Las líneas anteriores modificables solo las letras, los \n significan salto de línea y <b> que la letra destaque, así que mejor no tocarlos
#-- Icon
"@install"
);
ini_set("text_next", "Next");
#-- Extract sleep to /tmp/aroma/sleep. It will be used in updater-script for testing wait script
restotmp("exec_demo/sleep","sleep");
Novena parte del código:
(Click para mostrar/ocultar)
Novena parte del código: Proceso de instalación, mostrará al usuario lo que se está instalando y todo el proceso de instalación.
Código:
#
# INSTALLATION PROCESS
#
setvar("retstatus",
install(
#-- Title
"Instalacion", Modificable
#-- Installation Process message
"Instalando <b>"+ini_get("rom_name")+"</b>.\n\n"+ Muestra que está instalando la ROM (con su nombre)
"",
#-- Installation Icon
"@install",
#-- Installation Finish Message
"<b>"+ini_get("rom_name")+"</b> ha sido instalada correctamente. Pulsa Finalizar para acabar." Muestra el nombre de la ROM y que se ha instalado correctamente. Modificable después de </b>
)
);
ini_set("text_next", "Finish"); Botón de Finalizar
Décima parte del código:
(Click para mostrar/ocultar)
Décima parte del código: Finalizar con el instalador, despedirse del usuario y reiniciar.
Código:
##
# FINISH
#
# You can use return value or "reboot_it" variable to retrive checkbox value
# Example:
# if (checkviewbox(....)=="1" then
# ... checked ...
# endif;
#
checkviewbox(
#-- Title
"Hecho", Modificable
#-- Text
"<b>"+ini_get("rom_name")+"</b> ha sido instalada correctamente. ¡Disfruta de SlimMania!\n\n", Muestra el nombre de la ROM y que se ha instalado. Modificable a partir de </b>
#-- Icon
"@welcome",
#-- Checkbox Text
"¡Reiniciando tu terminal!", Modificable
#-- Initial Checkbox value ( 0=unchecked, 1=checked ) - (Optional, default:0)
"1",
#-- Save checked value in variable "reboot_it" (Optional)
"now"
);
if
getvar("reboot_it")=="1" Si has seleccionado que reinicie...
then
reboot("now"); Reinicia el terminal
endif;
Continuamos con updater-script. Lo que modifiquemos en aroma-config debemos modificarlo después en updater-script para que realice la tarea correspondiente.
Si hemos hecho un updater-script para nuestra ROM, tenemos que modificarlo para el de AROMA, ya que la función que tiene es la misma (contiene la información del flasheo de la ROM), pero al intervenir AROMA tenemos que adaptarlo.
Parte esencial:
(Click para mostrar/ocultar)
Aquí tendremos lo esencial para flashear una ROM: (Puede ser que cada dispositivo tenga uno específico, en ese caso, modificaremos el código en función al dispositivo)
Primera parte del código:Corresponde con el final de la quinta parte de aroma-config. Es necesario mirar aroma-config para configurarlo, ya que en función de las opciones que hayamos metido, así configuraremos.
(Click para mostrar/ocultar)
Aquí tendremos la configuración relativa a la elección de dispositivo (cuando elegimos entre los dos dispositivos que puede ser).
Código:
ui_print("@Dispositivo"); Se refiere a la elección del dispositivo (configurada en aroma-config). Tenemos que poner después del @ el nombre del grupo de la elección (el grupo es la línea que hemos puesto con el número 2 en aroma-config
# arcs
if
file_getprop("/tmp/aroma/type.prop","selected") == "1" Si elegimos la opción 1...
then
ui_print("Xperia arc S LT18i"); Modificable, según la opción que sea
package_extract_dir("aroma/arcS", "/system/"); Busca la carpeta con ese nombre que hemos metido en la carpeta /aroma (en la raíz del flasehable.zip) En este caso extrae la carpeta aroma/arcS en la carpeta /system/ de la ROM.
endif;
# arc
if
file_getprop("/tmp/aroma/type.prop","selected") == "2" Si elegimos la opción 2...
then
ui_print("Xperia arc LT15i"); Modificable, según la opción que sea
package_extract_dir("aroma/arc", "/system/"); Esta vez, en vez de extraer la carpeta /aroma/arcS, extrae la carpeta aroma/arc. Así tendremos los archivos correspondientes a esta opción
endif;
Segunda parte del código: Correspondiente a la sexta parte del código de aroma-config.
(Click para mostrar/ocultar)
Aquí tendremos la configuración correspondiente a las aplicaciones del sistema que queramos elegir.
Código:
##---- Customization
ui_print("@Bloqueo de pantalla"); Se refiere a la elección del bloqueo de pantalla, configurada en aroma-config). Tenemos que poner después del @ el nombre del grupo de la elección (el grupo es la línea que hemos puesto con el número 2 en aroma-config
# aosplock Código de referencia para el desarrollador, le dice de qué opción está hablando
if
file_getprop("/tmp/aroma/patch2.prop","selected.1") == "1" Si en el grupo 1 (selected.1), elegimos la opción 1, entonces...
then
ui_print("- Instalando AOSP lockscreen"); Modificable
package_extract_dir("aroma/AOSPlock", "/system/"); Extrae la carpeta aroma/AOSPlock en /system/.
endif;
# xperiatlock
if
file_getprop("/tmp/aroma/patch2.prop","selected.1") == "2" Si en el grupo 1, elegimos la opción 2...
then
ui_print("- Instalando Xperia T lockscreen. ¡No olvides el parche!");
package_extract_dir("aroma/XperiaTlock", "/system/");
endif;
ui_print("@Barra de notificaciones"); Tenemos que poner después del @ el nombre del grupo de la elección (el grupo es la línea que hemos puesto con el número 2 en aroma-config
# estilogx1
if
file_getprop("/tmp/aroma/patch2.prop","selected.2") == "1" Si en el grupo 2 (selected.2), elegimos la opción 1...
then
ui_print("- Estilo GX, bateria en circulo blanco y toggles muy sencillos");
package_extract_dir("aroma/EstiloGX1", "/system/app");
endif;
# estilogx2
if
file_getprop("/tmp/aroma/patch2.prop","selected.2") == "2"
then
ui_print("- Estilo GX,similar a la anterior pero semitransparente");
package_extract_dir("aroma/EstiloGX2", "/system/app");
endif;
# estilogx3
if
file_getprop("/tmp/aroma/patch2.prop","selected.2") == "3"
then
ui_print("- Estilo GX, bateria de procentaje similar a MIUI");
package_extract_dir("aroma/EstiloGX3", "/system/app");
endif;
# estilogx4
if
file_getprop("/tmp/aroma/patch2.prop","selected.2") == "4"
then
ui_print("- Estilo GX, bateria MIUI y toggles diferentes");
package_extract_dir("aroma/EstiloGX4", "/system/app");
endif;
# estilogx5
if
file_getprop("/tmp/aroma/patch2.prop","selected.2") == "5" Si elegimos la opción 5 del grupo 2 (selected.2)
then
ui_print("- Estilo GX, bateria en circulo blanco y toggles de colores");
package_extract_dir("aroma/EstiloGX5", "/system/app");
endif;
ui_print("@Teclado"); Cambiar nombre de grupo!
# tecladostock
if
file_getprop("/tmp/aroma/patch2.prop","selected.3") == "1"
then
ui_print("- Instalando Teclado de stock ICS");
package_extract_dir("aroma/XperiaStockTeclado", "/system/");
endif;
# tecladoxperias
if
file_getprop("/tmp/aroma/patch2.prop","selected.3") == "2"
then
ui_print("- Instalando Teclado del Xperia S");
package_extract_dir("aroma/XperiaSteclado", "/system/");
endif;
ui_print("@Iconos"); Cambiar nombre de grupo... Así en todos los grupos. (@nombreGrupo)
# iconoss3
if
file_getprop("/tmp/aroma/patch2.prop","selected.4") == "1"
then
ui_print("- Aplicaciones con Iconos del Samsung Galaxy SIII");
package_extract_dir("aroma/S3Iconos", "/system/app");
endif;
# iconosstock
if
file_getprop("/tmp/aroma/patch2.prop","selected.4") == "2"
then
ui_print("- Aplicaciones con Iconos de stock de SONY");
package_extract_dir("aroma/StockIconos", "/system/app");
endif;
ui_print("@Navegador");
# dolphin
if
file_getprop("/tmp/aroma/patch2.prop","selected.5") == "1"
then
ui_print("- Instalando Dolphin Browser Beta");
package_extract_dir("aroma/Dolphin", "/system/app");
endif;
# browstock
if
file_getprop("/tmp/aroma/patch2.prop","selected.5") == "2"
then
ui_print("- Instalando Navegador de stock de SONY");
package_extract_dir("aroma/BrowStock", "/system/app");
endif;
ui_print("@Launcher");
# slimlauncher
if
file_getprop("/tmp/aroma/patch2.prop","selected.6") == "1"
then
ui_print("- Instalando Launcher propio de SlimMania");
package_extract_dir("aroma/LaunchSlim", "/system/");
endif;
# launchstock
if
file_getprop("/tmp/aroma/patch2.prop","selected.6") == "2"
then
ui_print("- Instalando Launcher propio de SONY");
package_extract_dir("aroma/LaunchStock", "/system/");
endif;
# apex
if
file_getprop("/tmp/aroma/patch2.prop","selected.6") == "3"
then
ui_print("- Instalando Apex launcher");
package_extract_dir("aroma/Apex", "/system/");
endif;
# zeam
if
file_getprop("/tmp/aroma/patch2.prop","selected.6") == "4"
then
ui_print("- Instalando Zeam Launcher");
package_extract_dir("aroma/Zeam", "/system/");
endif;
# miui
if
file_getprop("/tmp/aroma/patch2.prop","selected.6") == "5" Si elegimos la opción 5 del grupo 6 (selected.6)...
then
ui_print("- Instalando Launcher estilo MIUI");
package_extract_dir("aroma/LaunchMIUI", "/system/");
endif;
Tercera parte: Corresponde a la séptima parte del código de aroma-config.
(Click para mostrar/ocultar)
En este apartado trataremos la selección de aplicaciones opcionales.
Código:
ui_print("@Aplicaciones opcionales"); Cambiar nombre de grupo!
# youtube
if
file_getprop("/tmp/aroma/patch.prop","item.1.1") == "1" Como solo hay un grupo es item.1.x y como es la aplicación 1,entonces es item.1.1
then
ui_print("- Instalando Youtube");
package_extract_dir("aroma/Youtube", "/data/app");
endif;
# gmail
if
file_getprop("/tmp/aroma/patch.prop","item.1.2") == "1" En este caso la aplicación es item.1.2, y el == "1" se refiere a si está marcada o no (1 es marcada y 0 es no marcada). Si es 0, entonces no ponemos nada porque no haría nada.
then
ui_print("- Instalando GMail");
package_extract_dir("aroma/Gmail", "/data/app"); Extrae la carpeta aroma/Gmail en data/app porque queremos que sea una aplicación eliminable, si quisieramos que no se pueda eliminar la extraeríamos a /system/app
endif;
# email
if
file_getprop("/tmp/aroma/patch.prop","item.1.3") == "1"
then
ui_print("- Instalando Email de stock de Xperia");
package_extract_dir("aroma/Emailstock", "/system/app");
endif;
# scriptmanager
if
file_getprop("/tmp/aroma/patch.prop","item.1.4") == "1"
then
ui_print("- Instalando Script Manager");
package_extract_dir("aroma/ScriptManager", "/data/app");
endif;
# notas
if
file_getprop("/tmp/aroma/patch.prop","item.1.5") == "1"
then
ui_print("- Instalando Notas de stock de Xperia");
package_extract_dir("aroma/Notasstock", "/system/app");
endif;
# droidsail
if
file_getprop("/tmp/aroma/patch.prop","item.1.6") == "1"
then
ui_print("- Instalando DroidSail APP to SD");
package_extract_dir("aroma/droidsail", "/system/app");
endif;
# sdbooster
if
file_getprop("/tmp/aroma/patch.prop","item.1.7") == "1"
then
ui_print("- Instalando SD Booster");
package_extract_dir("aroma/SDbooster", "/system/app");
endif;
# smartconect
if
file_getprop("/tmp/aroma/patch.prop","item.1.8") == "1"
then
ui_print("- Instalando SmartConnect");
package_extract_dir("aroma/smartconnect", "/data/app");
endif;
# esexplorador
if
file_getprop("/tmp/aroma/patch.prop","item.1.9") == "1"
then
ui_print("- Instalando ES explorador");
package_extract_dir("aroma/ESexplorador", "/data/app");
endif;
# 3d
if
file_getprop("/tmp/aroma/patch.prop","item.1.10") == "1"
then
ui_print("- Instalando Camara y Album 3D");
package_extract_dir("aroma/3D", "/system/app");
endif;
Cuarta parte: Propia de updater-script (ya nos olvidamos de aroma-config). Lo necesario para flashear la ROM, similar a cualquier final de un updater-script.
(Click para mostrar/ocultar)
Contiene lo propio para flashear cualquier ROM desde un .zip flasheable.
Los archivos que no son aroma-config, updater-script ni carpetas aroma: (/aroma y /META-INF/com/google/android/aroma). No se tocan, se dejan igual que estaban, si al instalador AROMA nos referimos.
Códigos completos de SlimMania para ver un instalador AROMA completo y funcional:
aroma-config
(Click para mostrar/ocultar)
Código:
calibrate("0.9718","4","1.0176","-9");
loadlang("langs/es.lang");
fontresload( "0", "ttf/DroidSans.ttf", "12" );
fontresload( "1", "ttf/DroidSans.ttf", "18" );
ini_set("rom_name", "SlimMania");
ini_set("rom_version", "1.0");
ini_set("rom_author", "JesusAlber1 & Luiseteyo");
ini_set("rom_device", "Xperia arc S");
ini_set("rom_date", "29 10 2012");
splash(
#-- Duration 6000ms / 5 seconds
6000,
#-- <AROMA Resource Dir>/sample.png
"sample"
);
###################################################################################################################
#
# STEP 1 - SELECT THEME
#
selectbox(
#-- Title
"<~themes.title>",
#-- Sub Title
"<~themes.desc>",
#-- Icon: <AROMA Resource Dir>/icons/personalize.png or <ThemeDir>/icon.personalize.png
"@personalize",
#-- Will be saved in /tmp/aroma/theme.prop
"theme.prop",
#---------------------------------[ Selectbox Without Group ]----------------------------------#
# TITLE | SUBTITLE | Initial Value #
#------------------+-----------------------------------------------------------+---------------#
"MIUI", "MIUI Theme by mickey-r & amarullz", 0, #-- selected.0 = 1
"ICS", "Ice Cream Sandwitch by DemonWav & amarullz", 0, #-- selected.0 = 2
"MIUI V4", "MIUI 4 Theme by amarullz & Lennox", 0, #-- selected.0 = 3
"Sense", "HTC Sense Theme by amarullz", 0 #-- selected.0 = 4
#--------[ Initial Value = 0: Unselected, 1: Selected, 2: Group Item, 3: Not Visible ]---------#
);
##
# SET THEME
#
#-- Change Info:
# file_getprop : should use absolute path "/tmp/aroma/theme.prop"
# prop : just use relative path "theme.prop" will automatically read the "/tmp/aroma/theme.prop"
#
if prop("theme.prop","selected.0")=="1" then
theme("miui");
endif;
if prop("theme.prop","selected.0")=="2" then
theme("ics");
endif;
if prop("theme.prop","selected.0")=="3" then
theme("miui4");
endif;
if prop("theme.prop","selected.0")=="4" then
theme("sense");
endif;
###################################################################################################################
#
# STEP 2 - SHOW ROM INFORMATION
#
viewbox(
#-- Title
"Bienvenido a SlimMania!",
#-- Text
"Vas a instalar <b>"+
#-- Get Config Value
ini_get("rom_name")+
"</b> for <b>"+ini_get("rom_device")+"</b>.\n\n"+
" Version\t: <b><#selectbg_g>"+ini_get("rom_version")+"</#></b>\n"+
" Codename\t: <b><#selectbg_g>SlimMania</#></b>\n"+
" Updated\t: <b><#selectbg_g>"+ini_get("rom_date")+"</#></b>\n\n\n"+
"Pulsa Siguiente para continuar con la Instalacion",
#-- Icon
"@welcome"
);
###################################################################################################################
#
# STEP 3 - LICENSE
#
agreebox(
#-- Title
"Terminos y condiciones",
#-- Subtitle / Description
"Lee atentamente y acepta para continuar con la instalacion.",
#-- Icon
"@license",
#-- Text Content ( Read from <AROMA Resource Dir>/license.txt )
resread("license.txt"),
#-- Checkbox Text
"Acepto los terminos y condiciones...",
#-- Unchecked Alert Message
"Por favor, marca la casilla de aceptar..."
);
###################################################################################################################
#
# STEP 4 - CHANGELOG
#
textbox(
#-- Title
"Changelog SlimMania",
#-- Subtitle
"Changelog de la nueva version de SlimMania",
#-- Icon
"@update",
#-- Arg 4
resread("changelog.txt")
);
##
# MAIN MENU
#
menubox(
#-- Title
ini_get("rom_name") + " " + ini_get("rom_version"),
#-- Sub Title
"Elige una de las opciones:",
#-- Icon
"@welcome",
#-- Will be saved in /tmp/aroma/demo.prop
"demo.prop",
#-------------------------+-----------------[ Menubox Items ]-------------------------+---------------#
# TITLE | SUBTITLE | Item Icons #
#-------------------------+-----------------------------------------------------------+---------------#
"Instalar ROM", "Instalar SlimMania en este dispositivo", "@install", #-- selected = 1
"Otras opciones", "Salir, reiniciar, etc.", "@apps" #-- selected = 2
);
##
# MISC MENU
#
if prop("demo.prop","selected")=="2" then
#-- Show Other Demo
menubox(
#-- Title
"Cancelando...",
#-- Sub Title
"Elige una opción",
#-- Icon
"@cancel",
#-- Will be saved in /tmp/aroma/other_demo.prop
"other_demo.prop",
#-------------------------+-----------------[ Menubox Items ]-------------------------+---------------#
# TITLE | SUBTITLE | Item Icons #
#-------------------------+-----------------------------------------------------------+---------------#
"Reiniciar", "Reiniciar el dispositivo", "@alert", #-- selected = 1
"Salir", "Regresar al recovery", "@install" #-- selected = 2
);
#-- Reboot
if prop("other_demo.prop","selected")=="1" then
if
confirm(
#-- Title
"Reiniciar",
#-- Text
"¿Reiniciar el dispositivo?",
#-- Icon (Optional)
"@reboot"
)=="yes"
then
reboot("now");
endif;
endif;
#-- Exit
if prop("other_demo.prop","selected")=="2" then
if
confirm(
#-- Title
"Salir",
#-- Text
"¿Volver al recovery?",
#-- Icon (Optional)
"@exit"
)=="yes"
then
#-- Exit - NOTE: Add dummy argument
exit("");
endif;
endif;
#-- Back To Other Demo Menu
back(
getvar("1")
);
endif;
menubox(
#-- Title
"Elige tu modelo:",
#-- Sub Title
"Elige el modelo de tu terminal:",
#-- Icon
"@personalize",
#-- Will be saved in /tmp/aroma/type.prop
"type.prop",
#-------------------------------------+-----------------[ Menubox Items ]-------------------------+---------------#
# TITLE | SUBTITLE | Item Icons #
#-------------------------------------+-----------------------------------------------------------+---------------#
"Arc S", "Sony Xperia arc S LT18i", "@device", #-- selected = 1
"Arc", "Sony Xperia arc LT15i", "@device" #-- selected = 2
);
selectbox(
#-- Title
"Apariencia personalizada",
#-- Sub Title
"Elige lo que quieras que contenga tu nueva ROM",
#-- Icon
"@choose",
#-- Will be saved in /tmp/aroma/patch.prop
"patch2.prop",
#-----------------------+-----------------[ Selectbox ]---------------------------+---------------#
# TITLE | SUBTITLE | Initial Value #
#-----------------------+---------------------------------------------------------+---------------#
"Bloqueo de pantalla", "", 2, #-- Group 1. key = "selected.1"
"AOSP lockscreen", "Bloqueo de pantalla estilo AOSP, elegante y sencillo", 1, #-- selected.1 = 1
"Xperia T lockscreen", "Bloqueo del Xperia T con shortcuts. ¡No olvides el parche!", 0, #-- selected.1 = 2
"Barra de notificaciones", "", 2, #-- Group 2. key = "selected.2"
"Estilo GX 1", "Estilo GX, bateria en circulo blanco y toggles muy sencillos", 1, #-- selected.2 = 1
"Estilo GX 2", "Estilo GX, similar a la anterior pero semitransparente", 0, #-- selected.2 = 2
"Estilo GX 3", "Estilo GX, bateria de procentaje similar a MIUI", 0, #-- selected.2 = 3
"Estilo GX 4", "Estilo GX, bateria MIUI y toggles diferentes", 0, #-- selected.2 = 4
"Estilo GX 5", "Estilo GX, bateria en circulo blanco y toggles de colores", 0, #-- selected.2 = 5
"Teclado", "", 2, #-- Group 3. key = "selected.3"
"Xperia stock", "Teclado de stock ICS", 1, #-- selected.3 = 1
"Xperia S", "Teclado del Xperia S", 0, #-- selected.3 = 2
"Iconos", "", 2, #-- Group 4. key = "selected.4"
"Iconos SIII", "Iconos del Samsung Galaxy SIII", 1, #-- selected.4 = 1
"Iconos stock", "Iconos de stock, propios de SONY", 0, #-- selected.4 = 2
"Navegador", "", 2, #-- Group 5. key = "selected.5"
"Dolphin Browser Beta", "Recomendado: Rapido, gran apariencia, soporta HTML 5", 1, #-- selected.5 = 1
"Navegador stock", "Navegador de stock, propio de SONY", 0, #-- selected.5 = 2
"Launcher", "", 2, #-- Group 5. key = "selected.6"
"SlimMania", "Recomendado: Launcher propio de SlimMania, con opciones adicionales", 1, #-- selected.6 = 1
"Launcher stock", "Launcher de stock de Xperia arc S, 4x4 con boton AOSP, simple", 0, #-- selected.6 = 2
"APEX", "Launcher APEX, con apariencia ICS, rapido y fluido", 0, #-- selected.6 = 3
"ZEAM", "Launcher ZEAM, sencillo y comodo", 0, #-- selected.6 = 4
"MIUI launcher", "Launcher basado en el propio de MIUI, original y diferente", 0 #-- selected.6 = 5
#--------[ Initial Value = 0: Unselected, 1: Selected, 2: Group Item, 3: Not Visible ]---------#
);
checkbox(
#-- Title
"Aplicaciones opcionales",
#-- Sub Title
"Selecciona las aplicaciones opcionales que quieras instalar",
#-- Icon: <AROMA Resource Dir>/icons/personalize.png or <ThemeDir>/icon.personalize.png
"@choose",
#-- Will be saved in /tmp/aroma/patch.prop
"patch.prop",
#-----------------------+-----------------[ Checkbox ]---------------------------+---------------#
# TITLE | SUBTITLE | Initial Value #
#-----------------------+---------------------------------------------------------+---------------#
"Aplicaciones opcionales", "Elige las aplicaciones siguientes que quieras instalar",2, #-- Group 1. key = "item.1.x"
"Youtube", "Aplicacion Youtube", 0, #-- item.1.1
"Gmail", "Aplicacion GMail para ver tu correo electronico de Google", 0, #-- item.1.2
"Email", "Aplicacion Email de stock de Xperia", 0, #-- item.1.3
"Script Manager", "Aconsejable instalar para configurar despues SuperCharguer", 1, #-- item.1.4
"Notas", "Aplicacion Notas de stock de Xperia", 0, #-- item.1.5
"DroidSail", "Aplicacion que permite pasar apps a la SD, para mayor almacenamiento interno", 0, #-- item.1.6
"SDBooster", "Aplicacion para aumentar la velocidad de transferencia de datos con la SD", 1, #-- item.1.7
"Smart Connect", "Aplicacion para ejecutar ciertas acciones al conectar perifericos", 0, #-- item.1.8
"ES explorador", "Explorador y administrador de archivos ", 0, #-- item.1.9
"Camara 3D", "Camara y Album 3D stock de SONY ", 0 #-- item.1.10
);
##
#
# Next Screen is Installation UI
#
ini_set("text_next", "Install");
##
# READY TO INSTALL
#
viewbox(
#-- Title
"Instalacion preparada",
#-- Text
"Todo esta preparado para ser instalado.\n\n"+
"Presiona <b>Instalar</b> para comenzar.\n\n"+
"Si no estas seguro de tus elecciones, presiona <b>Atras</b>\n\n"+
"Pulsar Menu -> Deja la instalacion, salir.",
#-- Icon
"@install"
);
ini_set("text_next", "Next");
#-- Extract sleep to /tmp/aroma/sleep. It will be used in updater-script for testing wait script
restotmp("exec_demo/sleep","sleep");
##
# INSTALLATION PROCESS
#
setvar("retstatus",
install(
#-- Title
"Instalacion",
#-- Installation Process message
"Instalando <b>"+ini_get("rom_name")+"</b>.\n\n"+
"",
#-- Installation Icon
"@install",
#-- Installation Finish Message
"<b>"+ini_get("rom_name")+"</b> ha sido instalada correctamente. Pulsa Finalizar para acabar."
)
);
ini_set("text_next", "Finish");
##
# FINISH
#
# You can use return value or "reboot_it" variable to retrive checkbox value
# Example:
# if (checkviewbox(....)=="1" then
# ... checked ...
# endif;
#
checkviewbox(
#-- Title
"Hecho",
#-- Text
"<b>"+ini_get("rom_name")+"</b> ha sido instalada correctamente. ¡Disfruta de SlimMania!\n\n",
#-- Icon
"@welcome",
#-- Checkbox Text
"¡Reiniciando tu terminal!",
#-- Initial Checkbox value ( 0=unchecked, 1=checked ) - (Optional, default:0)
"1",
#-- Save checked value in variable "reboot_it" (Optional)
"now"
);
if
getvar("reboot_it")=="1"
then
reboot("now");
endif;
updater-script
(Click para mostrar/ocultar)
Código:
format("yaffs2", "MTD", "system", "0");
mount("yaffs2", "MTD", "system", "/system");
mount("yaffs2", "MTD", "userdata", "/data");
ui_print("@Initializing file system...");
ui_print("Iniciando AROMA");
show_progress(0.95, "-55000");
ui_print("- Instalando aplicaciones del sistema.");
package_extract_dir("system", "/system");
package_extract_dir("data", "/data");
ui_print("@Dispositivo");
# arcs
if
file_getprop("/tmp/aroma/type.prop","selected") == "1"
then
ui_print("Xperia arc S LT18i");
package_extract_dir("aroma/arcS", "/system/");
endif;
# arc
if
file_getprop("/tmp/aroma/type.prop","selected") == "2"
then
ui_print("Xperia arc LT15i");
package_extract_dir("aroma/arc", "/system/");
endif;
##---- Customization
ui_print("@Bloqueo de pantalla");
# aosplock
if
file_getprop("/tmp/aroma/patch2.prop","selected.1") == "1"
then
ui_print("- Instalando AOSP lockscreen");
package_extract_dir("aroma/AOSPlock", "/system/");
endif;
# xperiatlock
if
file_getprop("/tmp/aroma/patch2.prop","selected.1") == "2"
then
ui_print("- Instalando Xperia T lockscreen. ¡No olvides el parche!");
package_extract_dir("aroma/XperiaTlock", "/system/");
endif;
ui_print("@Barra de notificaciones");
# estilogx1
if
file_getprop("/tmp/aroma/patch2.prop","selected.2") == "1"
then
ui_print("- Estilo GX, bateria en circulo blanco y toggles muy sencillos");
package_extract_dir("aroma/EstiloGX1", "/system/app");
endif;
# estilogx2
if
file_getprop("/tmp/aroma/patch2.prop","selected.2") == "2"
then
ui_print("- Estilo GX,similar a la anterior pero semitransparente");
package_extract_dir("aroma/EstiloGX2", "/system/app");
endif;
# estilogx3
if
file_getprop("/tmp/aroma/patch2.prop","selected.2") == "3"
then
ui_print("- Estilo GX, bateria de procentaje similar a MIUI");
package_extract_dir("aroma/EstiloGX3", "/system/app");
endif;
# estilogx4
if
file_getprop("/tmp/aroma/patch2.prop","selected.2") == "4"
then
ui_print("- Estilo GX, bateria MIUI y toggles diferentes");
package_extract_dir("aroma/EstiloGX4", "/system/app");
endif;
# estilogx5
if
file_getprop("/tmp/aroma/patch2.prop","selected.2") == "5"
then
ui_print("- Estilo GX, bateria en circulo blanco y toggles de colores");
package_extract_dir("aroma/EstiloGX5", "/system/app");
endif;
ui_print("@Teclado");
# tecladostock
if
file_getprop("/tmp/aroma/patch2.prop","selected.3") == "1"
then
ui_print("- Instalando Teclado de stock ICS");
package_extract_dir("aroma/XperiaStockTeclado", "/system/");
endif;
# tecladoxperias
if
file_getprop("/tmp/aroma/patch2.prop","selected.3") == "2"
then
ui_print("- Instalando Teclado del Xperia S");
package_extract_dir("aroma/XperiaSteclado", "/system/");
endif;
ui_print("@Iconos");
# iconoss3
if
file_getprop("/tmp/aroma/patch2.prop","selected.4") == "1"
then
ui_print("- Aplicaciones con Iconos del Samsung Galaxy SIII");
package_extract_dir("aroma/S3Iconos", "/system/app");
endif;
# iconosstock
if
file_getprop("/tmp/aroma/patch2.prop","selected.4") == "2"
then
ui_print("- Aplicaciones con Iconos de stock de SONY");
package_extract_dir("aroma/StockIconos", "/system/app");
endif;
ui_print("@Navegador");
# dolphin
if
file_getprop("/tmp/aroma/patch2.prop","selected.5") == "1"
then
ui_print("- Instalando Dolphin Browser Beta");
package_extract_dir("aroma/Dolphin", "/system/app");
endif;
# browstock
if
file_getprop("/tmp/aroma/patch2.prop","selected.5") == "2"
then
ui_print("- Instalando Navegador de stock de SONY");
package_extract_dir("aroma/BrowStock", "/system/app");
endif;
ui_print("@Launcher");
# slimlauncher
if
file_getprop("/tmp/aroma/patch2.prop","selected.6") == "1"
then
ui_print("- Instalando Launcher propio de SlimMania");
package_extract_dir("aroma/LaunchSlim", "/system/");
endif;
# launchstock
if
file_getprop("/tmp/aroma/patch2.prop","selected.6") == "2"
then
ui_print("- Instalando Launcher propio de SONY");
package_extract_dir("aroma/LaunchStock", "/system/");
endif;
# apex
if
file_getprop("/tmp/aroma/patch2.prop","selected.6") == "3"
then
ui_print("- Instalando Apex launcher");
package_extract_dir("aroma/Apex", "/system/");
endif;
# zeam
if
file_getprop("/tmp/aroma/patch2.prop","selected.6") == "4"
then
ui_print("- Instalando Zeam Launcher");
package_extract_dir("aroma/Zeam", "/system/");
endif;
# miui
if
file_getprop("/tmp/aroma/patch2.prop","selected.6") == "5"
then
ui_print("- Instalando Launcher estilo MIUI");
package_extract_dir("aroma/LaunchMIUI", "/system/");
endif;
ui_print("@Aplicaciones opcionales");
# youtube
if
file_getprop("/tmp/aroma/patch.prop","item.1.1") == "1"
then
ui_print("- Instalando Youtube");
package_extract_dir("aroma/Youtube", "/data/app");
endif;
# gmail
if
file_getprop("/tmp/aroma/patch.prop","item.1.2") == "1"
then
ui_print("- Instalando GMail");
package_extract_dir("aroma/Gmail", "/data/app");
endif;
# email
if
file_getprop("/tmp/aroma/patch.prop","item.1.3") == "1"
then
ui_print("- Instalando Email de stock de Xperia");
package_extract_dir("aroma/Emailstock", "/system/app");
endif;
# scriptmanager
if
file_getprop("/tmp/aroma/patch.prop","item.1.4") == "1"
then
ui_print("- Instalando Script Manager");
package_extract_dir("aroma/ScriptManager", "/data/app");
endif;
# notas
if
file_getprop("/tmp/aroma/patch.prop","item.1.5") == "1"
then
ui_print("- Instalando Notas de stock de Xperia");
package_extract_dir("aroma/Notasstock", "/system/app");
endif;
# droidsail
if
file_getprop("/tmp/aroma/patch.prop","item.1.6") == "1"
then
ui_print("- Instalando DroidSail APP to SD");
package_extract_dir("aroma/droidsail", "/system/app");
endif;
# sdbooster
if
file_getprop("/tmp/aroma/patch.prop","item.1.7") == "1"
then
ui_print("- Instalando SD Booster");
package_extract_dir("aroma/SDbooster", "/system/app");
endif;
# smartconect
if
file_getprop("/tmp/aroma/patch.prop","item.1.8") == "1"
then
ui_print("- Instalando SmartConnect");
package_extract_dir("aroma/smartconnect", "/data/app");
endif;
# esexplorador
if
file_getprop("/tmp/aroma/patch.prop","item.1.9") == "1"
then
ui_print("- Instalando ES explorador");
package_extract_dir("aroma/ESexplorador", "/data/app");
endif;
# 3d
if
file_getprop("/tmp/aroma/patch.prop","item.1.10") == "1"
then
ui_print("- Instalando Camara y Album 3D");
package_extract_dir("aroma/3D", "/system/app");
endif;
ui_print("");
ui_print("Flasheando SlimMania...");
show_progress(0.14, 3);
package_extract_dir("sdcard", "/sdcard");
package_extract_dir("system", "/system");
package_extract_dir("data", "/data");
symlink("toolbox", "/system/bin/start");
symlink("toolbox", "/system/bin/lsmod");
symlink("toolbox", "/system/bin/r");
symlink("toolbox", "/system/bin/vmstat");
symlink("toolbox", "/system/bin/ifconfig");
symlink("toolbox", "/system/bin/ionice");
symlink("toolbox", "/system/bin/schedtop");
symlink("toolbox", "/system/bin/wipe");
symlink("toolbox", "/system/bin/reboot");
symlink("toolbox", "/system/bin/rmdir");
symlink("toolbox", "/system/bin/route");
symlink("toolbox", "/system/bin/chown");
symlink("toolbox", "/system/bin/lsof");
symlink("toolbox", "/system/bin/getevent");
symlink("toolbox", "/system/bin/mkdir");
symlink("toolbox", "/system/bin/netstat");
symlink("toolbox", "/system/bin/renice");
symlink("toolbox", "/system/bin/uptime");
symlink("mksh", "/system/bin/sh");
symlink("toolbox", "/system/bin/smd");
symlink("toolbox", "/system/bin/sync");
symlink("toolbox", "/system/bin/mount");
symlink("toolbox", "/system/bin/printenv");
symlink("toolbox", "/system/bin/top");
symlink("toolbox", "/system/bin/log");
symlink("toolbox", "/system/bin/sendevent");
symlink("toolbox", "/system/bin/ps");
symlink("toolbox", "/system/bin/dmesg");
symlink("toolbox", "/system/bin/umount");
symlink("toolbox", "/system/bin/kill");
symlink("toolbox", "/system/bin/stop");
symlink("toolbox", "/system/bin/newfs_msdos");
symlink("toolbox", "/system/bin/iftop");
symlink("toolbox", "/system/bin/chmod");
symlink("toolbox", "/system/bin/rmmod");
symlink("toolbox", "/system/bin/setconsole");
symlink("toolbox", "/system/bin/mv");
symlink("toolbox", "/system/bin/rm");
symlink("toolbox", "/system/bin/id");
symlink("toolbox", "/system/bin/watchprops");
symlink("toolbox", "/system/bin/hd");
symlink("toolbox", "/system/bin/ctrlaltdel");
symlink("toolbox", "/system/bin/sleep");
symlink("toolbox", "/system/bin/ls");
symlink("toolbox", "/system/bin/cmp");
symlink("toolbox", "/system/bin/insmod");
symlink("toolbox", "/system/bin/nandread");
symlink("toolbox", "/system/bin/date");
symlink("toolbox", "/system/bin/dd");
symlink("toolbox", "/system/bin/getprop");
symlink("toolbox", "/system/bin/cat");
symlink("toolbox", "/system/bin/df");
symlink("toolbox", "/system/bin/touch");
symlink("toolbox", "/system/bin/ioctl");
symlink("toolbox", "/system/bin/setprop");
symlink("toolbox", "/system/bin/notify");
symlink("toolbox", "/system/bin/ln");
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
set_perm(0, 3003, 06755, "/system/bin/ip");
set_perm(0, 3003, 02750, "/system/bin/netcfg");
set_perm(0, 3004, 02755, "/system/bin/ping");
set_perm(0, 2000, 06750, "/system/bin/run-as");
set_perm(0, 0, 0644, "/system/lib/libgoogle_recognizer_jni.so");
set_perm(0, 0, 0644, "/system/app/GoogleQuickSearchBox.apk");
set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");
set_perm(0, 0, 0755, "/system/etc/bluetooth");
set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf");
set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf");
set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");
set_perm_recursive(1000, 1000, 0771, 0644, "/data/app");
set_perm_recursive(0 ,0 , 0755, 0755, "/system/etc/init.d");
set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");
set_perm(0, 0, 0755, "/system/etc/be_movie");
set_perm(0, 0, 0755, "/system/etc/be_photo");
set_perm(0, 0, 06755, "/system/bin/su");
set_perm(0, 2000, 0755, "/system/bin/sysinit");
set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");
set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
set_perm(0, 1000, 0755, "/system/xbin/busybox");
delete("/system/xbin/busybox-installer");
set_perm(0, 0, 04755, "/system/xbin/busybox");
set_perm(0, 0, 0644, "/system/etc/group");
set_perm(0, 0, 0644, "/system/etc/gshadow");
set_perm(0, 0, 0644, "/system/etc/passwd");
set_perm(0, 0, 0644, "/system/etc/shadow");
package_extract_file("busybox_update.sh", "/tmp/busybox_update.sh");
set_perm(0, 0, 0777, "/tmp/busybox_update.sh");
run_program("/tmp/busybox_update.sh");
run_program("/system/xbin/busybox", "--install", "-s", "/system/xbin");
symlink("/system/bin/su", "/system/xbin/su");
symlink("/system/fonts/Roboto-Regular.ttf","/system/fonts/DroidSans.ttf");
symlink("/system/fonts/Roboto-Bold.ttf","/system/fonts/DroidSans-Bold.ttf");
symlink("/factory/hdcp.keys","/system/vendor/firmware/hdcp.keys");
symlink("/data/etc/wifi/wl1271-nvs.bin","/system/etc/firmware/ti-connectivity/wl1271-nvs.bin");
unmount("/system");
unmount("/data");
show_progress(1, 0);
ui_print("¡Instalacion completada! ¡Disfruta de SlimMania!");
ui_print(" ");
ui_print(" ");
ui_print(" ");
ui_print("Agradece el trabajo a los desarrolladores, ¡anima a seguir trabajando!");
ui_print(" ");
ui_print(" ");
ui_print(" ");
ui_print(" ");
ui_print(" ");
Y si lo que uqeremos es añadir AROMA a una ROM que no lo tiene?
Tienes alguna versión descargable del tutorial?
Muchas gracias.
Justamente este tutorial es para meter el instalador AROMA en una ROM que no lo tiene, configurando tú cada apartado.
Lo único específico de tu dispositivo que debes saber es la calibración de pantalla (sino al ejecutarse el instalador saldrá todo mal ajustado). Se puede ver en el instalador AROMA de cualquier ROM de tu dispositivo, sino, yo te ayudo a encontrarla
No tengo versión descargable, de todas formas, podría hacerla en unos días
Cualquier duda, envíame un privado y lo vemos mejor!
Hola amigo, bueno antes que nada debo agradecerte por tu post, es muy intuitivo y facil de usar, se agradece tu aporte, desde hace tiempo tenia pensado implementarle aroma a mi rom en su proxima version, queria preguntarte dentro de la carpeta /aroma las aplicaciones que se pongan alli, por ejemplo dentro de la carpeta 3D, la ruta default de la aplicacion es /data o hay que crear una carpeta /data y dentro de ella hay que poner la aplicacion, saludos y de nuevo gracias por tu aporte....
Modelo de smartphone: Moto G 4.4 / OTF Firefox OS 1.4
Tu operador: Movistar
Yo tengo una duda, vengo del foro del Galaxy Ace, y me gustaria le dieran un vistazo a mis scripts, instala solo las primeras opciones es decir:
Código:
selected.1 , 2 y 3
pero del 4 al 6 me lo ignora completamente. Ademas en:
Código:
#-- selected.4 = 2
lo que va a extaer es una carpeta con varias carpetas dentro (es un mod) y no se si lo este poniendo como debe ser. Agradeceria su ayuda, adjunto mis archivos y de antemano gracias!
Modelo de smartphone: LG G2 / SG SII / HTC Magic / Xperia J / Galaxy Ace
Tu operador: Vodafone
Tremendo tutorial de Aroma Instaler.
Llevaba unos dias dandole vueltas a este instalador y ya tenia alguna cosa mas o menos clara, pero otras aunque el concepto lo tenia no sabia como llevarlo a cabo.
Suerte que encontre este tutorial y creo que ahora lo tendre todo claro en breve segun avance.
Muchas gracias JesusAlber1.
Seguire trabajando sobre la base que ya tenia, pero con tu permiso utilizare alguna cosa muy similar del tuyo. Segun avance ire quitando esas partes similares de tu codigo y creando uno propio 100% (obviamente algunas cosas es imposible de cambiar por ser obligatorias para el funcionamiento y comun a todos los desarrolladores).
buenas jesusalber1, yo solo estaba interesado en instalar unas apps nuevas pero me da error cuando lo instalo, me refiero que no me llega a abrir el AROMA, me sale error,
SYNTAXIX ERROR!!! aroma-config on line 271 col 9
(Status 1)
segui todos los pasos o eso creo porquer me da este error
gracias
Muy bueno, pero por mucho que lo intento no lo consigo, lo que me gustaria es tener mis apks organizadas, por ejemplo, una pantalla con una lista por ejemplo, una linea para aplicaciones invertidas y otra linea para iconos de bateria, osea dos renglones en una pantalla, al pulsar por ejeplo aplicaciones invertidas me lleve a otra pantalla para seleccionar las que quiero instalar, digamos que dos grupos, ¿como seria posible esto?
Yo tengo una duda, vengo del foro del Galaxy Ace, y me gustaria le dieran un vistazo a mis scripts, instala solo las primeras opciones es decir:
Código:
selected.1 , 2 y 3
pero del 4 al 6 me lo ignora completamente. Ademas en:
Código:
#-- selected.4 = 2
lo que va a extaer es una carpeta con varias carpetas dentro (es un mod) y no se si lo este poniendo como debe ser. Agradeceria su ayuda, adjunto mis archivos y de antemano gracias!
Por lo que veo te contesto bastante tarde, pero para cualquier compañero que lo necesite:
Si hay más selected que los que he dado yo en el ejemplo, tenemos que poner las condiciones para completar.
Ejemplo:
Código:
# youtube
if
file_getprop("/tmp/aroma/patch.prop","item.1.1") == "1"
then
ui_print("- Instalando Youtube");
package_extract_dir("aroma/Youtube", "/data/app");
endif;
Para cada opción, copiamos y pegamos cada bloque de código como este y donde el número remarcado copiamos para el número que sea en cada caso, luego cambiamos también los directorios de donde sacamos las aplicaciones.
buenas jesusalber1, yo solo estaba interesado en instalar unas apps nuevas pero me da error cuando lo instalo, me refiero que no me llega a abrir el AROMA, me sale error,
SYNTAXIX ERROR!!! aroma-config on line 271 col 9
(Status 1)
segui todos los pasos o eso creo porquer me da este error
gracias
SYNTAXIS ERROR es un error que se da cuando la máquina intenta leer el código y éste no cumple unas reglas requeridas.
En este código tenemos que ser muy rigurosos con la sintaxis porque como no pongamos un ; o un ), el código nos da error.
Para los SYNTAXIS ERROR!, ve con el notepad++ pulsa: Ctrl+G y escribe la línea de código donde te da el error, luego buscas ahí que es lo que no cumple las normas de sintaxis.
Se suelen dar bastantes problemas:
-No terminar las líneas que llevan ;
-Acabar siempre un checkbox(), viewbox(), selectbox() con ;
-Siempre que tengamos opciones como un selectbox(), poner una , (coma) siempre que acabemos de poner el valor inicial (1-marcado, 2-sin marcar), EXCEPTO en la última línea que no lleva la , (coma)
-...
Muy bueno, pero por mucho que lo intento no lo consigo, lo que me gustaria es tener mis apks organizadas, por ejemplo, una pantalla con una lista por ejemplo, una linea para aplicaciones invertidas y otra linea para iconos de bateria, osea dos renglones en una pantalla, al pulsar por ejeplo aplicaciones invertidas me lleve a otra pantalla para seleccionar las que quiero instalar, digamos que dos grupos, ¿como seria posible esto?
Por lo que dices, parece que quieres que según las opciones, vaya a una ventana u otra, no?
Yo no he visto eso hecho, pero imagino que escribiendo líneas de código podría conseguirse... Ahora mismo yo no tengo tiempo para hacértelo, pero pásate por xda a ver si alguna ROM nueva lo incorpora...
Sino, lo que puedes hacer sería crear un checkbox() o selectbox() con los títulos que dices y a continuación poner las aplicaciones, es decir, lo que está explicado en el tutorial.
Lo que dices es buena idea porque es bastante organizado, pero bueno, creo que AROMA nos proporciona algo similar y yo creo que es bastante, elegir una ROM personalizada la verdad es que es algo bastante interesante.
Siento no haber podido ayudarte más, cualquier cosa pregúntala que me paso por aquí.
Muy bueno, pero por mucho que lo intento no lo consigo, lo que me gustaria es tener mis apks organizadas, por ejemplo, una pantalla con una lista por ejemplo, una linea para aplicaciones invertidas y otra linea para iconos de bateria, osea dos renglones en una pantalla, al pulsar por ejeplo aplicaciones invertidas me lleve a otra pantalla para seleccionar las que quiero instalar, digamos que dos grupos, ¿como seria posible esto?
esto se hace usando keys guardadas en un archivo prop, y puedes emplear un selectbox o menubox, estas estructuras guardan la seleccion del usuario en un archivo que luego puedes controlar mediante un IF para decidir que camino toma la instalacion.
Código:
selectbox(
"Que deseas hacer?",
"Elige una opcion:",
"@icono",
"archivo_donde_se_guarda_la_opcion.prop",
#-------------------------------------------------------#
# TITLE | SUBTITLE | Initial Value #
#------------------+--------------------+---------------#
"Aplicaciones", "instala algo", 1, #-- selected.0 = 1
"MODS", "mods disponibles", 0 #-- selected.0 = 2
);
if prop("archivo_donde_se_guarda_la_opcion.prop","selected.0")=="1" then
menubox(); <---menu para la primera opcion
endif;if prop("archivo_donde_se_guarda_la_opcion.prop","selected.0")=="2" then
selectbox(); ó menubox(); <---menu para la segunda opcionendif;
Los siguientes 2 usuarios han agradecido a Mauritooo su comentario: