Je n'ai pas vraiment essayé, mais une approche possible consisterait à suivre les étapes d'une récupération personnalisée lors de l'installation ("flashage") de l'option de récupération. .zip
qui se trouve dans le fichier META-INF/com/google/android/updater-script
(après avoir extrait l'archive). Pour l'archive Kitkat GApps, cela se présente comme suit :
ui\_print("Installing files...");
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("Cleaning up and setting metadata...");
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("Installation complete!");
Nous pouvons bien sûr ignorer les commentaires/la sortie de débogage, et ainsi aboutir essentiellement à ces étapes. I .zip
quelque part sur votre appareil, et que vous vous trouvez dans un shell (terminal ou adb shell
) avec les permissions de la racine ( su
) pour commencer :
-
mount -o remount,rw /system
(ligne 2)
- si les fichiers énumérés à la ligne 4 existent :
rm -f <file>
pour chacun d'entre eux
- copier tout le contenu du fichier
.zip
du fichier system/
dans le répertoire /system
(ligne 5)
-
chmod 0755 /system/addon.d/70-gapps.sh
(ligne 6)
- ( appliquer les 2 étapes précédentes aux lignes 7 à 9 )
-
sh /tmp/install-optional.sh
(ligne 10)
Il est maintenant un peu plus difficile (pour les débutants) d'interpréter la rubrique set_metadata_recursive
commandes. Je l'expliquerai à la première (ligne 13) :
/system/addon.d
doit être détenu par uid 0 et gid 0, les permissions sur les fichiers doivent être de 0755 (dmode est le mode répertoire, fmode le mode fichier), les attributs SELinux sont les suivants u:object_r:system_file:s0
. Vous avez peut-être remarqué que j'ai sauté deux colonnes : Je n'ai aucune idée de ce que le "capabilities", 0x0
Je ne peux donc pas l'expliquer (si quelqu'un le fait, merci de commenter). C'est donc ce que nous allons faire :
chown -R root:root /system/addon.d # -R is recursive, root is user/group id 0
chmod -R 755 /system/addon.d # as dmode and fmode are the same, we can do that
# at this place missing: SELinux properties. I've never dealt with those
Si, comme à la ligne 14, fmode et dmode sont différents, vous devrez également en tenir compte. Appliquez dmode comme ci-dessus, et faites-le suivre d'un find <dir> -type f -print0 | xargs chmod <mode>
, remplaçant <dir>
par le premier argument de set_metadata_recursive
y <mode>
par le mode f correspondant.
Enfin, remontez /system
en lecture seule : mount -o remount,ro /system
- ou simplement redémarrer (vous devrez le faire de toute façon), ce qui règle également ce problème.
Je n'ai pas abordé la question de SELinux par manque de connaissances. Cela fonctionnera très probablement sans - mais il serait bon de le faire pour plus de sécurité :)