Créer un Zip flashable pour ajouter / supprimer des applications et plus encore...
- NI GÉNÉRATION MOBILES NI MOI-MÊME NE SERONT TENUS POUR RESPONSABLE EN CAS DE DOMMAGE SUR VOTRE APPAREIL ANDROID - /!\ Un Nandroid Backup est fortement recommandé avant toute modification /!\ |
Présentation & Objectifs
Quand on flashe une ROM Custom, on peut vouloir ajouter ou supprimer des applications avant même que le premier démarrage de la ROM ne soit fait.Il est évidemment possible de geler, d'ajouter ou de désinstaller des applications systèmes manuellement une fois la ROM Custom installée mais c'est trop long et répétitif.
Un Zip flashable permet de faire beaucoup de choses et une fois bien configuré, vous êtes tranquille pour plusieurs flashs de ROMs.
Pour vous mettre dans l'ambiance, voilà en résumé ce que fait le mien :
1. Installation script AFWall+, Viper4Android, de sauvegarde et configuration
2. Installation/Suppression d'applications système : Viper4Android, BBS, Blankstore
3. Installation/Suppression de fichiers : gps.cong, hosts.og, hosts.alt
4. Modification de fichiers : audio_policy, build_prop
5. Tout ça est automatiquement maintenu lors d'un dirty flash (mise à jour ROM sans effacer les données utilisateur)
Pré-requis
Il faut 4 choses :1. Un bon gestionnaire de fichiers fiable. Je vous recommande Solid Explorer ou MiXplorer.
2. ZipSigner pour signer votre fichier zip final.
3. Un Nandroid backup via le TWRP Recovery pour revenir en arrière en cas de soucis.
4. Du temps. Il vous faudra faire quelques tests pour expérimenter cet outil et surtout le personnaliser selon vos besoins.
Je vais vous proposer différents exemples pour expliquer comment je fais. Cela devrait vous donner des idées et vous aider à comprendre les différentes étapes à suivre. Ces fichiers doivent être flashés en dernier (après la rom, les GApps, le kernel custom, etc...) /!\ FICHIERS SCRIPT : LES ESPACES SONT INTERDITS EN FIN DE LIGNE /!\ Si vous souhaitez aller dans le détail, je vous invite à lire ceci. |
Structure du zip flashable
Voilà à quoi ressemble l'organisation de mes fichiers :Pour simplifier la visualisation, je n'ai pas indiqué le dossier META-INF. Ce dernier englobe plusieurs fichiers, seul le fichier updater-script nous intéressera.
Téléchargement
→ ExempleX : le zip flashable correspondant à chaque exemple
→ Primokorn-signed.zip : le fichier que j'utilise actuellement. Ne pas flasher. C'est juste à titre d'exemple et pour mieux expliquer le schéma présenté précédemment.
Désormais, un seul fichier : mon zip flashable que j'utilise actuellement. Ne le flashez pas si vous ne savez pas ce qu'il fait !
Scannez ou cliquez le QRCode pour télécharger l'appli
Note : tous les fichiers devraient fonctionner sur des appareils ARM. Si vous avez une architecture ARM64 ou x86, vous ne pourrez pas flasher ces fichiers. Remplacez le fichier updater-binary situé dans META-INF/com/google/android par celui d'une ROM custom qui fonctionne sur votre appareil.
Compresser et signer
Peu importe le contenu de votre zip flashable, vous devez le compresser et le signer, sinon TWRP vous indiquera un message d'erreur lors du flash.1. On sélectionne les dossiers et on les compresse (Zip et compression "Aucune")
Spoiler :
2. Le fichier .Zip est créé
Spoiler :
3. On ouvre ZipSigner, on sélectionne le fichier Zip créé et le chemin de destination, puis le type de clé
Spoiler :
4. Le fichier "xxxx-signed.zip" est prêt à être flashé depuis le recovery
Spoiler :
Exemple 1 : Supprimer des applications système
Dans ce cas, on va voir comment supprimer des applications système.Ce Zip ne fonctionne qu'une fois. Autrement dit, les applications seront réinstallées si on reflashe la ROM Custom (lors d'une mise à jour par exemple). Pour éviter cela, il faut créer un script de sauvegarde qui va empêcher leur réinstallation.
Note : il est aussi possible de reflasher ce fichier Zip à chaque mise à jour de la ROM mais on perd un peu le côté "automatisé".
Tout se passe dans le fichier updater-script :
Spoiler :
les lignes en rouge sont à supprimer, ce sont juste des commentaires
/!\ FICHIERS SCRIPT : LES ESPACES SONT INTERDITS EN FIN DE LIGNE /!\
ui_print("+-------------------- ------------+");
ui_print("| Mettez un texte ici |");
ui_print("| si vous le souhaitez |");
ui_print("| !!!GENMOB!!! |");
ui_print("+----------------------------------------+");
run_program("/sbin/busybox", "umount", "/system");
run_program("/sbin/busybox", "mount", "/system");
ui_print(" ");
ui_print("***Suppression applications***");
delete_recursive(
"/system/app/Apollo",
"/system/app/AudioFX",
"/system/app/BasicDreams",
etc..........
Ajoutez tous les répertoires des applications que vous voulez supprimer
Chaque ligne se termine par une virgule, sauf la dernière !
"/system/priv-app/OmniSwitch"
);
show_progress(8.800000, 5);
run_program("/sbin/busybox", "umount", "/system");
ui_print(" ");
ui_print("Suppression terminée !");
/!\ FICHIERS SCRIPT : LES ESPACES SONT INTERDITS EN FIN DE LIGNE /!\
ui_print("+-------------------- ------------+");
ui_print("| Mettez un texte ici |");
ui_print("| si vous le souhaitez |");
ui_print("| !!!GENMOB!!! |");
ui_print("+----------------------------------------+");
run_program("/sbin/busybox", "umount", "/system");
run_program("/sbin/busybox", "mount", "/system");
ui_print(" ");
ui_print("***Suppression applications***");
delete_recursive(
"/system/app/Apollo",
"/system/app/AudioFX",
"/system/app/BasicDreams",
etc..........
Ajoutez tous les répertoires des applications que vous voulez supprimer
Chaque ligne se termine par une virgule, sauf la dernière !
"/system/priv-app/OmniSwitch"
);
show_progress(8.800000, 5);
run_program("/sbin/busybox", "umount", "/system");
ui_print(" ");
ui_print("Suppression terminée !");
Enregistrez le fichier, qui se trouve dans /META-INF/com/google/android/updater-script.
Compressez le dossier META-INF au format .zip et signez-le avec ZipSigner.
Exemple 2 : Ajouter des applications système
Les choses se complexifient un petit peu.C'est un peu le même principe que l'Exemple 1, les applications disparaîtront dès lors que vous reflashez la ROM custom. Un script de sauvegarde est donc le bienvenu.
Il y a deux étapes à respecter : préparer les dossiers et créer le updater-script.
1. Préparation des dossiers
Les applications système sont stockées dans /system/app/ ou /system/priv-app/. Dans mon précédent schéma, on voit que j'ajoute 3 applications dans /system/priv-app/ : Blankstore, Viper4Android et BetterBatteryStats.
À la racine de votre répertoire (au même niveau que META-INF/), créez un dossier system, puis un autre priv-app. À l'intérieur, vous pouvez soit mettre directement des fichiers .apk, soit mettre les apks dans des dossiers spécifiques pour chaque application.
On cherche à reproduire l'emplacement des dossiers et fichiers, comme si ils étaient dans le "vrai" répertoire. C'est simple à faire mais difficile à expliquer lol
Ça vous parlera peut-être plus comme ça :
2. Création du "updater-script"
Pour rappel, le fichier se trouve dans /META-INF/com/google/android/updater-script.
C'est ce fichier qui dit au recovery ce qu'il doit faire. En gros, il faut lui demander d'injecter les applications dans le bon répertoire et de définir les permissions. Comme vous le savez probablement, les dossiers et fichiers système doivent avoir les bonnes permissions. Donner trop de permissions peut être dangereux, ne pas en donner assez peut provoquer des redémarrages en boucle ou des dysfonctionnements.
Spoiler :
les lignes en rouge sont à supprimer, ce sont juste des commentaires
/!\ FICHIERS SCRIPT : LES ESPACES SONT INTERDITS EN FIN DE LIGNE /!\
Ici, on va installer :
• V4A.apk dans le dossier /system/priv-app/Viper4Android/
• BlankStore.apk dans le dossier /system/priv-app/Phonesky/
• BetterBatteryStats.apk dans le dossier /system/priv-app/
ui_print("+-------------------------------------+");
ui_print("| TEXTE PERSONNALISE |");
ui_print("+-------------------------------------+");
run_program("/sbin/busybox", "umount", "/system");
run_program("/sbin/busybox", "mount", "/system");
ui_print(" ");
ui_print("Installation applications");
show_progress(8.800000, 5);
package_extract_dir("system", "/system/");
package_extract_dir permet d’implanter les nouvelles applications dans le dossier /system
ui_print("***Gestion des permissions***");
set_perm(0, 0, 0755, "/system/priv-app/Viper4Android");
set_perm(0, 0, 0644, "/system/priv-app/Viper4Android/V4A.apk");
set_perm(0, 0, 0755, "/system/priv-app/Phonesky");
set_perm(0, 0, 0644, "/system/priv-app/Phonesky/BlankStore.apk");
set_perm(0, 0, 0644, "/system/priv-app/BetterBatteryStats.apk");
set_perm permet de définir les permissions pour les dossiers et fichiers
Remplacer les noms et répertoires selon vos propres applications
Regarder les permissions des applications existantes si vous avez un doute sur les permissions à accorder à vos nouvelles applications.
Dans priv-app, on met 0755 pour les dossiers et 0644 pour les apks
show_progress(8.800000, 5);
run_program("/sbin/busybox", "umount", "/system");
ui_print(" ");
ui_print("Installation terminée !");
/!\ FICHIERS SCRIPT : LES ESPACES SONT INTERDITS EN FIN DE LIGNE /!\
Ici, on va installer :
• V4A.apk dans le dossier /system/priv-app/Viper4Android/
• BlankStore.apk dans le dossier /system/priv-app/Phonesky/
• BetterBatteryStats.apk dans le dossier /system/priv-app/
ui_print("+-------------------------------------+");
ui_print("| TEXTE PERSONNALISE |");
ui_print("+-------------------------------------+");
run_program("/sbin/busybox", "umount", "/system");
run_program("/sbin/busybox", "mount", "/system");
ui_print(" ");
ui_print("Installation applications");
show_progress(8.800000, 5);
package_extract_dir("system", "/system/");
package_extract_dir permet d’implanter les nouvelles applications dans le dossier /system
ui_print("***Gestion des permissions***");
set_perm(0, 0, 0755, "/system/priv-app/Viper4Android");
set_perm(0, 0, 0644, "/system/priv-app/Viper4Android/V4A.apk");
set_perm(0, 0, 0755, "/system/priv-app/Phonesky");
set_perm(0, 0, 0644, "/system/priv-app/Phonesky/BlankStore.apk");
set_perm(0, 0, 0644, "/system/priv-app/BetterBatteryStats.apk");
set_perm permet de définir les permissions pour les dossiers et fichiers
Remplacer les noms et répertoires selon vos propres applications
Regarder les permissions des applications existantes si vous avez un doute sur les permissions à accorder à vos nouvelles applications.
Dans priv-app, on met 0755 pour les dossiers et 0644 pour les apks
show_progress(8.800000, 5);
run_program("/sbin/busybox", "umount", "/system");
ui_print(" ");
ui_print("Installation terminée !");
Enregistrez le fichier, qui se trouve dans /META-INF/com/google/android/updater-script.
Compressez les dossiers META-INF et system au format .zip et signez-le avec ZipSigner.
Exemple 2 BIS - Autres installations système
Le principe est exactement le même pour l'ajout de nouveaux fichiers, ou pour écraser un fichier existant.Prenons l'exemple de mon fichier /system/addon.d/81-Xposed.sh :
1. Je mets le fichier dans le bon répertoire
2. Vous pouvez reprendre updater-script. Il suffit de mettre un set_perm sur le fichier :
Code:
set_perm(0, 0, 0755, "/system/addon.d/81-Xposed.sh");
Tout le reste est identique (supprimez les autres set_perm si vous n'avez d'applications à installer).
Si on prend le cas du fichier /data/local/afscript.sh, le principe est le même que pour /system/addon.d/81-Xposed.sh. Il suffit de faire ces quelques changements :
→ set_perm : il est possible que les permissions soient différentes
→ La partition /system que l'on on monte ("mount") et que l'on démonte ("umount") doit être remplacée par /data.
- Note - |
Exemple 3 : Modifier le contenu d'un fichier système existant
Il est aussi possible de seulement modifier une partie du contenu d'un fichier système. Le cas le plus classique, c'est le build.prop. Vous pourriez tout aussi bien modifier votre fichier hosts, le fichier de config du gps, etc...Dans cette exemple, on va modifier la densité de l'écran. Passer de 480dpi à 400dpi, ça permet d'avoir un affichage plus petit sur son téléphone.
- Création du fichier - |
Code:
#!/sbin/sh
2. Pour modifier une ligne existante, on utilise la commande sed :
sed -i 's/valeur_originale/nouvelle_valeur/g' /emplacement_du_fichier;
Si on reprend notre exemple, on veut changer la densité de l'écran de 480 à 400. C'est la ligne ro.sf.lcd_density du fichier build.prop qui permet de la définir :
sed -i 's/ro.sf.lcd_density=480/ro.sf.lcd_density=400/g' /system/build.prop;
3. Pour ajouter une nouvelle ligne, on utilise la commande echo :
echo "nouvelle_valeur" >> /emplacement_du_fichier;
Exemple a écrit:echo "IPA.decode=false" >> /system/build.prop;
echo "tunnel.decode=false" >> /system/build.prop;
echo "lpa.use-stagefright=false" >> /system/build.prop;
4. Une fois que vous avez défini vos lignes sed et echo, ajoutez-les dans votre fichier, à la 2e ligne (en dessous de #!/sbin/sh).
Exemple a écrit:#!/sbin/sh
sed -i 's/ro.sf.lcd_density=480/ro.sf.lcd_density=400/g' /system/build.prop;
echo "IPA.decode=false" >> /system/build.prop;
echo "tunnel.decode=false" >> /system/build.prop;
echo "lpa.use-stagefright=false" >> /system/build.prop;
5. Placez votre fichier modif.sh dans le bon dossier (la même structure que le "vrai" fichier qui se trouve sur votre téléphone). Dans notre exemple, on le met à la racine du dossier system.
- Création du script - |
Détails :
les lignes en rouge sont à supprimer, ce sont juste des commentaires smile
/!\ FICHIERS SCRIPT : LES ESPACES SONT INTERDITS EN FIN DE LIGNE /!\
ui_print("+--------BUILD-PROP-EDITION----------+");
run_program("/sbin/busybox", "umount", "/system");
run_program("/sbin/busybox", "mount", "/system");
show_progress(8.800000, 5);
package_extract_dir("system", "/system/");
On extrait notre fichier modif.sh dans le répertoire /system
ui_print("***Gestion des permissions***");
set_perm(0, 0, 0777, "/system/modif.sh");
On modifie ses permissions
run_program("/sbin/sh", "system/modif.sh");
On l'exécute
delete("/system/modif.sh");
On le supprime
show_progress(8.800000, 5);
run_program("/sbin/busybox", "umount", "/system");
ui_print(" ");
ui_print("Modification terminée !");
/!\ FICHIERS SCRIPT : LES ESPACES SONT INTERDITS EN FIN DE LIGNE /!\
ui_print("+--------BUILD-PROP-EDITION----------+");
run_program("/sbin/busybox", "umount", "/system");
run_program("/sbin/busybox", "mount", "/system");
show_progress(8.800000, 5);
package_extract_dir("system", "/system/");
On extrait notre fichier modif.sh dans le répertoire /system
ui_print("***Gestion des permissions***");
set_perm(0, 0, 0777, "/system/modif.sh");
On modifie ses permissions
run_program("/sbin/sh", "system/modif.sh");
On l'exécute
delete("/system/modif.sh");
On le supprime
show_progress(8.800000, 5);
run_program("/sbin/busybox", "umount", "/system");
ui_print(" ");
ui_print("Modification terminée !");
Enregistrez le fichier, qui se trouve dans /META-INF/com/google/android/updater-script.
Compressez les dossiers META-INF et system au format .zip et signez-le avec ZipSigner.
Dernière édition par Primokorn le Lun 12 Sep 2016 - 10:07, édité 30 fois