Ver Mensaje Individual
  #1  
Viejo 09/09/11, 17:03:00
Array

[xs_avatar]
PeQuEsan PeQuEsan no está en línea
Usuario muy activo
· Votos compra/venta: (5)
 
Fecha de registro: nov 2010
Mensajes: 2,225
Modelo de smartphone: Pixel family member
Tu operador: Orange
Mejorar el autobrillo de nuestras Desire

Hola a todos,

Supongo que todos estamos de acuerdo en que el autobrillo que trae la Desire deja mucho que desear. En plena oscuridad te deslumbra completamente. Eso es un gasto de batería completamente estúpido, que podemos evitar. Por otro lado, me picó mucho que el IPhone 4 de mi mujer gestionara el autobrillo tan y tan bien. Prácticamente deja la pantalla sin luz en ambientes oscuros. Estos de Apple se lo curran.

He estado echando un ojo a diferentes foros en XDA, y he encontrado varios hilos en los que se explica detalladamente como tocar esos settings. Lo que ya no he encontrado es a nadie que haya perdido el tiempo suficiente con su Desire para encontrar unos settings correctos, que ahorren batería sin luz, y que pongan la pantalla al máximo al sol.

El objeto de este hilo es compartir con vosotros los settings que me han quedado, después de varias pruebas con diferentes luces de ambiente.

El fichero a editar es el arrays.xml, que se encuentra dentro del framework-res.apk de vuestra ROM. No está disponible descomprimiendo directamente el fichero (los apks no dejan de ser ficheros comprimidos con al app dentro). Has de descompilar el fichero resources.arsc. Yo lo edito con Apk Manager, descompilando, editando, y volviendo a compilar... pero bueno, que hay varias formas, descritas en muchos hilos.

Volviendo al tema, en el arrays.xml podemos encontrar varios settings del sistema, pero los que nos interesan están en esta sección:

Código:
    <integer-array name="config_autoBrightnessLevels">
        <item>11</item>
        <item>41</item>
        <item>91</item>
        <item>161</item>
        <item>226</item>
        <item>321</item>
        <item>641</item>
        <item>1281</item>
        <item>2601</item>
    </integer-array>
    <integer-array name="config_autoBrightnessLcdBacklightValues">
        <item>81</item>
        <item>81</item>
        <item>81</item>
        <item>112</item>
        <item>143</item>
        <item>163</item>
        <item>186</item>
        <item>208</item>
        <item>231</item>
        <item>255</item>
    </integer-array>
    <integer-array name="config_autoBrightnessLcdBacklightValuesUp">
        <item>81</item>
        <item>81</item>
        <item>128</item>
        <item>163</item>
        <item>163</item>
        <item>163</item>
        <item>186</item>
        <item>208</item>
        <item>231</item>
        <item>255</item>
    </integer-array>
    <integer-array name="config_autoBrightnessLcdBacklightValuesDown">
        <item>81</item>
        <item>128</item>
        <item>163</item>
        <item>163</item>
        <item>163</item>
        <item>186</item>
        <item>208</item>
        <item>231</item>
        <item>255</item>
        <item>255</item>
    </integer-array>
El funcionamiento es sencillo: nuestra Desire va recogiendo el valor de luz del sensor, y lo machea contra la lista de items "config_autoBrightnessLevels"... Tomando los valores que acabo de poner, si el valor de luz está por debajo de 11, configura el brillo en 81 (primer valor de la lista de items "config_autoBrightnessLcdBacklightValues")... Si el valor está entre 11 y 41, sigue dejándolo en 81 (segundo valor de la lista de items "config_autoBrightnessLcdBacklightValues"), y así sucesivamente, hasta el final.

La lista que he puesto es la que viene por defecto en nuestras Desires... Supongo que empezáis a entender por qué en ambientes oscuros el brillo no baja... El mínimo es 81... En cuanto a los valores por arriba, yo los veo correctos, y de momento no los he tocado.

Otra cosa que he visto es que ni encerrándote en una habitación oscura el sensor detecta menos de 11 de luz... por lo que he tenido que tocar tanto los propios valores de brillo, como los valores de luz asociados. (23/09/11 - mejorado a partir del kernel 110917 de snq-)

En cuanto al objetivo de las otras dos listas de items, "config_autoBrightnessLcdBacklightValuesUp" y "config_autoBrightnessLcdBacklightValuesDown", diría que cumplen una función de histéresis, de manera que se puede evitar que en casos de luz justo en un límite, el brillo vaya cambiando cada pocos segundos. Como esto todavía no lo tengo claro, lo dejo para una segunda revisión de este hilo. En foros extranjeros configuran los mismos valores en las tres variables. Yo, una vez tenga clara y cerrada mi lista de valores correcta, ya le meteré mano a eso.

Después de este pequeño rollo, os dejo como lo tengo ahora mismo:

Código:
23/09/11 - obsoletos, mirad más abajo los que estoy usando ahora
Si hay mucho interesado en que explique con más detalle como se edita el framework-res.apk, puedo escribir los pasos. Avisadme.

Me gustaría que jugarais vosotros también con esos valores. Quizás sólo son válidos para mi Desire. Recordad que los sensores de luz se van gastando con el paso del tiempo, y quizás los valores que me den a mí no son los más usuales.

Nota 1: Todo esto se aplicable tanto a ROMs Froyo como Gingerbread. Todas tienen su arrays.xml.


---23/09/11------------Editar el arrays.xml----------------------------------------------------------------

Bueno, parece que la gente se anima, por lo que voy a explicar de forma muy breve y sencilla cómo tocar vuestro arrays.xml. Como bien ha apuntado ironjon en el hilo, con un mínimo de inglés se puede seguir por ejemplo esta guía, entre otras que encontraréis en XDA. Los pasos que voy a dar son ligeramente diferentes a los de esa guía, al final.

Para el que ande un poco perdido, las aplicaciones en Android vienen empaquetadas con extensión apk, que no es más que un fichero comprimido en formato zip. Basta con añadir extensión zip al nombre, y podréis extraer sus contenidos. Hablando de nuestro querido framework-res.apk, con eso basta para personalizar el aspecto de vuestro Android (la mayoría de imágenes que véis en vuestro terminal las encontraréis en \res\drawable-hdpi-v4\). El problema en nuestro caso es que el fichero arrays.xml no se encuentra en claro dentro del framework-res.apk, si no dentro del archivo resources.arsc, que está compilado. Para descompilarlo hace falta la herramienta apktool (y su GUI en msdos apkmanager), que hace ese trabajo, y después de editar el arrays.xml, volver a compilar.

Sin más rollos, os detallo los pasos a seguir:

- Descargamos APK Manager (url directa de descarga), y lo descomprimimos, preferiblemente en un path sin espacios (en C:\apkmanager\ por ejemplo).

- Metemos nuestro framework-res.apk en la carpeta "\place-apk-here-for-modding\".

- Ejecutamos el fichero Script.bat. Aparecerá un menú con opciones accesibles mediante su número de orden.

- Seleccionamos nuestro framework-res.apk. Para ello, opción 22, opción 1.

- Lo descomprimimos/descompilamos. Opción 9 (tardará unos segunditos... sobre los 20).

- Cuando acabe, tendremos nuestro framework-res descompilado en la carpeta "\projects\". Si accedemos a ella (no cerréis APK Manager, minimizadlo), veremos que el fichero resources.arsc no está, pero en su lugar ha aparecido la carpeta "\res\values\". Dentro encontraréis el fichero arrays.xml, en cuyo interior se encuentran las correspondencias entre luz ambiente y luminosidad de la pantalla, tal y como hemos hablado en el hilo.

- Editadlo cuidando de conservar el formato, y sólo tocar los valores que hemos comentado en este hilo. Os pongo mis valores actuales. Todo mi reconocimiento para anderl78, de XDA. Estoy usando los valores de su patch "dark+", aquí.
Código:
    <integer-array name="config_autoBrightnessLevels">
        <item>11</item>
        <item>41</item>
        <item>91</item>
        <item>161</item>
        <item>226</item>
        <item>321</item>
        <item>641</item>
        <item>1281</item>
        <item>2601</item>
    </integer-array>
    <integer-array name="config_autoBrightnessLcdBacklightValues">
        <item>35</item>
        <item>47</item>
        <item>65</item>
        <item>85</item>
        <item>117</item>
        <item>142</item>
        <item>168</item>
        <item>200</item>
        <item>231</item>
        <item>255</item>
    </integer-array>
    <integer-array name="config_autoBrightnessLcdBacklightValuesUp">
        <item>35</item>
        <item>47</item>
        <item>65</item>
        <item>85</item>
        <item>117</item>
        <item>142</item>
        <item>168</item>
        <item>200</item>
        <item>231</item>
        <item>255</item>
    </integer-array>
    <integer-array name="config_autoBrightnessLcdBacklightValuesDown">
        <item>47</item>
        <item>65</item>
        <item>85</item>
        <item>117</item>
        <item>142</item>
        <item>168</item>
        <item>200</item>
        <item>231</item>
        <item>255</item>
        <item>255</item>
    </integer-array>
Como podéis observar, también ha jugado con los valores de "config_autoBrightnessLcdBacklightValuesDown", para intentar que los cambios de brillo no sean tan bruscos.

RECOMENDADO: Para aprovechar del todo estos valores, deberéis tener instalado un kernel que tenga el rango total de valores de luz disponibles (10). En este momento, el único que lo tiene es el kernel de snq-, a partir de su versión 110917. Sin él, por ejemplo, nunca tendréis valor 35 (el más bajo), en total oscuridad. He solicitado a bananacakes y a sibere que le echen un ojo al patch de tobi, por si pueden añadirlo ellos también a sus kernels.


- Una vez hayáis editado el arrays.xml, cerrad el editor, volved a APK Manager. Ahora toca volver a compilar con los cambios. Opción 11. Esto tardará algo más que el proceso de descompilación... Sobre el minutito.

- A la pregunta "Is this a system apk (y/n)", respondéis "y".
- A la pregunta "Aside from the signatures [...]", respondéis "n".

- En este paso tendremos nuestro nuevo framework-res.apk en la carpeta "\place-apk-here-for-modding\", con el nombre "unsignedframework-res.apk". Lo dejamos ahí todavía.

- Seleccionaremos el nuevo framework-res mediante la opción 22, opción 2.

- Deberemos aplicarle el proceso de zipalign, opción 5.

- Ya hemos acabado. Salimos de APK Manager con la opción 24 (hay un pequeño bug, y la primera vez da error... hay que introducirlo dos veces).

- Sólo nos quedará renombrar el "unsignedframework-res.apk" a "framework-res.apk", y flashear vuestro móvil con él, de la manera que más os guste: vía ADB, vía recovery mediante un flasheable (tendréis que desactivar la comprobación de firma en ese caso), etc...


Creo que eso es todo.

Un saludo, y ya me contaréis.

Última edición por PeQuEsan Día 23/09/11 a las 14:44:08.
Responder Con Cita
Los siguientes 11 usuarios han agradecido a PeQuEsan su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]