Cómo crear un zip flasheable para mods de sistema Android

Si es un desarrollador de Android que quiere crear aplicaciones destinadas a la partición /system (como aplicaciones raíz), hay ciertas instancias en las que querrá crear un archivo .zip flasheable para su aplicación. Esto es para que los archivos de la aplicación puedan instalarse correctamente en la partición /system.

Algunos otros usos de los .zips flasheables incluyen:

  • Modificar el DPI
  • Aplicar una fuente personalizada
  • Aplicar una animación de arranque personalizada
  • Eliminar o agregar aplicaciones del sistema

Instruir a sus usuarios para que jueguen en el sistema de archivos y muevan archivos manualmente es una pérdida de tiempo para todos los involucrados: crear un .zip flasheable es una ruta mucho más conveniente. Esta guía de Appual le mostrará cómo crear un zip flasheable para Android.

También le mostraremos un script addon.d, para que los cambios personalizados del sistema sobrevivan a una actualización de ROM sucia; por lo tanto, los usuarios no necesitarán volver a actualizar su zip para cada actualización.

Requisitos:

  • Un explorador de archivos raíz (MiXplorer, Solid Explorer)
  • ZipSigner (para firmar zips) o el complemento MiX Signer si usa MixPlorer
  • Se recomienda encarecidamente una copia de seguridad de Nandroid

También debe preparar todos los archivos que se incluirán en el zip: APK, configuraciones, animaciones de arranque, etc. Tenga todo organizado antes de comenzar, porque este es un proceso delicado.

Plantilla de un Zip personalizado

Si desea descargar una plantilla zip que puede personalizar según sus propias necesidades, o usarla como base para crear una cremallera flasheable, puede obtenerla aquí:

  • GUIÓN DE LA PLANTILLA: ENLACE DE DESCARGA (comandos básicos / debe agregar sus valores personalizados: aplicaciones, rutas de tonos de llamada, animación de arranque …)
  • ZIP PLANTILLA: ENLACE DE DESCARGA (los ejemplos siempre son bienvenidos para comprender mejor una explicación. Puede ayudar a comprender cómo estructurar sus archivos).

La plantilla debería ser suficiente para comenzar a usar un script personalizado.

Deberá recordar estas rutas principales, porque estas son las cosas en la partición / system a las que normalmente se dirigirán sus zips flasheables:

                      addon.d => backup script to survive a dirty flash (used by GApps package for instance)
app and priv-app => system apps to add or remove
etc => host file
fonts => your font
media => your bootanimation.zip
media > audio > alarms => sounds for alarms
media > audio > notifications => sounds for notifications
media > audio > ringtones => sounds for ringtones
media > audio > ui => sounds for various things such as low battery, unlock, camera,..
root of /system for build.prop file
                    

Recuerde siempre que los archivos eliminados de estas rutas se reinstalarán después de un flash sucio, y los archivos que se agregaron manualmente se eliminarán. Es por esto que es necesario crear un script que haga una copia de seguridad de tus mods de /system.

Ejemplo de un script de actualización

                      ui_print("+-------------------------------------+");
ui_print("| CLEAN FLASH SCRIPT |");
ui_print("| |");
ui_print("| by Primokorn |");
ui_print("+-------------------------------------+");
run_program("/sbin/busybox", "umount", "/system");
run_program("/sbin/busybox", "mount", "/system");
ui_print(" ");
ui_print("***Deleting bloatwares***");
delete_recursive(
"/system/app/adaway.apk",
"/system/app/AdAway",
"/system/app/BasicDreams",
"/system/app/BookmarkProvider",
"/system/app/Calendar",
"/system/app/CalendarWidget",
"/system/app/CMFileManager",
"/system/app/CMWallpapers",
"/system/app/DeskClock",
"/system/app/Eleven",
"/system/app/Email",
"/system/app/ExactCalculator",
"/system/app/Exchange2",
"/system/app/Gello",
"/system/app/HexoLibre",
"/system/app/Jelly",
"/system/app/LiveWallpapersPicker",
"/system/app/LockClock",
"/system/app/messaging",
"/system/app/MiXplorer",
"/system/app/NexusLauncher",
"/system/app/Phonograph",
"/system/app/PhotoTable",
"/system/app/PicoTts",
"/system/app/PicoTTS",
"/system/app/ResurrectionStats",
"/system/app/SoundRecorder",
"/system/app/Terminal",
"/system/app/TugaBrowser",
"/system/app/Wallpaper",
"/system/app/WallpaperPickerGoogle",
"/system/priv-app/AudioFX",
"/system/priv-app/Chrome",
"/system/priv-app/Gallery2",
"/system/priv-app/MusicFX",
"/system/priv-app/OnePlusCamera",
"/system/priv-app/OnePlusGallery",
"/system/priv-app/OnePlusMusic",
"/system/priv-app/Recorder",
"/system/priv-app/Screencast",
"/system/priv-app/Snap",
"/system/priv-app/SnapdragonCamera",
"/system/priv-app/SnapdragonGallery",
"/system/priv-app/WeatherManagerService",
"/system/priv-app/WeatherProvider",
"/system/priv-app/Tag"
);
ui_print("Installing apps and mods, etc");
show_progress(8.800000, 5);
package_extract_dir("system", "/system/");
ui_print("***Fixing permissions***");
set_perm(0, 0, 0755, "/system/addon.d/99-dirty.sh");
set_perm(0, 0, 0644, "/system/etc/gps.conf");
set_perm(0, 0, 0644, "/system/fonts/Roboto-Regular.ttf");
set_perm(0, 0, 0644, "/system/media/audio/ringtones/PlasticRing.ogg");
set_perm(0, 0, 0644, "/system/priv-app/Phonesky.apk");
set_perm(0, 0, 0644, "/system/priv-app/microG.apk");
set_perm(0, 0, 0644, "/system/priv-app/Gsam.apk");
set_perm(0, 0, 0644, "/system/priv-app/BBS.apk");
set_perm(0, 0, 0644, "/system/priv-app/V4A-Magisk.apk");
run_program("/sbin/busybox", "mount", "/data");
package_extract_dir("data", "/data/");
set_perm(0, 0, 0755, "/data/local/afscript.sh");
show_progress(8.800000, 5);
run_program("/sbin/busybox", "umount", "/data");
run_program("/sbin/busybox", "umount", "/system");
ui_print(" ");
ui_print("Done.");
ui_print("Ready to reboot.");
                    

Nota: ui_print(” “); es para mensaje de texto. Estas líneas no hacen nada.

Siempre debe desmontar y volver a montar la partición antes de trabajar en ella.

                      run_program("/sbin/busybox", "umount", "/system");
run_program("/sbin/busybox", "mount", "/system");
                    

Para eliminar componentes/aplicaciones del sistema, coloque una coma al final de cada línea, excepto en la última.

                      delete_recursive(
"/system/app/adaway.apk",
"/system/app/AdAway",
........................
"/system/priv-app/WeatherProvider",
"/system/priv-app/Tag"
);
                    

Extraiga los archivos del sistema que desea instalar.

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

Set the file permissions.

set_perm(0, 0, 0755, "/system/addon.d/99-dirty.sh");
..............
set_perm(0, 0, 0644, "/system/priv-app/V4A-Magisk.apk");
                    

Haz lo mismo pero para la carpeta /data. Entonces montará la partición, extraerá los datos que desea agregar y establecerá los permisos.

                      run_program("/sbin/busybox", "mount", "/data");
package_extract_dir("data", "/data/");
set_perm(0, 0, 0755, "/data/local/afscript.sh");
                    

A continuación, desmontará las particiones modificadas.

                      run_program("/sbin/busybox", "umount", "/data");
run_program("/sbin/busybox", "umount", "/system");
                    

Ejemplo de secuencia de comandos Addon.D

                      #!/sbin/sh
# 
# /system/addon.d/99-dirty.sh
# /system is formatted and reinstalled, then thes files are restored.
#

. /tmp/backuptool.functions

list_files() {
cat <<EOF
addon.d/99-dirty.sh
fonts/Roboto-Regular.ttf
media/audio/ringtones/PlasticRing.ogg
priv-app/BBS.apk
priv-app/Gsam.apk
priv-app/microG.apk
priv-app/PhoneSky.apk
priv-app/V4A-Magisk.apk
etc/gps.conf
etc/hosts
EOF
}

case "$1" in
backup)
list_files | while read FILE DUMMY; do
backup_file $S/"$FILE"
done
;;
restore)
list_files | while read FILE REPLACEMENT; do
R=""
[ -n "$REPLACEMENT" ] && R="$S/$REPLACEMENT"
[ -f "$C/$S/$FILE" ] && restore_file $S/"$FILE" "$R"
done
rm -rf /system/app/adaway.apk
rm -rf /system/app/AdAway
rm -rf /system/app/BasicDreams
rm -rf /system/app/BookmarkProvider
rm -rf /system/app/Calendar
rm -rf /system/app/CalendarWidget
rm -rf /system/app/CMFileManager
rm -rf /system/app/CMWallpapers
rm -rf /system/app/DeskClock
rm -rf /system/app/Eleven
rm -rf /system/app/Email
rm -rf /system/app/ExactCalculator
rm -rf /system/app/Exchange2
rm -rf /system/app/Gello
rm -rf /system/app/HexoLibre
rm -rf /system/app/Jelly
rm -rf /system/app/LatinIME
rm -rf /system/app/LiveWallpapersPicker
rm -rf /system/app/LockClock
rm -rf /system/app/messaging
rm -rf /system/app/MiXplorer
rm -rf /system/app/NexusLauncher
rm -rf /system/app/Nova.apk
rm -rf /system/app/Phonograph
rm -rf /system/app/PhotoTable
rm -rf /system/app/PicoTts
rm -rf /system/app/PicoTTS
rm -rf /system/app/ResurrectionStats
rm -rf /system/app/SoundRecorder
rm -rf /system/app/Terminal
rm -rf /system/app/TugaBrowser
rm -rf /system/app/Wallpaper
rm -rf /system/app/WallpaperPickerGoogle
rm -rf /system/priv-app/AudioFX
rm -rf /system/priv-app/Chrome
rm -rf /system/priv-app/Gallery2
rm -rf /system/priv-app/LatinIME
rm -rf /system/priv-app/MusicFX
rm -rf /system/priv-app/OnePlusCamera
rm -rf /system/priv-app/OnePlusGallery
rm -rf /system/priv-app/OnePlusMusic
rm -rf /system/priv-app/Recorder
rm -rf /system/priv-app/Screencast
rm -rf /system/priv-app/SnapdragonCamera
rm -rf /system/priv-app/SnapdragonGallery
rm -rf /system/priv-app/Snap
rm -rf /system/priv-app/Trebuchet
rm -rf /system/priv-app/WeatherManagerService
rm -rf /system/priv-app/WeatherProvider
rm -rf /system/priv-app/Tag
;;
pre-backup)
# Stub
;;
post-backup)
# Stub
;;
pre-restore)
# Stub
;;
post-restore)
# Stub
;;
esac
                    

Cree una lista de archivos que desea conservar después de un flash sucio.

                      list_files() {
cat <<EOF
addon.d/99-dirty.sh
fonts/Roboto-Regular.ttf
media/audio/ringtones/PlasticRing.ogg
priv-app/BBS.apk
priv-app/Gsam.apk
priv-app/microG.apk
priv-app/PhoneSky.apk
priv-app/V4A-Magisk.apk
etc/gps.conf
etc/hosts
EOF
}
                    

RM -RF los archivos que no desea que se instalen después de un flash sucio (archivos del sistema que eliminó en su modificación que se reinstalarán desde un flash sucio)

                      rm -rf /system/app/adaway.apk
rm -rf /system/app/AdAway
rm -rf /system/app/BasicDreams
rm -rf /system/app/BookmarkProvider
................................................
rm -rf /system/priv-app/WeatherProvider
rm -rf /system/priv-app/Tag
;;
                    

Cómo crear un zip de Android flasheable

Usaremos MiXplorer para esto, ya que es el mejor explorador raíz y administrador de archivos para Android, sin dudas.

  1. Primero seleccione todas las carpetas que se incluirán en el zip y elija Archivar.
  2. Confirme la creación de su archivo de almacenamiento, asígnele un nombre y elija Almacenar.
  3. Se creará su zip flashable, así que seleccione el archivo zip y luego fírmelo (usando el complemento de firma MiX)
  4. Ahora seleccione TestKey para verificar si hay errores de firma.
  5. Ahora puede actualizar el zip; se recomienda moverlo a /SDcard para encontrarlo fácilmente desde la recuperación personalizada.

Notas finales

Su zip flashable debe instalarse después de un flasheo limpio, o después de limpiar la partición /system y hacer un flasheo sucio de su ROM. La secuencia de comandos de actualización eliminará y agregará los archivos del sistema que especificó en su secuencia de comandos, pero deje la secuencia de comandos addon.d en paz, porque hará su trabajo sin ninguna interferencia de su parte.

Después de su primera instalación, verifique minuciosamente la partición /system para asegurarse de que todo sea correcto: los archivos se eliminaron, etc. Tal vez tuvo un error tipográfico en el nombre de un archivo y no se eliminó, sucede.

Leer siguiente

  • Cómo comprimir / comprimir un archivo en Windows 10
  • Cómo comprimir y descomprimir archivos en Windows 10
  • Cómo comprimir y descomprimir archivos en Chrome sistema operativo
  • Cómo proteger con contraseña el archivo zip

Related Posts