No he intentado realmente esto, pero un enfoque posible sería seguir los pasos que realizaría una recuperación personalizada al instalar ("flashear") el archivo .zip
- que se puede encontrar en META-INF/com/google/android/updater-script
(después de extraer el archivo). Para el archivo de Kitkat GApps, esto se ve así:
ui\_print("Instalando archivos...");
run\_program("/sbin/busybox", "mount", "/system");
show\_progress(1, 15);
delete("/system/app/Provision.apk","/system/app/QuickSearchBox.apk","/system/app/priv-app/SetupWizard.apk","/system/app/priv-app/Velvet.apk","/system/app/Vending.apk","/system/app
package\_extract\_dir("system", "/system");
set\_perm(0, 0, 0755, "/system/addon.d/70-gapps.sh");
package\_extract\_dir("optional", "/tmp");
package\_extract\_file("install-optional.sh", "/tmp/install-optional.sh");
set\_perm(0, 0, 0777, "/tmp/install-optional.sh");
run\_program("/tmp/install-optional.sh", "");
show\_progress(1, 15);
ui\_print("Limpiando y configurando metadatos...");
set\_metadata\_recursive("/system/addon.d", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0755, "capabilities", 0x0, "selabel", "u:object\_r:system\_file:s0");
set\_metadata\_recursive("/system/app", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object\_r:system\_file:s0");
set\_metadata\_recursive("/system/priv-app", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object\_r:system\_file:s0");
set\_metadata\_recursive("/system/etc/permissions", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0755, "capabilities", 0x0, "selabel", "u:object\_r:system\_file:s0");
set\_metadata\_recursive("/system/etc/preferred-apps", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0755, "capabilities", 0x0, "selabel", "u:object\_r:system\_file:s0");
set\_metadata("/system/etc/g.prop", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "u:object\_r:system\_file:s0");
set\_metadata\_recursive("/system/framework", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object\_r:system\_file:s0");
set\_metadata\_recursive("/system/lib", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object\_r:system\_file:s0");
set\_metadata\_recursive("/system/usr/srec/en-US", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object\_r:system\_file:s0");
set\_metadata\_recursive("/system/vendor/pittpatt", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object\_r:system\_file:s0");
run\_program("/sbin/busybox", "umount", "/system");
ui\_print("¡Instalación completa!");
Por supuesto, podemos omitir los comentarios/salida de depuración, y esencialmente terminar con estos pasos. Supongo que has desempaquetado el contenido del archivo .zip
en algún lugar de tu dispositivo, y estás en una shell (terminal o adb shell
) con permisos de root (su
) para comenzar:
mount -o remount,rw /system
(line 2)
- si los archivos listados en la línea 4 existen:
rm -f
por cada uno de ellos
- copiar todo el contenido de la carpeta
system/
del archivo .zip
a /system
(línea 5)
chmod 0755 /system/addon.d/70-gapps.sh
(línea 6)
- (aplicar los pasos anteriores en las líneas 7-9)
sh /tmp/install-optional.sh
(línea 10)
Ahora se vuelve un poco más difícil (para principiantes) interpretar los comandos set_metadata_recursive
. Explicaré esto en el primero (línea 13):
/system/addon.d
debe ser propiedad de uid 0 y gid 0, los permisos de archivo deben ser 0755 (dmode es modo de directorio, fmode modo de archivo), los atributos de SELinux son u:object_r:system_file:s0
. Podrías haber notado que he omitido dos columnas: No tengo ni idea de qué significa "capabilities", 0x0
, así que no puedo explicarlo (si alguien lo sabe, por favor comenta). Así que hagamos eso:
chown -R root:root /system/addon.d # -R es recursivo, root es id de usuario/grupo 0
chmod -R 755 /system/addon.d # como dmode y fmode son iguales, podemos hacer eso
# en este lugar falta: propiedades SELinux. Nunca he tratado con esas
Si como en la línea 14 fmode y dmode son diferentes, también tendrás que cuidar eso. Aplica dmode como arriba, y síguelo con un find
-type f -print0 | xargs chmod
, reemplazando
por el primer argumento de set_metadata_recursive
, y por el fmode correspondiente.
Finalmente, vuelve a montar /system
solo lectura nuevamente: mount -o remount,ro /system
- o simplemente reinicia (de todos modos tendrás que hacerlo), lo cual también se encargará de eso.
He omitido el material de SELinux debido a la falta de conocimiento. Es muy probable que funcione sin eso, pero podría ser bueno hacerlo para una seguridad adicional :)
0 votos
Un método puede ser: extraer el zip de GApps y separar los archivos destinados a ser copiados en la partición del sistema. Luego, copiar cada uno de ellos individualmente a su ubicación prevista. Para saber la ubicación, busca algún script que contenga instrucciones para el Recovery. Así tendrás una idea. Reinicia y observa qué sucede.
1 votos
No olvides ajustar los permisos (también encontrados en ese script). Además, necesitarás remontar
/system
como lectura-escritura antes, y luego volver a solo lectura después de empujar las aplicaciones.0 votos
Utilicé link2sd para convertirlos a sistema, después de algunos errores, inicié sesión en google tengo gmail, pero no puedo conectarme a la playstore @Izzy ¿qué permisos necesito cambiar?
1 votos
Como ya señaló @Firelord, el
.zip
contiene un script:META-INF/com/google/android/updater-script
contiene los pasos que generalmente ejecutaría una recuperación personalizada. Utilízalo como guía, aunque tendrás que "convertir" los comandos.