PDA

Ver la Versión Completa : [ TUTORIAL ] Instalador AROMA para tu propia ROM.


JesusAlber1
11/11/12, 15:00:07
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 X-D
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 ++ (http://download.tuxfamily.org/notepadplus/6.2/npp.6.2.Installer.exe) 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).

http://i.minus.com/i622V4w4LQFid.png

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:

http://i.minus.com/iFt26e9IFfRRP.png

2-Abrimos la carpeta META-INF / com / google /android . Veremos una lista de archivos con una carpeta llamada aroma.

http://i.minus.com/iYWJjPoDrm10u.png

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:

http://i.minus.com/ixcnIcG2p7xHi.png



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 :ok:

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

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.
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

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.
################################################## ################################################## ###############
#
# 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:

Segunda parte del código: Muestra al usuario la información de la ROM más extendida y de forma más clara.
################################################## ################################################## ###############
#
# 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

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...)
################################################## ################################################## ###############
#
# 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:

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).
################################################## ################################################## ###############
#
# 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:

Menú principal: Pide al usuario que elija entre Instalar la ROM o Salir del instalador.
##
# 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:
##
# 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!)

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:

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.

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:

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.

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:

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.

##
#
# 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:

Novena parte del código: Proceso de instalación, mostrará al usuario lo que se está instalando y todo el proceso de instalación.
#
# 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:

Décima parte del código: Finalizar con el instalador, despedirse del usuario y reiniciar.

##
# 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:

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)

format("yaffs2", "MTD", "system", "0");
mount("yaffs2", "MTD", "system", "/system");
mount("yaffs2", "MTD", "userdata", "/data");
ui_print("@Initializing file system..."); No tocar!
ui_print("Iniciando AROMA"); Modificable


show_progress(0.95, "-55000");
ui_print("- Instalando aplicaciones del sistema."); Modificable
package_extract_dir("system", "/system");
package_extract_dir("data", "/data");



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.

Aquí tendremos la configuración relativa a la elección de dispositivo (cuando elegimos entre los dos dispositivos que puede ser).

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.

Aquí tendremos la configuración correspondiente a las aplicaciones del sistema que queramos elegir.

##---- 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.

En este apartado trataremos la selección de aplicaciones opcionales.

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.

Contiene lo propio para flashear cualquier ROM desde un .zip flasheable.

ui_print("");
ui_print("Flasheando SlimMania..."); Modificable
show_progress(0.14, 3);
package_extract_dir("sdcard", "/sdcard"); Funciones de un updater-script, no las toques a no se que sepas hacerlo
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_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!"); Modifícalo a tu gusto ;)
ui_print(" ");
ui_print(" ");
ui_print(" ");
ui_print("Agradece el trabajo a los desarrolladores, ¡anima a seguir trabajando!"); Más modificaciones
ui_print(" ");
ui_print(" ");
ui_print(" ");
ui_print(" ");
ui_print(" ");




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.

JesusAlber1
11/11/12, 15:00:44
Códigos completos de SlimMania para ver un instalador AROMA completo y funcional:

aroma-config
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
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(" ");

'Shiino
14/11/12, 05:31:30
Excelente tuto! Jesus! una duda, tu rom es ICS , si yo intentara usara tus codigos para usarla en una rom GB no funcionaria?

Gus_Tineo
15/11/12, 16:34:11
Muy buen aporte para la gente que está/estamos empezando :ok:

JesusAlber1
17/11/12, 14:22:20
Excelente tuto! Jesus! una duda, tu rom es ICS , si yo intentara usara tus codigos para usarla en una rom GB no funcionaria?

Hasta donde yo sé sí se puede usar en GB, de hecho hay ROMs basadas GB que tienen instalador AROMA. :ok:

rilo
28/12/12, 09:29:18
Hola JesusAlbert1

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.

JesusAlber1
31/12/12, 10:32:07
Hola JesusAlbert1

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 X-D

No tengo versión descargable, de todas formas, podría hacerla en unos días :ok:

Cualquier duda, envíame un privado y lo vemos mejor!

rilo
31/12/12, 12:52:14
Lo había entendido mal.

No te preocupes que me lo copio en word y ya está.

Gracias por tu ofrecimiento.

cova86
03/01/13, 01:30:30
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....

cova86
04/01/13, 01:36:12
Me corrigo ya lei todo el post, solo una duda mas, en la primera parte y en la 6 parte de updater-script ejecutas dos veces

package_extract_dir("sdcard", "/sdcard");
package_extract_dir("system", "/system");
package_extract_dir("data", "/data");

Se sobreescriben de nuevo los valores no??, esto es realmente necesario o se puede dejar solo una d las dos partes???? saludos y gracias por el post

tarkin88
07/01/13, 11:17:27
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: selected.1 , 2 y 3 pero del 4 al 6 me lo ignora completamente. Ademas en: #-- 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!

raziel-77
25/01/13, 03:53:37
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).

jberten
19/03/13, 07:54:51
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

Merche300
13/07/13, 21:48:58
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?

JesusAlber1
02/08/13, 20:51:24
Perdonad a todos por haber "abandonado" este post durante un tiempo, pero he estado muy liado y me ha sido completamente imposible conectarme...

Ya estoy de vuelta con más tiempo y os ayudaré en todo lo que sea posible.

JesusAlber1
02/08/13, 21:01:47
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: selected.1 , 2 y 3 pero del 4 al 6 me lo ignora completamente. Ademas en: #-- 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:
# 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.

JesusAlber1
02/08/13, 21:10:08
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)
-...

Espero que te sirva de ayuda para un futuro.

JesusAlber1
02/08/13, 21:16:23
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í.

Mauritooo
03/08/13, 06:56:36
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.



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 opcion

endif;



X-D

RuralGalaxy
14/08/13, 02:13:26
Gracias por este tutorial! Muy útil y interesante! ;)

SocratesZTE
15/08/13, 15:00:08
Que pedazo de tutorial, muchísimas gracias.

marcos12x
22/08/13, 16:49:55
alguien puede resubir el enlace de mediafire?
Gracias de antemano

JesusAlber1
17/09/13, 12:23:18
alguien puede resubir el enlace de mediafire?
Gracias de antemano

Me dice que está disponible y, de hecho, he podido descargarlo.

Comprueba si puedes descargarlo y me comentas!

sergio77vlc
19/01/14, 22:39:27
Pues yo me estoy volviendo loco.
Llevo como 3 horas intentando instalar una rom con aroma que he hecho para la galaxy tab 2
y siempre me da error en aroma-config linea 1 col 14 !!

mi aroma config empieza asi:

theme("ics");
loadlang("langs/es.lang");
ini_set("rom_name", "Benimamet ROM");
ini_set("rom_version", "1.0");
ini_set("rom_author", "[email protected]");
ini_set("rom_device", "Galaxy Tab 2");

porque da error en la primera linea? si tiene punto y coma?

waterjavy
21/01/14, 18:51:20
Pues yo me estoy volviendo loco.
Llevo como 3 horas intentando instalar una rom con aroma que he hecho para la galaxy tab 2
y siempre me da error en aroma-config linea 1 col 14 !!

mi aroma config empieza asi:

theme("ics");
loadlang("langs/es.lang");
ini_set("rom_name", "Benimamet ROM");
ini_set("rom_version", "1.0");
ini_set("rom_author", "[email protected]");
ini_set("rom_device", "Galaxy Tab 2");

porque da error en la primera linea? si tiene punto y coma?
prueba a quitar las dos primeras lineas y ponerlas despues, y a lo primero del todo debes de poner la calibracion de la pantalla, te paso un ejemplo :
calibrate("0.9718", "4", "1.0176", "-9");

ini_set("rom_name", "Kit Kat Xperience");
ini_set("rom_version", "4.2");
ini_set("rom_author", "Waterjavy");
ini_set("rom_device", "Xperia U");
ini_set("rom_date", "21/01/2014");

splash(
#-- Duration 6000ms / 5 seconds
6000,

#-- <AROMA Resource Dir>/SPLASH.png
"SPLASH"
);
splash(
#-- Duration 6000ms / 5 seconds
6000,

#-- <AROMA Resource Dir>/sample.png
"sample"
);

##
# Font Selection
#

fontresload( "0", "ttf/Roboto-Regular.ttf;ttf/DroidSansArabic.ttf;ttf/DroidSansFallback.ttf;", "12" ); #-- Use sets of font (Font Family)

##
# SHOW LANGUAGE SELECTION
#

selectbox(
#-- Title
"Select Language",

#-- Sub Title
"Please select installer language that you want to use while Installing ROM",

#-- Icon:
"@default",

#-- Will be saved in /tmp/aroma/lang.prop
"lang.prop",

"English", "Welcome to Installer", 0, #-- selected.0 = 1
"Espanol", "Bienvenido al Instalador", 1 #-- selected.0 = 2

);

##
# SET LANGUAGE & FONT FAMILY
#

if prop("lang.prop","selected.0")=="1" then
loadlang("langs/en.lang");
fontresload( "0", "ttf/Roboto-Regular.ttf", "12" ); #-- "0" = Small Font ( Look at Fonts & UNICODE Demo Below )
fontresload( "1", "ttf/Roboto-Regular.ttf", "18" ); #-- "1" = Big Font
endif;

if prop("lang.prop","selected.0")=="2" then
loadlang("langs/es.lang");
fontresload( "0", "ttf/Roboto-Regular.ttf", "12" );
fontresload( "1", "ttf/Roboto-Regular.ttf", "18" );
endif;


################################################## ################################################## ###############
#
# 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 #
#------------------+-----------------------------------------------------------+---------------#

"Generic", "Generic Theme by aroma installer", 1, #-- selected.0 = 1
"MIUI", "MIUI Theme by mickey-r & amarullz", 0, #-- selected.0 = 2
"ICS", "Ice Cream Sandwitch by DemonWav & amarullz", 0, #-- selected.0 = 3
"MIUI V4", "MIUI 4 Theme by amarullz & Lennox", 0, #-- selected.0 = 4
"Sense", "HTC Sense Theme by amarullz", 0 #-- selected.0 = 5

#--------[ 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")=="2" then
theme("miui");
endif;

if prop("theme.prop","selected.0")=="3" then
theme("ics");
endif;

if prop("theme.prop","selected.0")=="4" then
theme("miui4");
endif;

if prop("theme.prop","selected.0")=="5" then
theme("sense");
endif;

sebazariaz
24/02/14, 13:30:28
Y alguien sabe para quitarlo de una ROM como es?

brian.alveal
04/05/14, 02:20:51
JesusAlber1 como puedo eliminar el aroma installer de una rom??? gracias???

wolfcat90
20/07/14, 13:57:57
Hola!
Necesito de alguien que me pueda echar una mano, voy error tras error tras error... tanto que creo que voy a perder la cordura.
Este es el fragmento de código que he modificado, y me da error siempre que voy a instalarlo (SYNTAXIS ERROR).

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 #
#-----------------------+---------------------------------------------------------+---------------#

"Explorador de Arvivos", "", 2, #-- Group 1. key = "selected.1"
"ESExplorer", "Explorador de archivos rápido y con acceso a la raíz.", 1, #-- selected.1 = 1
"Explorador Stock", "(No recomendado) Explorador de fábrica sencillo sin acceso a root", 0, #-- selected.1 = 2

"Reproductor de Música", "", 2, #-- Group 2. key = "selected.2"
"Apollo", "Reprodductor de Música de CyanogenMod", 1, #-- selected.2 = 1
"Rocket Player", "Reproductor sencillo con ecualizador", 0, #-- selected.2 = 2
"Reproductor de Música Stock", "Reproductor Stock de Samsung", 0, #-- selected.2 = 3

"Teclado", "", 2, #-- Group 3. key = "selected.3"
"Android L", "Teclado de Android L", 1, #-- selected.3 = 1
"Go Keyboard", "Teclado Go Keyboard", 0, #-- selected.3 = 2
"Teclado Stock", "Teclado Stock de Samsung", 0, #-- selected.3 = 3

"Launcher", "", 2, #-- Group 4. key = "selected.4"
"KK Launcher", "Launcher con apariencia Android L", 1, #-- selected.4 = 1
"Google Now Launcher", "Launcher de Google", 0, #-- selected.4 = 2
"Holo Launcher", "Launcher muy customizable con apariencia ICS", 0, #-- selected.4 = 3
"Holo Launcher HD", "Mismo launcher que el anterior pero en HD", 0, #-- selected.4 = 4

"Navegador", "", 2, #-- Group 5. key = "selected.5"
"CM Browser", "Recomendado: Rapido, gran apariencia y seguro", 1, #-- selected.5 = 1
"Chrome", "Navegador Chrome similar al de ordenador", 0, #-- selected.5 = 2
"Navegador stock", "Navegador de stock de Samsung", 0, #-- selected.5 = 3

"Video", "", 2, #-- Group 5. key = "selected.6"
"MxReproductor", "(Recomendado) Admite más formatos que los otros reproductores", 1, #-- selected.6 = 1
"VLC for Android BETA", "Reproductor de Video VLC para Android", 0, #-- selected.6 = 2
"Reproductor de Video Stock", "Reproductor de Video Stock", 0, #-- selected.6 = 3



#--------[ 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 de 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 Samsung", 0, #-- item.1.3
"Instagram", "Red Social en la que predominan las fotos", 0, #-- item.1.4
"Facebook", "Aplicacion de la red social Facebook", 0, #-- item.1.5
"Dropbox", "Aplicacion que permite subir archivos a la nube", 0, #-- item.1.6
"Link2SD", "Aplicacion que permite mover apps a la SD, boorar cache y mucho mas...", 0, #-- item.1.7
"Twitter", "Red Scocial de Twitter", 0, #-- item.1.8
"Whatsapp", "Red de mensajeria conocida por todos", 0, #-- item.1.9

); //ERROR AQUI

robertron
08/10/14, 10:52:44
Gracias, estoy leyendo sin parar para intentar aprender y meterlo en mi proxima rom. Vaya currazo

xxKirianxx
17/10/14, 04:47:44
Menudo currazo.... Un indispensable para la gente que esta empezando. Muchas gracias.

xxKirianxx
17/10/14, 04:49:55
Menudo currazo... Un indispensable para la gente que esta empezando. Muchas gracias por el tuto.

juantg93
08/10/16, 15:50:58
Alguien sabe por que al iniciar el aroma installer en una rom, en concreto la thor 1.5 para un s4, el tactil del aroma no funciona? Le doi con los botones fisicos a salir de la instalacion y entonces abre el recovery y el tactil del recovery tampoco responde, solo teclas fisicas. Si reinicio el movil ya funciona el tactil del recovery pero como abra el aroma instaler de nuevo ya no va, me pasa con cualquier rom con aroma installer, por lo tanto no puedo instalar ninguna :(

Alguna solucion?

elcidcabreador
07/09/17, 21:54:35
Gracias interesante para tener en cuenta.

sam.foro
05/11/17, 15:45:27
Un gran tuto y en español...

Una pregunta, es posible hacer un submenu de un checkbox principal. Si yo pongo como principal un selectbox de ahí si puedo hacer submenus a checkbox u otros, pero tengo que poner muchos líneas y opciones.

Mi menú principal sería, root, kernel, apps, systemui, etc.

De ahí a selectbox en todos menos en apps que es un checkbox.

Como podría hacer un if prop de un checkbox? Es posible?

He probado de todo y nada.
Gracias de antemano, un saludo.