PDA

Ver la Versión Completa : Artículo Sistema ODEX en Android


rastafary
08/11/10, 17:21:27
Yo tenía un poco verde este tema y me he informado un poco sobre ello... Al principio me preguntaba qué eran los archivos ODEX que estaban al lado de los APK en el directorio de aplicaciones de sistema (/system/app/) o porque si me cargaba alguna aplicacion de sistema luego me era imposible restaurarla o porque si entraba al APK y modificaba los png para cambiar el aspecto de la aplicaciion luego los cambios no se plasmaban... y sobre todo, cuando te bajas una ROM personalizada, la mayoría traen como característica que esta "deodexed"...

Estas preguntas y dudas, las vamos a explicar y se entenderá todo un poquito mejor

¿Que es un archivo .odex?
En Android, todas las aplicaciones vienen empaquetadas en archivos con extension APK. Junto con las aplicaciones de sistema o que vienen "de serie" en el firmware del fabricante (system/app/), se puede encontrar un archivo de extension ODEX con el mismo nombre que el APK cuya funcion es la de ahorrar espacio. Estos archivos .odex son colecciones de partes de la aplicacion correspondiente, que estan optimizadas ANTES de arrancar. Lo que se consigue con esto es que se arranque el sistema mas rapido ya que con este sistema se hace una precarga de parte del codigo de la aplicacion.

Es por esto que las aplicaciones de sistema o preinstaladas sean dificiles de modificar, ya que parte del codigo de la aplicacion ya está escrito en dicho archivo .odex, Llamo modificacion a editar codigo para añadir o quitar funcionalidades a la aplicacion o, simplemente, cambiar el aspecto de las aplicaciones editando la parte visual (frameworks y demas... iconos, logos, fondos, etc etc)

¿Qué es DEODEXIZAR? (el día menos pensado meten en el diccionario este verbo xD xD)
Ahora que hemos explicado qué es un archivo .odex y para que sirve, esto ya empieza a ser mas facil de entender... El proceso de deodexizado consiste, simplemente, en reempaquetar todos los contenidos y componentes de la aplicacion en el APK correspondiente mediante el recompilado del classes.dex, que es el fichero contenido en el APK que contiene las clases de Java que se han usado en el codigo de la aplicacion. Hecho esto, lo que se consigue es tener todo en el mismo sitio y permite que se ejecute toda la aplicacion desde el paquete APK, por así decirlo, sin que haya interacciones desde fuentes externas como son los archivos .odex

¿Cómo funciona todo el tinglado?
Partimos de la base de que Android utiliza para ejecutar todo, una maquina virtual basada en Java que se llama Dalvik Virtual Machine. Bien, en el caso de aplicaciones deodexizadas, el fichero .dex que hay dentro del APK, es el que contiene la caché (codigo basé) de la aplicacion y que es utilizado por la DALVIK. En el caso de las aplicaciones ODEXIZADAS, la DALVIK utiliza el archivo .odex, que es la version mejorada y optimizada del archivo .dex. Requisito de este método es que el archivo .odex debe de estar en el mismo directorio que el APK y llamarse igual. Éste último, es el método usado por Android por defecto.

Cuando Android arranca, la caché de la maquina virtual DALVIK se llena con los archivos .odex, lo que permite a Android saber con antelación qué aplicaciones se cargaran y, como ya hemos comentado que el .odex es parte del código de la aplicación optimizado, se cargará todo mas rapidamente. DEODEXIZANDO los APK, como ya hemos comentado antes, permite tener TODO el codigo de la aplicacion en un mismo sitio, sin entrar en conflicto con el entorno de ejecución de ANDROID

¿Ventajas y Desventajas de la DEODEXIZACION?
Llegados a este punto, las ventajas o desventajas estan mas bien claras... Como ventajas tenemos las de poder personalizar/modificar las aplicaciones de sistema. Esto para los desarrolladores es vital y bastante importante... sobre todo para los que se dedican tematizar firmwares y aplicaciones de sistema.
Como deventaja, evidentemente, tenemos que el sistema tardaría mas en arrancar. Pero hay un PERO en esto, y es que esta demora en la carga del sistema solo sería la primera vez que se enciende el movil. Se sobreentiende, que la primera vez es cuando lo compras o cuando flasheas el firmware y enciendes el movil. ¿porqué solo la primera vez? pues resulta que la cache de la Dalvik, se queda escrita desde la primera vez que arrancamos Android, por lo que este proceso solo se realiza una vez... Ahora ya no parece tanta desventaja verdad? :D

-------------------------------------------------------

Espero que os haya servido de ayuda, a mi me ha hecho entender algo mas de como funciona Android. Que lo disfruteis

lokito100
08/11/10, 17:30:00
Gracias x la info men, ya lo estoy destripando :-)

Sent from my HTC Dream using Tapatalk

hairam
08/11/10, 21:32:20
*rastafary
descansa un "pokillo",
no te habras creido lo de
el saber no ocupa lugar. Los Gb(neuronas) se agotan

;-)


Pd. sigue, sigue asi. aaaaah y GRACIAS *TODO

intronauta
08/11/10, 21:40:25
Mi experiencia personal con el HTC Hero -un terminal con recursos muy limitados y muy sensible a cualquier cambio"- las roms con odex ofrececían mejor comportamiento que con .dex , estas últimas más propensas a fallos "raros" derivados de la deodexización y uso de smali/baksmali o similares, ya que al final "los ejecutables" son los odex, el apk es un contenedor firmado. Este es un manido debate odex vs dex y es hilar muy muy fino realmente.

Luego está la olvidada y extrañamente escondida opción del clockworkmod recovery para borrar la dalvik-cache y obligar al sistema a regenerar la cache de todo el sistema como en el primer arranque, muy útil después de modificar aplicaciones del sistema como cambios de tema y demás solucionando dependencias y cambios no previstos. No confundir con la opción más visible "wipe cache partition" que solo es necesario para roms que muevan /dalvik-cache a /cache (que yo sepa no se usa en el galaxy, tenemos espacio de sobra en /data). Por suerte el galaxy la regenera en muy poco tiempo, en el HTC Hero podías tirarte 10 minutos facilmente hasta que iniciaba :S

CloudyX
08/11/10, 23:45:26
Amén!!! bien explicado si señor...

rastafary
09/11/10, 02:40:46
pienso que lo ideal, sería deodexizar la apli, hacerle las modificaciones y/o cambios oportunos y odexizarla otra vez en vez de dejarla deodexizada

sihayqueirseva
09/11/10, 02:46:59
El cielo está deoxedizado, ¿Quién lo deoxedizará? El deoxedizador que lo deoxedize, buen deoxizador será. Ale.

(Perdón, no podía resistirme) :gaydude:

Edito: encima lo he escrito mal. Pues así se queda...

rastafary
09/11/10, 02:55:24
El cielo está deoxedizado, ¿Quién lo deoxedizará? El deoxedizador que lo deoxedize, buen deoxizador será. Ale.

(Perdón, no podía resistirme) :gaydude:

Edito: encima lo he escrito mal. Pues así se queda...

lo sé, estaba a güebo xD yo mentalmente ya me he dicho el trabalenguas unas cuantas veces jajaja

sgsbarna
26/01/11, 09:42:32
Un saludo a todos antes de nada...

A ver si se explicarme... Para tener todos los walpapers unidos y no tener que seleccionarlos desde la galería, se me ocurrió meterlos dentro de la aplicación de sistema "twWallpaperChosser.apk" y hasta ahi todo correcto. Utilicé el programa 7zip... Pues bien exactamente algo debo eliminar de la anterior, para poder instalarla, pero no se el que... Yo antes veía fácil los archivos .odex, pero ahora solo encuentro los .dex... Que debo de hacer exactamente para que me deje instalar esa aplicación con la modificación?

Muchas gracias de antemano...

joseramosbcn
26/01/11, 10:28:19
Un saludo a todos antes de nada... A ver si se explicarme... Para tener todos los walpapers unidos y no tener que seleccionarlos desde la galería, se me ocurrió meterlos dentro de la aplicación de sistema "twWallpaperChosser.apk" y hasta ahi todo correcto. Utilicé el programa 7zip... Pues bien exactamente algo debo eliminar de la anterior, para poder instalarla, pero no se el que... Yo antes veía fácil los archivos .odex, pero ahora solo encuentro los .dex... Que debo de hacer exactamente para que me deje instalar esa aplicación con la modificación? Muchas gracias de antemano...



Wenas amigo,

Necesitas re-firmar la apk, no tiene nada k ver con los .odex ni .dex.
Se necesita la SDK de android y la aplicacion k se curro uno de xda:
http://forum.xda-developers.com/showthread.php?t=473580

Saludos!

mtm
26/01/11, 14:42:05
Cojonudo! Gracias rastafary ahora ya me queda todo claro.

sgsbarna
26/01/11, 15:31:02
Muchas gracias pues ahora será cuestión de probarlo... A ver si así me puedo personalizar el móvil a mi gusto... Bien o mal siempre gusta decir lo hice yo... Jijiji

Gracias de verdad

Mgomedia
17/08/11, 10:52:58
falta un tutorial para DEODEXIZAR :P

Raisoft
17/08/11, 13:30:36
Gracias a hilos como estos vamos aprendiendo,pasito a pasito,muchas gracias rastafary,un saludo.

TheDave86
21/10/11, 02:21:49
Vale, tengo una pregunta y duda con respecto a esto.

Quiero actualizar una app del sistema, la cual tiene un odex, en concreto es clockwidget, bien:

¿como hago para sustituir el apk?
¿ que hago con el odex?
¿pasa algo si lo borro sin mas?
¿ ralentizaria el arranque?
o
¿dejaria de funcionar?

eli2412
21/10/11, 02:40:31
Vale, tengo una pregunta y duda con respecto a esto.

Quiero actualizar una app del sistema, la cual tiene un odex, en concreto es clockwidget, bien:

¿como hago para sustituir el apk?
¿ que hago con el odex?
¿pasa algo si lo borro sin mas?
¿ ralentizaria el arranque?
o
¿dejaria de funcionar?

depende danos más pistas, si una rom es odex y actualizas un apk, esta apk tendrás que instalarla con su correspondiente,documento odex y instalarlo por recovery
Si la rom es odex, y modificas o actualizas algún apk deodex, tendrás que eliminar primero el apk y el documento odex, no todas te van a funcionar, el reloj supongo que no tendrá problemas, aunque ni idea, pero con las del sistema, dial, phone,.mms,etc... yo de ti no lo probaría
Enviado desde mi GT-I9000 usando Tapatalk

eli2412
21/10/11, 03:12:47
Wenas amigo,

Necesitas re-firmar la apk, no tiene nada k ver con los .odex ni .dex.
Se necesita la SDK de android y la aplicacion k se curro uno de xda:
http://forum.xda-developers.com/showthread.php?t=473580

Saludos!

creo que las del sistema no hace falta firmarlas, y para el resto no se si es la misma que comentas tienes en el market un apk que se llama zipsigner2 que va perfecta.

TheDave86
21/10/11, 05:04:02
depende danos más pistas, si una rom es odex y actualizas un apk, esta apk tendrás que instalarla con su correspondiente,documento odex y instalarlo por recovery
Si la rom es odex, y modificas o actualizas algún apk deodex, tendrás que eliminar primero el apk y el documento odex, no todas te van a funcionar, el reloj supongo que no tendrá problemas, aunque ni idea, pero con las del sistema, dial, phone,.mms,etc... yo de ti no lo probaría
Enviado desde mi GT-I9000 usando Tapatalk

A ver, en primer lugar muchas gracias por tu respuesta.

Es una rom vodafone ofical, recien hecho s-off, instalado revcovery y rooteada, nada mas. El problema es que las aplicaciones del sistema como es obvio ya no se actualizan, por lo tanto, la unica forma es hacerlo de manera manual.

Me he descargado un apk del aptoide, este mismo:

http://ce4arab.bazaarandroid.com/app/com.htc.clock3dwidget/300172712/55494

Y lo he intentado actualizar simplemente ejecutandolo, pero claro me salio el tipico mensaje ("Esta aplicacion no esta instalada").

Me fui a la carpeta de apps del sistema y descubri lo del archivo odex. Y asi llege hasta aqui.

Con el market lo he hecho ya varias veces (no tenia archivo odex), lo borro de la carpta de sistema y lo copio tal y como me lo descargo (cambiandole el nombre por el correcto,claro) y funciona siempre

el problema es que lo he hecho con el clockwidget y aunque se carga dentro del gestor de widgets (incluso con la previsualizacion y todo) pero cuando lo aplico...FC...

Tengo una copia hecha de ambos archivos originales. Pero aun asi, me gustaria saber y aprender como hacerlo para poder actualizar estas apps...

Ya he probado a hacerle wipe a la dalvik cache, pero sin resultados.

Alguien me ayuda? Por favor...

Un saludo

fer5275
21/10/11, 07:27:30
Muchisimas gracias, es lo que estaba buscando y solo hasta hoy vengo a entender!

eli2412
21/10/11, 08:25:28
A ver, en primer lugar muchas gracias por tu respuesta.

Es una rom vodafone ofical, recien hecho s-off, instalado revcovery y rooteada, nada mas. El problema es que las aplicaciones del sistema como es obvio ya no se actualizan, por lo tanto, la unica forma es hacerlo de manera manual.

Me he descargado un apk del aptoide, este mismo:

http://ce4arab.bazaarandroid.com/app/com.htc.clock3dwidget/300172712/55494

Y lo he intentado actualizar simplemente ejecutandolo, pero claro me salio el tipico mensaje ("Esta aplicacion no esta instalada").

Me fui a la carpeta de apps del sistema y descubri lo del archivo odex. Y asi llege hasta aqui.

Con el market lo he hecho ya varias veces (no tenia archivo odex), lo borro de la carpta de sistema y lo copio tal y como me lo descargo (cambiandole el nombre por el correcto,claro) y funciona siempre

el problema es que lo he hecho con el clockwidget y aunque se carga dentro del gestor de widgets (incluso con la previsualizacion y todo) pero cuando lo aplico...FC...

Tengo una copia hecha de ambos archivos originales. Pero aun asi, me gustaria saber y aprender como hacerlo para poder actualizar estas apps...

Ya he probado a hacerle wipe a la dalvik cache, pero sin resultados.

Alguien me ayuda? Por favor...

Un saludo

pero en una rom odexed, sólo las aplicaciones de samsung son
odexed el resto las de google, swype, vodafone, son deodex,
si entiendo lo que comentas tu rom es la oficial vodafone que es 2.3.3, y estas intentando poner el clockwidget, que entiendo que es el nuevo que corre por aquí del sgsii, que funciona en la 2.3.5, no estoy seguro pero igual ese es el problema, que tu rom no es compatible
Enviado desde mi GT-I9000 usando Tapatalk

TheDave86
21/10/11, 13:15:59
pero en una rom odexed, sólo las aplicaciones de samsung son
odexed el resto las de google, swype, vodafone, son deodex,
si entiendo lo que comentas tu rom es la oficial vodafone que es 2.3.3, y estas intentando poner el clockwidget, que entiendo que es el nuevo que corre por aquí del sgsii, que funciona en la 2.3.5, no estoy seguro pero igual ese es el problema, que tu rom no es compatible
Enviado desde mi GT-I9000 usando Tapatalk


Gracias de nuevo por tu ayuda. Tengo una HTC Sensation GingerBread (2.3.4).

Y aunque pueda tener sentido lo que comentas, no es el caso, ya que al devolverle la version original (hice una copia de ella), tanto con archivo .odex como sin el, ya no funciona, es decir, por mas que reinstalo el original al parecer me lo he cargado...

Lo cual quiere decir que el sistema ya no reconoce tal archivo supongo, o no lo carga bien...

Tiene esto solucion o empiezo a plantearme restaurar la rom...??

Un saludo

eli2412
21/10/11, 16:29:01
Gracias de nuevo por tu ayuda. Tengo una HTC Sensation GingerBread (2.3.4).

Y aunque pueda tener sentido lo que comentas, no es el caso, ya que al devolverle la version original (hice una copia de ella), tanto con archivo .odex como sin el, ya no funciona, es decir, por mas que reinstalo el original al parecer me lo he cargado...

Lo cual quiere decir que el sistema ya no reconoce tal archivo supongo, o no lo carga bien...

Tiene esto solucion o empiezo a plantearme restaurar la rom...??

Un saludo

Los archivos odexed se restauran por recovery, ponlo en un zip los dos archivos el apk y el .odex flaseas y si no se soluciona creo que no te quedará más remedio que volver a instalar de cero

Enviado desde mi GT-I9000 usando Tapatalk

TheDave86
22/10/11, 02:26:23
Los archivos odexed se restauran por recovery, ponlo en un zip los dos archivos el apk y el .odex flaseas y si no se soluciona creo que no te quedará más remedio que volver a instalar de cero

Enviado desde mi GT-I9000 usando Tapatalk

Ya lo he probado...no ha habido suerte... Podrias decirme alguna guia que pueda seguir o algun post para restaurar el sistema al firm original de htc que no se de vodafone?

se que he leido hace unos dias varios post donde se explicaba, pero realmente era todo muy confuso, y ya que estamos con este problema pues quiero probarlo, sobre todo para actualizar directamente por ota antes de rootearlo de nuevo...

Por cierto, muchas gracias por las molestias...

Un saludo

borjaxvalencia
22/10/11, 13:10:58
Si copias los archivos originales, (el .apk y el .odex) debería funcionar simplemente así. Si aún así no funciona, reinicia, y verás que si que está la app.
Con respecto a la app que estabas intentando ponerte, si es deodexed, tienes que eliminar de la carpeta /system/app los archivos .apk y .odex, y entonces pones tu apk.

He entendido que tienes la copia de seguridad de los archivos, si no la tienes siempre se pueden extraer de la rom si la tienes descargada en el ordenador... si descomprimes la rom y montas el factoryfs.rfs ( en windows te valen programas como Poweriso o MagicISO y en linux vale con ejecutar en consola "$mkdir factoryfs" y "$sudo mount -o loop factoryfs.rfs ./factoryfs" en el directorio donde esté factory.rfs). En nuestro galaxy es así, en tu htc no sé como será exáctamente.

No sé si he entendido el problema espero que te sirva de algo ;)
pd: Para desvodafonizar tu htc, pásate por el foro de htc sensation y buscate una rom oficial de htc, allí podrán ayudarte, y tendrás tutos para ponertelas.

TheDave86
22/10/11, 17:09:26
Si copias los archivos originales, (el .apk y el .odex) debería funcionar simplemente así. Si aún así no funciona, reinicia, y verás que si que está la app.
Con respecto a la app que estabas intentando ponerte, si es deodexed, tienes que eliminar de la carpeta /system/app los archivos .apk y .odex, y entonces pones tu apk.

He entendido que tienes la copia de seguridad de los archivos, si no la tienes siempre se pueden extraer de la rom si la tienes descargada en el ordenador... si descomprimes la rom y montas el factoryfs.rfs ( en windows te valen programas como Poweriso o MagicISO y en linux vale con ejecutar en consola "$mkdir factoryfs" y "$sudo mount -o loop factoryfs.rfs ./factoryfs" en el directorio donde esté factory.rfs). En nuestro galaxy es así, en tu htc no sé como será exáctamente.

No sé si he entendido el problema espero que te sirva de algo ;)
pd: Para desvodafonizar tu htc, pásate por el foro de htc sensation y buscate una rom oficial de htc, allí podrán ayudarte, y tendrás tutos para ponertelas.

Gracias por tu interes, a ver, te vuelvo a comentar el proceso que he seguido.

Lo primero que yo hice fue intentar instalar el apk descargado simplemente ejecuntandolo. Y me salio el mensaje "esta aplicacion no esta instalada".

Esto ya me habia pasado actualizando el market, y con el market sustituia la app en la carpeta system/app y funcionaba como tu dices reiniciando el dispositivo.

Asi que eso intente con el wdget del reloj, pero me di cuenta de que le acompañaba un .odex, y ahi me vinieron las dudas.

Lo que hice fue cortar los dos archivos y guardarlos en una carpat externa, y copiar el apk de la nueva app con el mismo nombre que tenia el anterior, hice un reinicio. Y me fui al cargador de widget de personalizacion de panatalla de inicio, me aparecia el widget nuevo pero al darle a aplicar solo obtenia un FC...

intente hacer un wipe dalvik cache, y nada... he intentado volver a poner los archivos antiguos solamente sustituyendolos, y nada, y ahora tambien he intentado a ponerlos dentro un archivo zip e instalarlo desde el recovery, pero tampoco funciona...

Tengo el firm original de vodafone, roteado. Le he eliminado solo las apps de vodafone, nada mas...

Y ahora lo que quiero es simplemente volver a restaurar el sistema original de htc sin cocinar ni nada, limpio, simple y llanamente, no quiero una rom, solo quiero despersolalizar el sistema para que el solo se descarge las actualizaciones pertenecientes a htc... nada mas.

eli2412
22/10/11, 18:56:23
Gracias por tu interes, a ver, te vuelvo a comentar el proceso que he seguido.

Lo primero que yo hice fue intentar instalar el apk descargado simplemente ejecuntandolo. Y me salio el mensaje "esta aplicacion no esta instalada".

Esto ya me habia pasado actualizando el market, y con el market sustituia la app en la carpeta system/app y funcionaba como tu dices reiniciando el dispositivo.

Asi que eso intente con el wdget del reloj, pero me di cuenta de que le acompañaba un .odex, y ahi me vinieron las dudas.

Lo que hice fue cortar los dos archivos y guardarlos en una carpat externa, y copiar el apk de la nueva app con el mismo nombre que tenia el anterior, hice un reinicio. Y me fui al cargador de widget de personalizacion de panatalla de inicio, me aparecia el widget nuevo pero al darle a aplicar solo obtenia un FC...

intente hacer un wipe dalvik cache, y nada... he intentado volver a poner los archivos antiguos solamente sustituyendolos, y nada, y ahora tambien he intentado a ponerlos dentro un archivo zip e instalarlo desde el recovery, pero tampoco funciona...

Tengo el firm original de vodafone, roteado. Le he eliminado solo las apps de vodafone, nada mas...

Y ahora lo que quiero es simplemente volver a restaurar el sistema original de htc sin cocinar ni nada, limpio, simple y llanamente, no quiero una rom, solo quiero despersolalizar el sistema para que el solo se descarge las actualizaciones pertenecientes a htc... nada mas.

Hola, no creo que te funcione pero no te llevará más de 1 minuto, bájate del market zipsigned2, firmas el apk no el odexed si no el otro, el que querías poner, una vez firmado lo instalas cómo cualquier otro apk, suerte

Enviado desde mi GT-I9000 usando Tapatalk

TheDave86
23/10/11, 02:35:26
Hola, no creo que te funcione pero no te llevará más de 1 minuto, bájate del market zipsigned2, firmas el apk no el odexed si no el otro, el que querías poner, una vez firmado lo instalas cómo cualquier otro apk, suerte

Enviado desde mi GT-I9000 usando Tapatalk


Umm, ok, probado y...no, no me funciona. Por un momento tuve ilusiones, pero nada...

Ya me esta amargando este tema del widget, he llegado a pensar que al fin y al cabo no sirve pa na... pero realmente no quiero tener ese problema en el futuro..

Y con respecto a lo del firm oficial de htc? como puedo hacerlo??? si instalo una rom version anterior y la desrooteo se me descargaria por ota el firm oficial??

O puedo instalarlo directamente de algun sitio??

eli2412
23/10/11, 03:04:37
Umm, ok, probado y...no, no me funciona. Por un momento tuve ilusiones, pero nada...

Ya me esta amargando este tema del widget, he llegado a pensar que al fin y al cabo no sirve pa na... pero realmente no quiero tener ese problema en el futuro..

Y con respecto a lo del firm oficial de htc? como puedo hacerlo??? si instalo una rom version anterior y la desrooteo se me descargaria por ota el firm oficial??

O puedo instalarlo directamente de algun sitio??

lastima me lo imaginaba pero por lo menos a servido para comprobar que es una parte de algo, me refiero que si la apk fuese independiente tendría que instalarse sin problemas, si no se instala es que es una parte que funciona através de htcresources.apk
me gustaría por ayudarte, pero el problema es que la configuración de HTC con la capa sense que le ponen es tan diferente a una rom samsung que no se me ocurre ninguna solución,

suerte

TheDave86
23/10/11, 15:28:43
lastima me lo imaginaba pero por lo menos a servido para comprobar que es una parte de algo, me refiero que si la apk fuese independiente tendría que instalarse sin problemas, si no se instala es que es una parte que funciona através de htcresources.apk
me gustaría por ayudarte, pero el problema es que la configuración de HTC con la capa sense que le ponen es tan diferente a una rom samsung que no se me ocurre ninguna solución,

suerte

Lo comprendo, y aun asi te lo agradezco, de todas formas a ver si alguien me puede dar alguna indicacion, ya sea para solucionarlo como para instalar la version original del firm...

Muchas gracias