21 votos

Al flashear CM 11, obtengo `set_metadata_recursive: some changes failed`:

ClockworkMod Recovery v6.0.2.3 me da el siguiente error cuando intento actualizar mi Samsung Galaxy Tab 2 (GT-P5113) a Cyanogenmod 11:

Restarting adbd...
Finding update package...
Opening update package...
Installing update...
set_metadata_recursive: some changes failed
E:Error in /tmp/update.zip
(status 7)
Installation aborted.

Desesperado, intenté lo mismo con Proyecto Team Win Recovery (TWRP) v2.6.3.0 -- también la última para mi platofrm,

Checking for MD5 file...
Skipping MD5 check: no MD5 file file found.
set_metadata_recursive: some changes filed
E:Error: executing updater binary in zip '/data/media/0/sideload.zip'

16voto

Evan Carroll Puntos 800

En resumen, si quieres flashear KitKat Android 4.4, tendrás que actualizar a una versión de CWM superior a la v6.0.4.5. O bien, utilizar un bootloader alternativo. Para el Galaxy Tab 2 GT-P5113 o GT-p5110 puede encontrar las instrucciones aquí .

0 votos

¿Alguna referencia o enlace sobre por qué ocurre esto, por favor?

0 votos

@SopalajodeArrierez He proporcionado una explicación en el enlace para más instrucciones. Este es un mensaje de error (si lo intentas primero sin saber), la otra pregunta es un tutorial-respuesta con más detalles.

7voto

senarvi Puntos 173

Un paquete zip que contiene una actualización de firmware siempre incluye dos archivos en META-INF/com/google/android : updater-script y update-binary . updater-script es un archivo de texto que contiene los comandos necesarios para instalar la actualización. update-binary traduce los comandos en código binario.

En Android 4.4 KitKat, Google ha cambiado la interfaz que updater-script utiliza para configurar los permisos. Los anteriormente utilizados set_perm ha quedado obsoleto y ha sido sustituido por el método set_metadata . Esto hace que las versiones antiguas del software de recuperación personalizado fallen con los paquetes de Android 4.4 (por ejemplo, CyanogenMod 11) y muestren el mensaje de error "set_metadata_recursive: some changes failed".

La mejor solución es actualizar el software de recuperación personalizado. No he encontrado una versión suficientemente nueva de ClockworkMod compilada para mi dispositivo, pero sí he encontrado la versión más reciente de TWRP que funciona.

La segunda opción es arreglar el updater-script sustituyendo cualquier set_metadata y set_metadata_recursive con la sintaxis antigua, es decir set_perm y set_perm_recursive . No he hecho esto, así que no estoy seguro de lo fácil que sería.

La tercera opción es sustituir el update-binary con uno parcheado creado por el miembro de XDA daniel_hk: http://forum.xda-developers.com/showthread.php?t=2532300 . Lo he hecho y ha funcionado bien, pero el binario está compilado para ARMv7 y no funcionará en ninguna otra arquitectura.

0 votos

Sustitución de la update-binary trabajó en mi Oppo Find 5 tanto para la ROM como para las gapps. Gracias.

0 votos

Efectivamente: actualizar TWRP de 2.6.3 a 2.8 me ha servido. Después de eso el error set_metadata_recursive al flashear nuevas ROMs desapareció. ¡Muchas gracias por el consejo!

1voto

YasondinAlt Puntos 11

Además de Respuesta de jmullee , realizado por comparación de cm-10.1.3 y cm-11 updater-script. Después de esta sustitución, he flasheado con éxito cm-11-20141110-NIGHTLY-n7000.zip con recovery 5 (incorporado en el kernel de ICS speedmod).

set_metadata => set_perm
set_metadata_recursive => set_perm_recursive

sed -i "s|set_metadata(\(\"[^\"]*\"\), \"uid\", \([0-9]*\), \"gid\", \([0-9]*\), \"mode\", \([0-9]*\).*);|set_perm(\2, \3, \4, \1);|" updater-script

0voto

JoeTheKid Puntos 1

He solucionado eso modificando el \META -INF \com\google\android\updater -script en un editor de texto, y sustituyendo todo el set_metadata_recursive por su antigua versión set_param_recursive (la firma de las funciones son relativamente equivalentes), después hay que volver a comprimir el paquete y firmar el archivo. Para reemplazar y averiguar como hacerlo: busca en google "replace set_metadata_recursive by set_param_recursive phyton" alguien ha creado un phyton script pero si entiendes las firmas de las funciones puedes hacerlo manualmente. - luego volver a empaquetar y firmar el zip.

-1voto

jmullee Puntos 1

Escribí este patrón de búsqueda/reemplazo que mezcla el nuevo formato con el antiguo, y me funcionó:

$ sed -i "s|set_metadata_recursive(\\(\"[^\"]\*\"\\), \"uid\", \\([0-9]\*\\), \"gid\", \\([0-9]\*\\), \"dmode\", \\([0-9]\*\\), \"fmode\", \\([0-9]\*\\),.*);|set_perm_recursive(\2, \3, \4, \5, \1);|" META-INF/com/google/android/updater-script

Al final la app de google-play tampoco se instalaba, así que me he picado y he flasheado un recovery actualizado ( recovery-clockwork-6.0.4.6-i9300.img con heimdal) y luego fue capaz de flashear un CM11 sin modificar. Aparte, Google Play tenía errores hasta que desactivé el 3G (forzando IPv4 sobre WiFi), parece que había problemas (¿temporales?) para conectarse a los Play Servers vía IPv6.

3 votos

Un poco más de información sería útil. ¿Lo has sacado de un foro? ¿O lo has escrito tú mismo? En cualquier caso, random piece of code no es tan útil sin algunos comentarios (especialmente en el caso de las expresiones regulares).

0 votos

Ok, lo siento - es sólo un patrón de búsqueda/reemplazo que escribí que fusiona el nuevo formato con el antiguo. Al final la aplicación de google-play tampoco se instalaba, así que me atreví a flashear un recovery actualizado (recovery-clockwork-6.0.4.6-i9300.img, con heimdal ) y luego pude flashear un cm11 sin modificar. Aparte, google play tenía errores hasta que deshabilité el 3G (forzando IPv4 sobre wifi), parece que había problemas (¿temporales?) de conexión a los servidores de play a través de IPv6

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X