<stringname="install_inactive_slot">Instal·la a la ranura inactiva (Després d\'una OTA)</string>
<stringname="install_inactive_slot">Instal·la a la ranura inactiva (Després d\'una OTA)</string>
<stringname="install_inactive_slot_msg">El teu dispositiu serà FORÇAT a arrancar en l\'actual ranura inactiva després del reinici!\nUtilitza aquesta opció NOMÉS quan l\'OTA s\'hagi fet.\nContinuar?</string>
<stringname="install_inactive_slot_msg">El teu dispositiu serà FORÇAT a arrancar en l\'actual ranura inactiva després del reinici!\nUtilitza aquesta opció NOMÉS quan l\'OTA s\'hagi fet.\nContinuar?</string>
<stringname="select_method">Sel·lecciona un mètode</string>
<stringname="select_method">Selecciona un mètode</string>
<stringname="proprietary_notice">Magisk Manager és codi lliure i no conté codi de l\'API de SafetyNet, ja que és codi propietari de Google.\n\nPot permetre que Magisk Manager baixi una extensió que conté el GoogleApiClient per poder fer la comprobació de SafetyNet?</string>
<stringname="proprietary_notice">Magisk Manager és codi lliure i no conté codi de l\'API de SafetyNet, ja que és codi propietari de Google.\n\nVot permetre que Magisk Manager baixi una extensió que conté el GoogleApiClient per poder fer la comprovació de SafetyNet?</string>
<stringname="env_fix_msg">El teu dispositiu necessita instal·lació addicional per Magisk per funcionar correctament. Es baixarà el ZIP d\'instal·lació de Magisk , vol procedir a l\'instalació ara?</string>
<stringname="env_fix_msg">El teu dispositiu necessita instal·lació addicional per Magisk per funcionar correctament. Es baixarà el ZIP d\'instal·lació de Magisk , vol procedir a l\'instal·lació ara?</string>
<stringname="setup_msg">S\'està executant la configuració de l\'entorn…</string>
<stringname="setup_msg">S\'està executant la configuració de l\'entorn…</string>
<stringname="settings_dark_theme_summary">Habilitar el tema fosc</string>
<stringname="settings_dark_theme_summary">Habilitar el tema fosc</string>
<stringname="settings_download_path_title">Directori de baixades</string>
<stringname="settings_download_path_title">Directori de baixades</string>
<stringname="settings_download_path_message">Els arxius es desaràn a %1$s</string>
<stringname="settings_download_path_message">Els arxius es desaran a %1$s</string>
<stringname="settings_clear_cache_title">Netejar memòria cau del repositori</string>
<stringname="settings_clear_cache_title">Netejar memòria cau del repositori</string>
<stringname="settings_clear_cache_summary">Neteja l\'informació en memòria cau per als repositoris en línia, força a l\'aplicació a actualitzar-se en línia.</string>
<stringname="settings_clear_cache_summary">Neteja l\'informació en memòria cau per als repositoris en línia, força a l\'aplicació a actualitzar-se en línia.</string>
<stringname="settings_update_custom_msg">Inserta una URL personalitzada</string>
<stringname="settings_update_custom_msg">Inserta una URL personalitzada</string>
<stringname="settings_core_only_title">Mode nucli de Magisk</string>
<stringname="settings_core_only_title">Mode nucli de Magisk</string>
<stringname="settings_core_only_summary">Habilitar només les funcions principals, no es carregaran tots els mòduls. MagiskSU y MagiskHide seguirán habilitats</string>
<stringname="settings_core_only_summary">Habilitar només les funcions principals, no es carregaran tots els mòduls. MagiskSU y MagiskHide seguiran habilitats</string>
<stringname="settings_magiskhide_summary">Amagar Magisk de varies deteccions</string>
<stringname="settings_magiskhide_summary">Amagar Magisk de varies deteccions</string>
<stringname="settings_owner_only">Només Administrador del Dispositiu</string>
<stringname="settings_owner_only">Només Administrador del Dispositiu</string>
...
@@ -182,7 +185,7 @@
...
@@ -182,7 +185,7 @@
<stringname="global_summary">Totes les sessions d\'arrel utilitzen el suport Namespace Global</string>
<stringname="global_summary">Totes les sessions d\'arrel utilitzen el suport Namespace Global</string>
<stringname="requester_summary">Les sessions d\'arrel heretaran les peticiones Namespace</string>
<stringname="requester_summary">Les sessions d\'arrel heretaran les peticiones Namespace</string>
<stringname="isolate_summary">Totes les sessions d\'arrel tindran la seva pròpia Namespace</string>
<stringname="isolate_summary">Totes les sessions d\'arrel tindran la seva pròpia Namespace</string>
<stringname="settings_download_path_error">Error al crear la carpeta. El directori ha de ser accesible desde el directori arrel i no pot ser un arxiu.</string>
<stringname="settings_download_path_error">Error al crear la carpeta. El directori ha de ser accessible des de el directori arrel i no pot ser un arxiu.</string>
<!--Superuser-->
<!--Superuser-->
<stringname="su_request_title">Petició de superusuari</string>
<stringname="su_request_title">Petició de superusuari</string>
...
@@ -216,6 +219,6 @@
...
@@ -216,6 +219,6 @@
<stringname="command">Ordre: %1$s</string>
<stringname="command">Ordre: %1$s</string>
<!-- MagiskHide -->
<!-- MagiskHide -->
<stringname="show_system_app">Mostra apps del sistema</string>
<stringname="show_system_app">Mostra Apps del sistema</string>
<stringname="unsupport_magisk_msg">Diese Version von Magisk Manager unterstützt keine Magisk-Versionen unter %1$s.\n\nDie App verhält sich so, als ob kein Magisk installiert ist. Bitte Magisk so schnell wie möglich aktualisieren.</string>
<!--Status Fragment-->
<!--Status Fragment-->
<stringname="magisk_version_error">Magisk ist nicht installiert</string>
<stringname="magisk_version_error">Magisk ist nicht installiert</string>
<stringname="checking_for_updates">Suche nach Aktualisierungen…</string>
<stringname="checking_for_updates">Suche nach Aktualisierungen…</string>
<stringname="uninstall_magisk_msg">Alle Module werden deaktiviert/entfernt. Root wird entfernt, und Ihre Daten werden möglicherweise verschlüsselt, wenn nicht bereits der Fall.</string>
<stringname="uninstall_magisk_msg">Alle Module werden deaktiviert/entfernt. Root wird entfernt, und deine Daten werden möglicherweise verschlüsselt, wenn es nicht bereits der Fall ist.</string>
<stringname="update">aktualisieren</string>
<stringname="update">aktualisieren</string>
<stringname="core_only_enabled">(Core only Modus aktiviert)</string>
<stringname="core_only_enabled">(Core only Modus aktiviert)</string>
...
@@ -43,6 +45,7 @@
...
@@ -43,6 +45,7 @@
<stringname="reboot_recovery">Neustart in das Recovery</string>
<stringname="reboot_recovery">Neustart in das Recovery</string>
<stringname="reboot_bootloader">Neustart in den Bootloader</string>
<stringname="reboot_bootloader">Neustart in den Bootloader</string>
<stringname="reboot_download">Neustart in den Download-Modus</string>
<stringname="reboot_download">Neustart in den Download-Modus</string>
<stringname="reboot_edl">Neustart in den EDL-Modus</string>
<stringname="install_inactive_slot_msg">Dein Gerät wird GEZWUNGEN in den aktuell inaktiven Slot zu starten, nachdem ein Neustart durchgeführt wurde!\nBenutze diese Option nur, nachdem das OTA beendet wurde.\nFortsetzen?</string>
<stringname="install_inactive_slot_msg">Dein Gerät wird GEZWUNGEN in den aktuell inaktiven Slot zu starten, nachdem ein Neustart durchgeführt wurde!\nBenutze diese Option nur, nachdem das OTA beendet wurde.\nFortsetzen?</string>
<stringname="proprietary_notice">Magisk Manager ist FOSS und enthält keinen proprietären SafetyNet API Code von Google. Magisk Manager erlauben eine Erweiterung (enthält GoogleApiClient) für SafetyNet-Checks herunterzuladen?</string>
<stringname="proprietary_notice">Magisk Manager ist FOSS und enthält keinen proprietären SafetyNet API Code von Google. Magisk Manager erlauben eine Erweiterung (enthält GoogleApiClient) für SafetyNet-Checks herunterzuladen?</string>
<stringname="env_fix_msg">Ihr Gerät benötigt zusätzliche Einrichtung, damit Magisk ordnungsgemäß funktioniert. Es wird eine Magisk-Installations-Zip wird heruntergeladen, fortfahren?</string>
<stringname="env_fix_msg">Dein Gerät benötigt eine zusätzliche Einrichtung, damit Magisk ordnungsgemäß funktioniert. Es wird eine Magisk-Installations-Zip heruntergeladen. Fortfahren?</string>
<stringname="settings_core_only_summary">Aktiviert lediglich die Kernfunktionen, Module werden nicht geladen. MagiskSU und Magisk Hide bleiben weiterhin aktiv</string>
<stringname="settings_core_only_summary">Aktiviert lediglich die Kernfunktionen, Module werden nicht geladen. MagiskSU und Magisk Hide bleiben weiterhin aktiv</string>
<stringname="settings_magiskhide_summary">Versteckt Magisk vor diversen Entdeckungsmethoden</string>
<stringname="settings_magiskhide_summary">Versteckt Magisk vor diversen Entdeckungsmethoden</string>
<stringname="settings_owner_only">Nur der Gerätebesitzer</string>
<stringname="settings_owner_only">Nur der Gerätebesitzer</string>
...
@@ -172,6 +186,7 @@
...
@@ -172,6 +186,7 @@
<stringname="global_summary">Alle Root-Sitzungen benutzen den global angelegten Namespace</string>
<stringname="global_summary">Alle Root-Sitzungen benutzen den global angelegten Namespace</string>
<stringname="requester_summary">Root-Sitzungen erben den Namespace des Abfragenden</string>
<stringname="requester_summary">Root-Sitzungen erben den Namespace des Abfragenden</string>
<stringname="isolate_summary">Jede Root-Sitzung hat ihren isolierten Namespace</string>
<stringname="isolate_summary">Jede Root-Sitzung hat ihren isolierten Namespace</string>
<stringname="settings_download_path_error">Fehler beim Erstellen eines Ordners. Er muss im Stammverzeichnis des Speichers zugänglich und darf keine Datei sein.</string>
<stringname="unsupport_magisk_title">Version de Magisk non prise en charge</string>
<stringname="unsupport_magisk_title">Version de Magisk non prise en charge</string>
<stringname="unsupport_magisk_msg">Cette version de Magisk Manager ne prend pas en charge les versions de Magisk inférieures à %1$s.\n\nL’application se comportera comme si Magisk n’était pas installé, veuillez mettre à jour Magisk dès que possible.</string>
<!--Status Fragment-->
<!--Status Fragment-->
<stringname="magisk_version_error">Magisk n’est pas installé.</string>
<stringname="magisk_version_error">Magisk n’est pas installé</string>
<stringname="checking_for_updates">Vérification des mises àjour…</string>
<stringname="checking_for_updates">Vérification des mises àjour…</string>
<stringname="invalid_update_channel">Canal de mise àjour invalide</string>
<stringname="invalid_update_channel">Canal de mise àjour invalide</string>
<stringname="safetyNet_check_text">Appuyez pour lancer le contrôle SafetyNet.</string>
<stringname="safetyNet_check_text">Appuyez pour lancer le contrôle SafetyNet</string>
<stringname="checking_safetyNet_status">Vérification de l’état de SafetyNet…</string>
<stringname="checking_safetyNet_status">Vérification de l’état de SafetyNet…</string>
<stringname="safetyNet_check_success">Contrôle SafetyNet passé avec succès</string>
<stringname="uninstall_magisk_msg">Tous les modules seront désactivés ou supprimés. Les permissions de super‐utilisateur seront perdues et vos données seront potentiellement chiffrées si elles ne le sont pas déjà.</string>
<stringname="uninstall_magisk_msg">Tous les modules seront désactivés ou supprimés !\nL’accès super‑utiliateur sera perdu !\nVos données seront potentiellement chiffrées si elles ne le sont pas déjà.</string>
<stringname="update">Mise àjour</string>
<stringname="update">Mise àjour</string>
<stringname="core_only_enabled">(Mode « sans modules » activé)</string>
<stringname="core_only_enabled">(mode « sans modules » activé)</string>
<!--Module Fragment-->
<!--Module Fragment-->
<stringname="no_info_provided">(aucune information transmise)</string>
<stringname="no_info_provided">(aucune information transmise)</string>
<stringname="install_inactive_slot">Installer dans l’espace inactif (après mise àjour OTA)</string>
<stringname="install_inactive_slot">Installer dans l’espace inactif (après mise àjour OTA)</string>
<stringname="install_inactive_slot_msg">Votre appareil sera réamorcé à partir de l’espace actuellement inactif après un redémarrage!\nN’utilisez cette option qu’uniquement après que la mise à jour OTA ait été effectuée.\nVoulez-vous continuer?</string>
<stringname="install_inactive_slot_msg">Votre appareil sera obligatoirement réamorcé à partir de l’espace (slot) actuellement inactif après son redémarrage !\nN’utilisez cette option uniquement après que la mise à jour OTA a été effectuée.\nVoulez‑vous continuer ?</string>
<stringname="select_method">Sélectionnez la méthode</string>
<stringname="select_method">Sélectionnez la méthode</string>
<stringname="restore_fail">La sauvegarde par défaut n’existe pas !</string>
<stringname="restore_fail">La sauvegarde par défaut n’existe pas !</string>
<stringname="proprietary_title">Téléchargement de code propriétaire</string>
<stringname="proprietary_title">Téléchargement de code propriétaire</string>
<stringname="proprietary_notice">Magisk Manager est un logiciel libre et ne contient pas le code propriétaire de l’API SafetyNet de Google.Voulez‐vous autoriser Magisk Manager à télécharger une extension (contenant GoogleApiClient) pour les contrôles SafetyNet ?</string>
<stringname="proprietary_notice">Magisk Manager est un logiciel libre et ne contient pas le code propriétaire de l’API SafetyNet de Google. Autorisez‑vous Magisk Manager à télécharger une extension (contenant GoogleApiClient) pour les contrôles SafetyNet ?</string>
<stringname="setup_fail">Échec de l’installation</string>
<stringname="setup_fail">Échec de l’installation</string>
<stringname="env_fix_msg">Votre appareil a besoin d’une configuration supplémentaire pour que Magisk fonctionne correctement. Pour cela, il est nécessaire de télécharger un fichier ZIP d’installation de Magisk. Voulez‐vous le faire maintenant ?</string>
<stringname="env_fix_msg">Votre appareil a besoin d’une installation supplémentaire afin que Magisk fonctionne correctement. Un fichier ZIP d’installation pour Magisk devra être téléchargé. Voulez‑vous faire cette installation maintenant ?</string>
<stringname="setup_msg">Démarrer l’installation de l’environnement…</string>
<stringname="setup_msg">Installation de l’environnement en cours…</string>
<stringname="settings_download_path_title">Répertoire de téléchargement</string>
<stringname="settings_download_path_message">Les fichiers seront sauvegardés dans %1$s</string>
<stringname="settings_download_path_message">Les fichiers seront sauvegardés dans %1$s</string>
<stringname="settings_clear_cache_title">Effacer le cache du dépôt</string>
<stringname="settings_clear_cache_title">Effacer le cache du dépôt</string>
<stringname="settings_clear_cache_summary">Effacer les informations de cache pour les dépôts en ligne. Cela force l’application à récupérer ses informations en ligne.</string>
<stringname="settings_clear_cache_summary">Effacer les informations en cache concerant les dépôts en ligne. Ceci force l’application à télécharger des informations à jour.</string>
<stringname="settings_core_only_title">Mode « sans modules » uniquement</string>
<stringname="settings_core_only_summary">Active uniquement les fonctionnalités de base. MagiskSU et MagiskHide resteront activés, mais aucun module ne sera chargé. </string>
<stringname="settings_core_only_summary">Activer uniquement les fonctionnalités de base. MagiskSU et MagiskHide resteront activés, mais aucun module ne sera chargé.</string>
<stringname="settings_magiskhide_summary">Rendre Magisk invisible à diverses formes de détection.</string>
<stringname="settings_magiskhide_summary">Rendre Magisk invisible à diverses formes de détection.</string>
<stringname="settings_hosts_title">Fichier hosts sans système</string>
<stringname="settings_hosts_summary">Prise en charge du fichier hosts sans système pour les applications de type AdBlock.</string>
<stringname="settings_hosts_summary">Utilisation d’un fichier hosts hors de la partition système pour les applications de blocage de publicité.</string>
<stringname="settings_hosts_toast">Ajout d’un module hosts sans système</string>
<stringname="settings_hosts_toast">Ajout d’un module pour fichier hosts hors système</string>
<stringname="settings_app_name">Taper le nom de l\'application désirée</string>
<stringname="settings_app_name">Saisissez le nom de l’application désiré</string>
<stringname="settings_su_reauth_title">Authentifier à nouveau après la mise à niveau</string>
<stringname="settings_su_reauth_title">S’authentifier à nouveau après la mise à niveau</string>
<stringname="settings_su_reauth_summary">Authentifier à nouveau les autorisations super‐utilisateur après une mise à jour de l’application</string>
<stringname="settings_su_reauth_summary">Redemander une authentification pour autoriser l’accès en super‑utilisateur après une mise à jour de l’application</string>
<stringname="settings_owner_only">Propriétaire de l’appareil uniquement</string>
<stringname="settings_owner_only">Propriétaire de l’appareil uniquement</string>
<stringname="settings_owner_manage">Géré par le propriétaire de l’appareil</string>
<stringname="settings_owner_manage">Géré par le propriétaire de l’appareil</string>
<stringname="settings_user_independent">Indépendant de l’utilisateur</string>
<stringname="settings_user_independent">Indépendant de l’utilisateur</string>
<stringname="owner_only_summary">Seul le propriétaire a un accès super‐utilisateur.</string>
<stringname="owner_only_summary">Seul le propriétaire possède un accès super‑utilisateur.</string>
<stringname="owner_manage_summary">Seul le propriétaire peut gérer l’accès super‐utilisateur et recevoir les demandes de requêtes.</string>
<stringname="owner_manage_summary">Seul le propriétaire peut gérer l’accès super‑utilisateur et recevoir les demandes d’accès.</string>
<stringname="user_indepenent_summary">Chaque utilisateur a ses propres règles super‐utilisateur séparées.</string>
<stringname="user_indepenent_summary">Chaque utilisateur a ses propres règles d’accès super‑utilisateur séparées.</string>
<stringname="mount_namespace_mode">Mode d’espace de noms dumontage</string>
<stringname="mount_namespace_mode">Mode d’espace de noms dumontage</string>
<stringname="settings_ns_global">Espace de noms global</string>
<stringname="settings_ns_global">Espace de noms global</string>
<stringname="settings_ns_requester">Hériter de l’espace denoms</string>
<stringname="settings_ns_requester">Hériter de l’espace denoms</string>
<stringname="settings_ns_isolate">Espace de noms isolé</string>
<stringname="settings_ns_isolate">Espace de noms isolé</string>
<stringname="global_summary">Toutes les sessions super‐utilisateur utilisent l’espace de noms global du montage.</string>
<stringname="global_summary">Toutes les sessions super‑utilisateur utilisent l’espace de noms global du montage.</string>
<stringname="requester_summary">Les sessions super‐utilisateur hériteront de l’espace de noms de leur demandeur.</string>
<stringname="requester_summary">Les sessions super‑utilisateur hériteront de l’espace de noms de leur demandeur.</string>
<stringname="isolate_summary">Chaque session super‐utilisateur aura son propre espace de noms isolé.</string>
<stringname="isolate_summary">Chaque session super‑utilisateur aura son propre espace de noms isolé.</string>
<stringname="settings_download_path_error">Erreur lors de la création du dossier. Il doit être accessible depuis le répertoire racine du stockage et ne doit pas être un fichier.</string>
<stringname="settings_download_path_error">Erreur lors de la création du dossier. Ce dernier doit être accessible depuis le répertoire racine du stockage et ne doit pas être un fichier.</string>
<stringname="unsupport_magisk_msg">Magisk Manager\'ın bu sürümü, %1$s daha düşük Magisk versiyonlarını desteklememektedir.\n\nUygulama hiçbir Magisk kurulu değil gibi davranacak, lütfen en kısa zamanda Magisk\'i yükseltin.</string>
<stringname="env_fix_msg">Cihazınızın Magisk\'in düzgün çalışması için ek kuruluma ihtiyacı var. Bu Magisk kurulum zip dosyasını indirecektir, şimdi devam etmek istiyor musunuz?</string>
<stringname="env_fix_msg">Cihazınızın Magisk\'in düzgün çalışması için ek kuruluma ihtiyacı var. Bu Magisk kurulum zip dosyasını indirecektir, şimdi devam etmek istiyor musunuz?</string>
One of Magisk's breakthrough designs is sbin tmpfs overlay. It is required to support system-as-root devices, and also is the key to hiding Magisk from detection. All Magisk binaries, applets, mirrors, and other trivial stuffs are all located in the `tmpfs` mounted on `/sbin`. MagiskHide can just simply unmount `/sbin` and the bind mounts to hide all modifications easily.
One of Magisk's breakthrough designs is sbin tmpfs overlay. It is required to support system-as-root devices, and also is the key to hiding Magisk from detection. All Magisk binaries, applets, mirrors, and other trivial stuffs are all located in the `tmpfs` mounted on `/sbin`. MagiskHide can just simply unmount `/sbin` and the bind mounts to hide all modifications easily.
Please read through [Magisk Details](details.md) before reading the following guides. If you are developing a module, pay extra attention to the [Magic Mount](details.md#magic-mount) section.
## Magisk Modules
## Magisk Modules
A Magisk module is a folder placed in `/data/adb/modules` with a structure below:
A Magisk module is a folder placed in `/data/adb/modules` with the structure below:
```
```
/data/adb/modules
/data/adb/modules
...
@@ -14,40 +12,38 @@ A Magisk module is a folder placed in `/data/adb/modules` with a structure below
...
@@ -14,40 +12,38 @@ A Magisk module is a folder placed in `/data/adb/modules` with a structure below
│ │
│ │
│ │ *** Module Identity ***
│ │ *** Module Identity ***
│ │
│ │
│ ├── module.prop <--- This files stores the metadata of the module
│ ├── module.prop <--- This file stores the metadata of the module
│ │
│ │ *** Main Contents ***
│ │
│ ├── system <--- This folder will be mounted if skip_mount does not exists
│ │ ├── ...
│ │ ├── ...
│ │ └── ...
│ │
│ │
│ │ *** Status files ***
│ │ *** Status Flags ***
│ │
│ │
│ ├── skip_mount <--- If exists, Magisk will NOT mount your files
│ ├── skip_mount <--- If exists, Magisk will NOT mount your system folder
│ ├── disable <--- If exists, the module will be disabled
│ ├── disable <--- If exists, the module will be disabled
│ ├── remove <--- If exists, the module will be removed next reboot
│ ├── remove <--- If exists, the module will be removed next reboot
│ │
│ │
│ │ *** Scripts ***
│ │ *** Optional Files ***
│ │
│ │
│ ├── post-fs-data.sh <--- This script will be executed in post-fs-data
│ ├── post-fs-data.sh <--- This script will be executed in post-fs-data
│ ├── service.sh <--- This script will be executed in late_start service
│ ├── service.sh <--- This script will be executed in late_start service
| ├── uninstall.sh <--- This script will be executed when Magisk removes your module
| ├── uninstall.sh <--- This script will be executed when Magisk removes your module
│ │
│ ├── system.prop <--- Properties in this file will be loaded as system properties by resetprop
│ │ *** Resetprop Files ***
│ ├── sepolicy.rule <--- Additional custom sepolicy rules to be patched
│ │
│ ├── system.prop <--- This file will be loaded as system properties by resetprop
│ │
│ │ *** Module contents ***
│ │
│ ├── system <--- This folder will be Magic Mounted if skip_mount does not exists
│ │ ├── .
│ │ ├── .
│ │ └── .
│ │
│ │
│ │ *** Auto Generated by Magisk ***
│ │ *** Auto Generated, DO NOT MANUALLY CREATE OR MODIFY ***
│ │
│ │
│ ├── vendor <--- A symlink to $MODID/system/vendor
│ ├── vendor <--- A symlink to $MODID/system/vendor
│ ├── product <--- A symlink to $MODID/system/product
│ ├── product <--- A symlink to $MODID/system/product
│ │
│ │
│ │ *** Others ***
│ │ *** Any additional files / folders are allowed ***
│ │
│ │
│ ├── . <--- Any additional files / folders are allowed
│ ├── ...
│ └── .
│ └── ...
|
|
├── another_module
├── another_module
│ ├── .
│ ├── .
...
@@ -55,9 +51,11 @@ A Magisk module is a folder placed in `/data/adb/modules` with a structure below
...
@@ -55,9 +51,11 @@ A Magisk module is a folder placed in `/data/adb/modules` with a structure below
├── .
├── .
├── .
├── .
```
```
As long as a folder follows the structure above, it will be recognized as a module.
This is the **unique identifier** of your module. You should not change it once published.
This is the **unique identifier** of your module. You should not change it once published.
-`versionCode` has to be an **integer**. This is used to compare versions
-`versionCode` has to be an **integer**. This is used to compare versions
- Others that isn't mentioned above can be any **single line** string.
- Others that weren't mentioned above can be any **single line** string.
#### Shell scripts (`*.sh`)
Please read the [Boot Scripts](#boot-scripts) section to understand the difference between `post-fs-data.sh` and `service.sh`. For most module developers, `service.sh` should be good enough if you just need to run a boot script.
In all scripts of your module, please use `MODDIR=${0%/*}` to get your module's base directory path; do **NOT** hardcode your module path in scripts.
#### system.prop
This file follows the same format as `build.prop`. Each line comprises of `[key]=[value]`.
#### sepolicy.rule
If your module requires some additional sepolicy patches, please add those rules into this file. The module installer script and Magisk's daemon will make sure this file is copied to somewhere `magiskinit` can read pre-init to ensure these rules are injected properly.
Each line in this file will be treated as a policy statement. For more details how a policy statement is formated, please check [magiskpolicy](tools.md#magiskpolicy)'s documentation.
#### The `system` folder
All files you want Magisk to replace/inject for you should be placed in this folder. Please read through the [Magic Mount](details.md#magic-mount) section to understand how Magisk mount your files.
## Magisk Module Installer
## Magisk Module Installer
The official Magisk Module installer is hosted **[here](https://github.com/topjohnwu/magisk-module-installer)**.
That repo is a starting point for creating a Magisk module installer zip. Here are some details:
A Magisk Module Installer is a Magisk Module packaged in a zip file that can be flashed in Magisk Manager or custom recoveries such as TWRP. An installer have the same file structure as a Magisk module (please check the previous section for more info). The simplest Magisk Module Installer is just a Magisk Module packed in a zip file, with addition to the following files:
-`update-binary`: Download the latest [module_installer.sh](https://github.com/topjohnwu/Magisk/blob/master/scripts/module_installer.sh) and rename/copy that script as `update-binary`
-`updater-script`: This file should only contain the string `#MAGISK`
By default, `update-binary` will check/setup the environment, load utility functions, extract the module installer zip to where your module will be installed, and finally do some trivial tasks and cleanups, which should cover most simple modules' needs.
```
module.zip
│
├── META-INF
│ └── com
│ └── google
│ └── android
│ ├── update-binary <--- The module_installer.sh you downloaded
│ └── updater-script <--- Should only contain the string "#MAGISK"
│
├── customize.sh <--- (Optional, more details later)
│ This script will be sourced by update-binary
├── ...
├── ... /* The rest of module's files */
|
```
#### Customization
If you need to customize the module installation process, optionally you can create a new script in the installer called `customize.sh`. This script will be *sourced* (not executed!) by `update-binary` after all files are extracted and default permissions and secontext are applied. This is very useful if your module includes different files based on ABI, or you need to set special permissions/secontext for some of your files (e.g. files in `/system/bin`).
- You will found out that `META-INF/com/google/android/update-binary` is a dummy file. If you are creating a module locally for personal usage or testing, download the latest installer [`module_installer.sh`](https://github.com/topjohnwu/Magisk/blob/master/scripts/module_installer.sh) and replace `update-binary` with the script
If you need even more customization and prefer to do everything on your own, declare `SKIPUNZIP=1` in `customize.sh` to skip the extraction and applying default permissions/secontext steps. Be aware that by doing so, your `customize.sh` will then be responsible to install everything by itself.
- The next thing to do is to modify `module.prop` to provide information about your module
- Finally, modify `install.sh` to fit your need. The script is heavily documented so you should know what to do.
#### `customize.sh` Environment
- (Optional) If you want to run custom uninstallation logic when your module is removed, add a new file `uninstall.sh` to the root of the installer
-**Windows users aware!!** The line endings of all text files should be in the **Unix format**. Please use advanced text editors like Sublime, Atom, Notepad++ etc. to edit **ALL** text files, **NEVER** use Windows Notepad.
Magisk's internal busybox's path `$BBPATH` is added in the front of `PATH`. The following variables and shell functions are available for convenience:
##### Variables
-`MAGISK_VER` (string): the version string of current installed Magisk (e.g. `v20.0`)
-`MAGISK_VER_CODE` (int): the version code of current installed Magisk (e.g. `20000`)
-`BOOTMODE` (bool): `true` if the module is being installed in Magisk Manager
-`MODPATH` (path): the path where your module files should be installed
-`TMPDIR` (path): a place where you can temporarily store files
-`ZIPFILE` (path): your module's installation zip
-`ARCH` (string): the CPU architecture of the device. Value is either `arm`, `arm64`, `x86`, or `x64`
-`IS64BIT` (bool): `true` if `$ARCH` is either `arm64` or `x64`
-`API` (int): the API level (Android version) of the device (e.g. `21` for Android 5.0)
##### Functions
```
ui_print <msg>
print <msg> to console
Avoid using 'echo' as it will not display in custom recovery's console
abort <msg>
print error message <msg> to console and terminate installation
Avoid using 'exit' as it will skip the termination cleanup steps
if [context] is not set, the default is "u:object_r:system_file:s0"
for all files in <directory>, it will call:
set_perm file owner group filepermission context
for all directories in <directory> (including itself), it will call:
set_perm dir owner group dirpermission context
```
##### Easy Replace
You can declare a list of folders you want to directly replace in the variable name `REPLACE`. The module installer script will pickup this variable and create `.replace` files for you. An example declaration:
```
REPLACE="
/system/app/YouTube
/system/app/Bloatware
"
```
The list above will result in the following files being created: `$MODPATH/system/app/YouTube/.replace` and `$MODPATH/system/app/Bloatware/.replace`
#### Notes
- When your module is downloaded with Magisk Manager, `update-binary` will be **forcefully** replaced with the latest [`module_installer.sh`](https://github.com/topjohnwu/Magisk/blob/master/scripts/module_installer.sh) to ensure all installer uses up-to-date scripts. **DO NOT** try to add any custom logic in `update-binary` as it is pointless.
- Due to historical reasons, **DO NOT** add a file named `install.sh` in your module installer. That specific file was previously used and will be treated differently.
-**DO NOT** call `exit` at the end of `customize.sh`. The module installer would want to do finalizations.
## Submit Modules
## Submit Modules
You can submit a module to **Magisk-Module-Repo** so users can download your module directly in Magisk Manager. Before submitting, follow the instructions in the previous section to create a valid installer for your module. You can then create a request for submission via this link: [submission](https://github.com/Magisk-Modules-Repo/submission).
- When your module is downloaded with Magisk Manager, `META-INF/com/google/android/update-binary` will be **forcefully** replaced with the latest [`module_installer.sh`](https://github.com/topjohnwu/Magisk/blob/master/scripts/module_installer.sh) to make sure all installation uses the latest scripts.
You can submit a module to **Magisk-Module-Repo** so users can download your module directly in Magisk Manager.
- Since `update-binary` will be replaced, this means that all modules in the repo are expected to follow how the installation framework works: the installation framework will load your `install.sh` script and run the corresponding callbacks.
- This also means that you should NOT add custom logic in `update-binary` as they will simply be ignored.
- Follow the instructions in the previous section to create a valid installer for your module.
- Create `README.md` (filename should be exactly the same) containing all info for your module. If you are not familiar with the Markdown syntax, the [Markdown Cheat Sheet](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) will be handy.
- Create a repository with your personal GitHub account, and upload your module installer to the repo
- Create a request for submission via this link: [submission](https://github.com/Magisk-Modules-Repo/submission)
## Module Tricks
#### Remove Files
How to remove a file systemless-ly? To actually make the file *disappear* is complicated (possible, not worth the effort). Replacing it with a dummy file should be good enough! Create an empty file with the same name and place it in the same path within a module, it shall replace your target file with a dummy file.
#### Remove Folders
Same as mentioned above, actually making the folder *disappear* is not worth the effort. Replacing it with an empty folder should be good enough! A handy trick for module developers is to add the folder you want to remove into the `REPLACE` list within `customize.sh`. If your module doesn't provide a corresponding folder, it will create an empty folder, and automatically add `.replace` into the empty folder so the dummy folder will properly replace the one in `/system`.
## Boot Scripts
## Boot Scripts
In Magisk, you can run boot scripts in 2 different modes: **post-fs-data** and **late_start service** mode.
In Magisk, you can run boot scripts in 2 different modes: **post-fs-data** and **late_start service** mode.
- post-fs-data mode
- post-fs-data mode
...
@@ -118,9 +223,10 @@ In Magisk, there are also 2 kinds of scripts: **general scripts** and **module s
...
@@ -118,9 +223,10 @@ In Magisk, there are also 2 kinds of scripts: **general scripts** and **module s
- Will NOT be executed when **Core-Only** mode is enabled (all modules are disabled)
- Will NOT be executed when **Core-Only** mode is enabled (all modules are disabled)
- Modules require boot scripts should **ONLY** use module scripts instead of general scripts
- Modules require boot scripts should **ONLY** use module scripts instead of general scripts
Magisk's internal busybox's path `$BBPATH` is always prepended in`PATH`. This means all commands you call in scripts are always using busybox unless the applet is not included. This makes sure that your script always run in a predictable environment and always have the full suite of commands regardless of which Android version it is running on.
Magisk's internal busybox's path `$BBPATH` is added in the front of`PATH`. This means all commands you call in scripts are always using busybox unless the applet is not included. This makes sure that your script always run in a predictable environment and always have the full suite of commands regardless of which Android version it is running on.
## Root Directory Overlay System
## Root Directory Overlay System
Since `/` is read-only in system-as-root devices, Magisk provides an overlay system, allowing developers to patch files / add new rc scripts. Additional files shall be placed in the `overlay.d` folder in the ramdisk, and they will have the following restrictions:
Since `/` is read-only in system-as-root devices, Magisk provides an overlay system, allowing developers to patch files / add new rc scripts. Additional files shall be placed in the `overlay.d` folder in the ramdisk, and they will have the following restrictions:
- All `*.rc` files in `overlay.d` will be read and concatenated *AFTER*`init.rc`
- All `*.rc` files in `overlay.d` will be read and concatenated *AFTER*`init.rc`
...
@@ -130,9 +236,3 @@ e.g. you can replace `/res/random.png` by adding the file `overlay.d/res/random.
...
@@ -130,9 +236,3 @@ e.g. you can replace `/res/random.png` by adding the file `overlay.d/res/random.
e.g. `overlay.d/new_file` will be ignored if `/new_file` does not exist
e.g. `overlay.d/new_file` will be ignored if `/new_file` does not exist
- Additional files in `overlay.d/sbin` is allowed as they will be copied into Magisk's sbin overlay.<br>
- Additional files in `overlay.d/sbin` is allowed as they will be copied into Magisk's sbin overlay.<br>
e.g. `overlay.d/sbin/libfoo.ko` will be copied to `/sbin/libfoo.ko`.
e.g. `overlay.d/sbin/libfoo.ko` will be copied to `/sbin/libfoo.ko`.
## Remove Files
How to remove a file systemless-ly? To actually make the file *disappear* is complicated (possible, not worth the effort). Replacing it with a dummy file should be good enough! Create an empty file with the same name and place it in the same path within a module, it shall replace your target file with a dummy file.
## Remove Folders
Same as mentioned above, actually making the folder *disappear* is not worth the effort. Replacing it with an empty folder should be good enough! A handy trick for module developers is to add the folder you want to remove into the `REPLACE` list within `install.sh`. If your module doesn't provide a corresponding folder, it will create an empty folder, and automatically add `.replace` into the empty folder so the dummy folder will properly replace the one in `/system`.
<stringname="upgrade_msg">Mettre à jour vers la version complête de Magisk Manager pour finir l\'installation. Télécharger et installer?</string>
<stringname="upgrade_msg">Une mise à niveau de Magisk Manager en version complète est nécessaire afin de terminer l’installation. Souhaitez‑vous procéder à son téléchargement et son installation ?</string>
<stringname="no_internet_msg">Veuillez vous connecter à Internet! Une mise à niveau complête vers le Gestionnaire Magisk est requise.</string>
<stringname="no_internet_msg">Veuillez vous connecter à Internet ! Une mise à niveau complète de Magisk Manager est requise.</string>
<stringname="dling">Téléchargement en cours</string>