You've already forked KernelSU
mirror of
https://github.com/tiann/KernelSU.git
synced 2025-08-27 23:46:34 +00:00
deploy: a903b0fa4e
This commit is contained in:
@@ -1 +1 @@
|
||||
import{_ as e,o as i,c as t,O as o}from"./chunks/framework.43781440.js";const p=JSON.parse('{"title":"Difference with Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"guide/difference-with-magisk.md","filePath":"guide/difference-with-magisk.md"}'),a={name:"guide/difference-with-magisk.md"},s=o('<h1 id="difference-with-magisk" tabindex="-1">Difference with Magisk <a class="header-anchor" href="#difference-with-magisk" aria-label="Permalink to "Difference with Magisk""></a></h1><p>Although there are many similarities between KernelSU modules and Magisk modules, there are inevitably some differences due to their completely different implementation mechanisms. If you want your module to run on both Magisk and KernelSU, you must understand these differences.</p><h2 id="similarities" tabindex="-1">Similarities <a class="header-anchor" href="#similarities" aria-label="Permalink to "Similarities""></a></h2><ul><li>Module file format: both use zip format to organize modules, and the format of modules is almost the same</li><li>Module installation directory: both located in <code>/data/adb/modules</code></li><li>Systemless: both support modifying /system in a systemless way through modules</li><li>post-fs-data.sh: the execution time and semantics are exactly the same</li><li>service.sh: the execution time and semantics are exactly the same</li><li>system.prop: completely the same</li><li>sepolicy.rule: completely the same</li><li>BusyBox: scripts are run in BusyBox with "standalone mode" enabled in both cases</li></ul><h2 id="differences" tabindex="-1">Differences <a class="header-anchor" href="#differences" aria-label="Permalink to "Differences""></a></h2><p>Before understanding the differences, you need to know how to differentiate whether your module is running in KernelSU or Magisk. You can use the environment variable <code>KSU</code> to differentiate it in all places where you can run module scripts (<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>). In KernelSU, this environment variable will be set to <code>true</code>.</p><p>Here are some differences:</p><ul><li>KernelSU modules cannot be installed in Recovery mode.</li><li>KernelSU modules do not have built-in support for Zygisk (but you can use Zygisk modules through <a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a>.</li><li>The method for replacing or deleting files in KernelSU modules is completely different from Magisk. KernelSU does not support the <code>.replace</code> method. Instead, you need to create a same-named file with <code>mknod filename c 0 0</code> to delete the corresponding file.</li><li>The directories for BusyBox are different. The built-in BusyBox in KernelSU is located in <code>/data/adb/ksu/bin/busybox</code>, while in Magisk it is in <code>/data/adb/magisk/busybox</code>. <strong>Note that this is an internal behavior of KernelSU and may change in the future!</strong></li><li>KernelSU does not support <code>.replace</code> files; however, KernelSU supports the <code>REMOVE</code> and <code>REPLACE</code> variable to remove or replace files and folders.</li><li>KernelSU adds <code>boot-completed</code> stage to run some scripts on boot completed.</li><li>KernelSU adds <code>post-mount</code> stage to run some scripts after mounting overlayfs</li></ul>',8),r=[s];function n(l,d,c,h,m,u){return i(),t("div",null,r)}const g=e(a,[["render",n]]);export{p as __pageData,g as default};
|
||||
import{_ as e,o as i,c as t,O as o}from"./chunks/framework.43781440.js";const p=JSON.parse('{"title":"Difference with Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"guide/difference-with-magisk.md","filePath":"guide/difference-with-magisk.md"}'),a={name:"guide/difference-with-magisk.md"},s=o('<h1 id="difference-with-magisk" tabindex="-1">Difference with Magisk <a class="header-anchor" href="#difference-with-magisk" aria-label="Permalink to "Difference with Magisk""></a></h1><p>Although there are many similarities between KernelSU modules and Magisk modules, there are inevitably some differences due to their completely different implementation mechanisms. If you want your module to run on both Magisk and KernelSU, you must understand these differences.</p><h2 id="similarities" tabindex="-1">Similarities <a class="header-anchor" href="#similarities" aria-label="Permalink to "Similarities""></a></h2><ul><li>Module file format: both use zip format to organize modules, and the format of modules is almost the same</li><li>Module installation directory: both located in <code>/data/adb/modules</code></li><li>Systemless: both support modifying /system in a systemless way through modules</li><li>post-fs-data.sh: the execution time and semantics are exactly the same</li><li>service.sh: the execution time and semantics are exactly the same</li><li>system.prop: completely the same</li><li>sepolicy.rule: completely the same</li><li>BusyBox: scripts are run in BusyBox with "standalone mode" enabled in both cases</li></ul><h2 id="differences" tabindex="-1">Differences <a class="header-anchor" href="#differences" aria-label="Permalink to "Differences""></a></h2><p>Before understanding the differences, you need to know how to differentiate whether your module is running in KernelSU or Magisk. You can use the environment variable <code>KSU</code> to differentiate it in all places where you can run module scripts (<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>). In KernelSU, this environment variable will be set to <code>true</code>.</p><p>Here are some differences:</p><ul><li>KernelSU modules cannot be installed in Recovery mode.</li><li>KernelSU modules do not have built-in support for Zygisk (but you can use Zygisk modules through <a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a>.</li><li>The method for replacing or deleting files in KernelSU modules is completely different from Magisk. KernelSU does not support the <code>.replace</code> method. Instead, you need to create a same-named file with <code>mknod filename c 0 0</code> to delete the corresponding file.</li><li>The directories for BusyBox are different. The built-in BusyBox in KernelSU is located in <code>/data/adb/ksu/bin/busybox</code>, while in Magisk it is in <code>/data/adb/magisk/busybox</code>. <strong>Note that this is an internal behavior of KernelSU and may change in the future!</strong></li><li>KernelSU does not support <code>.replace</code> files; however, KernelSU supports the <code>REMOVE</code> and <code>REPLACE</code> variable to remove or replace files and folders.</li><li>KernelSU adds <code>boot-completed</code> stage to run some scripts on boot completed.</li><li>KernelSU adds <code>post-mount</code> stage to run some scripts after mounting overlayfs</li></ul>',8),r=[s];function n(l,d,c,h,m,u){return i(),t("div",null,r)}const g=e(a,[["render",n]]);export{p as __pageData,g as default};
|
||||
1
assets/guide_faq.md.234d8c0d.js
Normal file
1
assets/guide_faq.md.234d8c0d.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/guide_faq.md.234d8c0d.lean.js
Normal file
1
assets/guide_faq.md.234d8c0d.lean.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as e,o,c as a,O as t}from"./chunks/framework.43781440.js";const m=JSON.parse('{"title":"FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"guide/faq.md","filePath":"guide/faq.md"}'),r={name:"guide/faq.md"},n=t("",33),s=[n];function i(l,d,u,h,c,p){return o(),a("div",null,s)}const b=e(r,[["render",i]]);export{m as __pageData,b as default};
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
import{_ as e,o,c as a,O as r}from"./chunks/framework.43781440.js";const m=JSON.parse('{"title":"FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"guide/faq.md","filePath":"guide/faq.md"}'),n={name:"guide/faq.md"},t=r("",33),s=[t];function i(l,d,u,h,c,p){return o(),a("div",null,s)}const b=e(n,[["render",i]]);export{m as __pageData,b as default};
|
||||
@@ -46,7 +46,7 @@ import{_ as e,o as s,c as o,O as a}from"./chunks/framework.43781440.js";const y=
|
||||
<span class="line"><span style="color:#A6ACCD;">│ ├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">│ └── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">difference with Magisk</p><p>KernelSU does not have built-in support for Zygisk, so there is no content related to Zygisk in the module. However, you can use <a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a> to support Zygisk modules. In this case, the content of the Zygisk module is identical to that supported by Magisk.</p></div><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p>module.prop is a configuration file for a module. In KernelSU, if a module does not contain this file, it will not be recognized as a module. The format of this file is as follows:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">difference with Magisk</p><p>KernelSU does not have built-in support for Zygisk, so there is no content related to Zygisk in the module. However, you can use <a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a> to support Zygisk modules. In this case, the content of the Zygisk module is identical to that supported by Magisk.</p></div><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p>module.prop is a configuration file for a module. In KernelSU, if a module does not contain this file, it will not be recognized as a module. The format of this file is as follows:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">name=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">version=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">versionCode=<int></span></span>
|
||||
@@ -1 +1 @@
|
||||
import{_ as a,o as e,c as n,O as i}from"./chunks/framework.43781440.js";const p=JSON.parse('{"title":"Perbedaan dengan Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"id_ID/guide/difference-with-magisk.md","filePath":"id_ID/guide/difference-with-magisk.md"}'),d={name:"id_ID/guide/difference-with-magisk.md"},t=i('<h1 id="perbedaan-dengan-magisk" tabindex="-1">Perbedaan dengan Magisk <a class="header-anchor" href="#perbedaan-dengan-magisk" aria-label="Permalink to "Perbedaan dengan Magisk""></a></h1><p>Meskipun ada banyak kesamaan antara modul KernelSU dan modul Magisk, pasti ada beberapa perbedaan karena mekanisme implementasinya yang sangat berbeda. Jika Anda ingin modul Anda berjalan di Magisk dan KernelSU, Anda harus memahami perbedaan ini.</p><h2 id="kesamaan" tabindex="-1">Kesamaan <a class="header-anchor" href="#kesamaan" aria-label="Permalink to "Kesamaan""></a></h2><ul><li>Format file modul: keduanya menggunakan format zip untuk mengatur modul, dan format modulnya hampir sama</li><li>Direktori pemasangan modul: keduanya terletak di <code>/data/adb/modules</code></li><li>Tanpa sistem: keduanya mendukung modifikasi / sistem dengan cara tanpa sistem melalui modul</li><li>post-fs-data.sh: waktu eksekusi dan semantiknya persis sama</li><li>service.sh: waktu eksekusi dan semantiknya persis sama</li><li>system.prop: sepenuhnya sama</li><li>sepolicy.rule: sama persis</li><li>BusyBox: skrip dijalankan di BusyBox dengan "mode mandiri" diaktifkan di kedua kasus</li></ul><h2 id="perbedaan" tabindex="-1">Perbedaan <a class="header-anchor" href="#perbedaan" aria-label="Permalink to "Perbedaan""></a></h2><p>Sebelum memahami perbedaannya, Anda perlu mengetahui cara membedakan apakah modul Anda berjalan di KernelSU atau Magisk. Anda dapat menggunakan variabel lingkungan <code>KSU</code> untuk membedakannya di semua tempat di mana Anda dapat menjalankan skrip modul (<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>). Di KernelSU, variabel lingkungan ini akan disetel ke <code>true</code>.</p><p>Berikut beberapa perbedaannya:</p><ul><li>Modul KernelSU tidak dapat diinstal dalam mode Pemulihan.</li><li>Modul KernelSU tidak memiliki dukungan bawaan untuk Zygisk (tetapi Anda dapat menggunakan modul Zygisk melalui <a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a>.</li><li>Metode untuk mengganti atau menghapus file dalam modul KernelSU sama sekali berbeda dari Magisk. KernelSU tidak mendukung metode <code>.replace</code>. Sebagai gantinya, Anda perlu membuat file dengan nama yang sama dengan <code>mknod filename c 0 0</code> untuk menghapus file terkait.</li><li>Direktori untuk BusyBox berbeda. BusyBox bawaan di KernelSU terletak di <code>/data/adb/ksu/bin/busybox</code>, sedangkan di Magisk terletak di <code>/data/adb/magisk/busybox</code>. <strong>Perhatikan bahwa ini adalah perilaku internal KernelSU dan dapat berubah di masa mendatang!</strong></li><li>KernelSU tidak mendukung file <code>.replace</code>; namun, KernelSU mendukung variabel <code>REMOVE</code> dan <code>REPLACE</code> untuk menghapus atau mengganti file dan folder.</li></ul>',8),r=[t];function l(s,m,u,o,k,g){return e(),n("div",null,r)}const b=a(d,[["render",l]]);export{p as __pageData,b as default};
|
||||
import{_ as a,o as e,c as n,O as i}from"./chunks/framework.43781440.js";const p=JSON.parse('{"title":"Perbedaan dengan Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"id_ID/guide/difference-with-magisk.md","filePath":"id_ID/guide/difference-with-magisk.md"}'),d={name:"id_ID/guide/difference-with-magisk.md"},t=i('<h1 id="perbedaan-dengan-magisk" tabindex="-1">Perbedaan dengan Magisk <a class="header-anchor" href="#perbedaan-dengan-magisk" aria-label="Permalink to "Perbedaan dengan Magisk""></a></h1><p>Meskipun ada banyak kesamaan antara modul KernelSU dan modul Magisk, pasti ada beberapa perbedaan karena mekanisme implementasinya yang sangat berbeda. Jika Anda ingin modul Anda berjalan di Magisk dan KernelSU, Anda harus memahami perbedaan ini.</p><h2 id="kesamaan" tabindex="-1">Kesamaan <a class="header-anchor" href="#kesamaan" aria-label="Permalink to "Kesamaan""></a></h2><ul><li>Format file modul: keduanya menggunakan format zip untuk mengatur modul, dan format modulnya hampir sama</li><li>Direktori pemasangan modul: keduanya terletak di <code>/data/adb/modules</code></li><li>Tanpa sistem: keduanya mendukung modifikasi / sistem dengan cara tanpa sistem melalui modul</li><li>post-fs-data.sh: waktu eksekusi dan semantiknya persis sama</li><li>service.sh: waktu eksekusi dan semantiknya persis sama</li><li>system.prop: sepenuhnya sama</li><li>sepolicy.rule: sama persis</li><li>BusyBox: skrip dijalankan di BusyBox dengan "mode mandiri" diaktifkan di kedua kasus</li></ul><h2 id="perbedaan" tabindex="-1">Perbedaan <a class="header-anchor" href="#perbedaan" aria-label="Permalink to "Perbedaan""></a></h2><p>Sebelum memahami perbedaannya, Anda perlu mengetahui cara membedakan apakah modul Anda berjalan di KernelSU atau Magisk. Anda dapat menggunakan variabel lingkungan <code>KSU</code> untuk membedakannya di semua tempat di mana Anda dapat menjalankan skrip modul (<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>). Di KernelSU, variabel lingkungan ini akan disetel ke <code>true</code>.</p><p>Berikut beberapa perbedaannya:</p><ul><li>Modul KernelSU tidak dapat diinstal dalam mode Pemulihan.</li><li>Modul KernelSU tidak memiliki dukungan bawaan untuk Zygisk (tetapi Anda dapat menggunakan modul Zygisk melalui <a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a>.</li><li>Metode untuk mengganti atau menghapus file dalam modul KernelSU sama sekali berbeda dari Magisk. KernelSU tidak mendukung metode <code>.replace</code>. Sebagai gantinya, Anda perlu membuat file dengan nama yang sama dengan <code>mknod filename c 0 0</code> untuk menghapus file terkait.</li><li>Direktori untuk BusyBox berbeda. BusyBox bawaan di KernelSU terletak di <code>/data/adb/ksu/bin/busybox</code>, sedangkan di Magisk terletak di <code>/data/adb/magisk/busybox</code>. <strong>Perhatikan bahwa ini adalah perilaku internal KernelSU dan dapat berubah di masa mendatang!</strong></li><li>KernelSU tidak mendukung file <code>.replace</code>; namun, KernelSU mendukung variabel <code>REMOVE</code> dan <code>REPLACE</code> untuk menghapus atau mengganti file dan folder.</li></ul>',8),s=[t];function r(l,m,u,o,k,g){return e(),n("div",null,s)}const b=a(d,[["render",r]]);export{p as __pageData,b as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as a,o as e,c as n,O as i}from"./chunks/framework.43781440.js";const p=JSON.parse('{"title":"Perbedaan dengan Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"id_ID/guide/difference-with-magisk.md","filePath":"id_ID/guide/difference-with-magisk.md"}'),d={name:"id_ID/guide/difference-with-magisk.md"},t=i("",8),r=[t];function l(s,m,u,o,k,g){return e(),n("div",null,r)}const b=a(d,[["render",l]]);export{p as __pageData,b as default};
|
||||
import{_ as a,o as e,c as n,O as i}from"./chunks/framework.43781440.js";const p=JSON.parse('{"title":"Perbedaan dengan Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"id_ID/guide/difference-with-magisk.md","filePath":"id_ID/guide/difference-with-magisk.md"}'),d={name:"id_ID/guide/difference-with-magisk.md"},t=i("",8),s=[t];function r(l,m,u,o,k,g){return e(),n("div",null,s)}const b=a(d,[["render",r]]);export{p as __pageData,b as default};
|
||||
@@ -1,4 +1,4 @@
|
||||
import{_ as a,o as n,c as e,O as s}from"./chunks/framework.43781440.js";const g=JSON.parse('{"title":"Panduan module","description":"","frontmatter":{},"headers":[],"relativePath":"id_ID/guide/module.md","filePath":"id_ID/guide/module.md"}'),i={name:"id_ID/guide/module.md"},l=s(`<h1 id="panduan-module" tabindex="-1">Panduan module <a class="header-anchor" href="#panduan-module" aria-label="Permalink to "Panduan module""></a></h1><p>KernelSU menyediakan mekanisme modul yang mencapai efek memodifikasi direktori sistem dengan tetap menjaga integritas partisi sistem. Mekanisme ini umumnya dikenal sebagai "tanpa sistem".</p><p>Mekanisme modul KernelSU hampir sama dengan Magisk. Jika Anda terbiasa dengan pengembangan modul Magisk, mengembangkan modul KernelSU sangat mirip. Anda dapat melewati pengenalan modul di bawah ini dan hanya perlu membaca <a href="./difference-with-magisk.html">difference-with-magisk</a>.</p><h2 id="busybox" tabindex="-1">Busybox <a class="header-anchor" href="#busybox" aria-label="Permalink to "Busybox""></a></h2><p>KernelSU dikirimkan dengan fitur biner BusyBox yang lengkap (termasuk dukungan penuh SELinux). Eksekusi terletak di <code>/data/adb/ksu/bin/busybox</code>. BusyBox KernelSU mendukung "Mode Shell Standalone Shell" yang dapat dialihkan waktu proses. Apa yang dimaksud dengan mode mandiri ini adalah bahwa ketika dijalankan di shell <code>ash</code> dari BusyBox, setiap perintah akan langsung menggunakan applet di dalam BusyBox, terlepas dari apa yang ditetapkan sebagai <code>PATH</code>. Misalnya, perintah seperti <code>ls</code>, <code>rm</code>, <code>chmod</code> <strong>TIDAK</strong> akan menggunakan apa yang ada di <code>PATH</code> (dalam kasus Android secara default akan menjadi <code>/system/bin/ls</code>, <code> /system/bin/rm</code>, dan <code>/system/bin/chmod</code> masing-masing), tetapi akan langsung memanggil applet BusyBox internal. Ini memastikan bahwa skrip selalu berjalan di lingkungan yang dapat diprediksi dan selalu memiliki rangkaian perintah lengkap, apa pun versi Android yang menjalankannya. Untuk memaksa perintah <em>not</em> menggunakan BusyBox, Anda harus memanggil yang dapat dieksekusi dengan path lengkap.</p><p>Setiap skrip shell tunggal yang berjalan dalam konteks KernelSU akan dieksekusi di shell <code>ash</code> BusyBox dengan mode mandiri diaktifkan. Untuk apa yang relevan dengan pengembang pihak ke-3, ini termasuk semua skrip boot dan skrip instalasi modul.</p><p>Bagi yang ingin menggunakan fitur “Standalone Mode” ini di luar KernelSU, ada 2 cara untuk mengaktifkannya:</p><ol><li>Tetapkan variabel lingkungan <code>ASH_STANDALONE</code> ke <code>1</code><br>Contoh: <code>ASH_STANDALONE=1 /data/adb/ksu/bin/busybox sh <script></code></li><li>Beralih dengan opsi baris perintah:<br><code>/data/adb/ksu/bin/busybox sh -o mandiri <script></code></li></ol><p>Untuk memastikan semua shell <code>sh</code> selanjutnya dijalankan juga dalam mode mandiri, opsi 1 adalah metode yang lebih disukai (dan inilah yang digunakan secara internal oleh KernelSU dan manajer KernelSU) karena variabel lingkungan diwariskan ke proses anak.</p><p>::: perbedaan tip dengan Magisk</p><p>BusyBox KernelSU sekarang menggunakan file biner yang dikompilasi langsung dari proyek Magisk. <strong>Berkat Magisk!</strong> Oleh karena itu, Anda tidak perlu khawatir tentang masalah kompatibilitas antara skrip BusyBox di Magisk dan KernelSU karena keduanya persis sama! :::</p><h2 id="kernelsu-module" tabindex="-1">KernelSU module <a class="header-anchor" href="#kernelsu-module" aria-label="Permalink to "KernelSU module""></a></h2><p>Modul KernelSU adalah folder yang ditempatkan di <code>/data/adb/modules</code> dengan struktur di bawah ini:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">/data/adb/modules</span></span>
|
||||
import{_ as a,o as e,c as n,O as s}from"./chunks/framework.43781440.js";const g=JSON.parse('{"title":"Panduan module","description":"","frontmatter":{},"headers":[],"relativePath":"id_ID/guide/module.md","filePath":"id_ID/guide/module.md"}'),i={name:"id_ID/guide/module.md"},l=s(`<h1 id="panduan-module" tabindex="-1">Panduan module <a class="header-anchor" href="#panduan-module" aria-label="Permalink to "Panduan module""></a></h1><p>KernelSU menyediakan mekanisme modul yang mencapai efek memodifikasi direktori sistem dengan tetap menjaga integritas partisi sistem. Mekanisme ini umumnya dikenal sebagai "tanpa sistem".</p><p>Mekanisme modul KernelSU hampir sama dengan Magisk. Jika Anda terbiasa dengan pengembangan modul Magisk, mengembangkan modul KernelSU sangat mirip. Anda dapat melewati pengenalan modul di bawah ini dan hanya perlu membaca <a href="./difference-with-magisk.html">difference-with-magisk</a>.</p><h2 id="busybox" tabindex="-1">Busybox <a class="header-anchor" href="#busybox" aria-label="Permalink to "Busybox""></a></h2><p>KernelSU dikirimkan dengan fitur biner BusyBox yang lengkap (termasuk dukungan penuh SELinux). Eksekusi terletak di <code>/data/adb/ksu/bin/busybox</code>. BusyBox KernelSU mendukung "Mode Shell Standalone Shell" yang dapat dialihkan waktu proses. Apa yang dimaksud dengan mode mandiri ini adalah bahwa ketika dijalankan di shell <code>ash</code> dari BusyBox, setiap perintah akan langsung menggunakan applet di dalam BusyBox, terlepas dari apa yang ditetapkan sebagai <code>PATH</code>. Misalnya, perintah seperti <code>ls</code>, <code>rm</code>, <code>chmod</code> <strong>TIDAK</strong> akan menggunakan apa yang ada di <code>PATH</code> (dalam kasus Android secara default akan menjadi <code>/system/bin/ls</code>, <code> /system/bin/rm</code>, dan <code>/system/bin/chmod</code> masing-masing), tetapi akan langsung memanggil applet BusyBox internal. Ini memastikan bahwa skrip selalu berjalan di lingkungan yang dapat diprediksi dan selalu memiliki rangkaian perintah lengkap, apa pun versi Android yang menjalankannya. Untuk memaksa perintah <em>not</em> menggunakan BusyBox, Anda harus memanggil yang dapat dieksekusi dengan path lengkap.</p><p>Setiap skrip shell tunggal yang berjalan dalam konteks KernelSU akan dieksekusi di shell <code>ash</code> BusyBox dengan mode mandiri diaktifkan. Untuk apa yang relevan dengan pengembang pihak ke-3, ini termasuk semua skrip boot dan skrip instalasi modul.</p><p>Bagi yang ingin menggunakan fitur “Standalone Mode” ini di luar KernelSU, ada 2 cara untuk mengaktifkannya:</p><ol><li>Tetapkan variabel lingkungan <code>ASH_STANDALONE</code> ke <code>1</code><br>Contoh: <code>ASH_STANDALONE=1 /data/adb/ksu/bin/busybox sh <script></code></li><li>Beralih dengan opsi baris perintah:<br><code>/data/adb/ksu/bin/busybox sh -o mandiri <script></code></li></ol><p>Untuk memastikan semua shell <code>sh</code> selanjutnya dijalankan juga dalam mode mandiri, opsi 1 adalah metode yang lebih disukai (dan inilah yang digunakan secara internal oleh KernelSU dan manajer KernelSU) karena variabel lingkungan diwariskan ke proses anak.</p><p>::: perbedaan tip dengan Magisk</p><p>BusyBox KernelSU sekarang menggunakan file biner yang dikompilasi langsung dari proyek Magisk. <strong>Berkat Magisk!</strong> Oleh karena itu, Anda tidak perlu khawatir tentang masalah kompatibilitas antara skrip BusyBox di Magisk dan KernelSU karena keduanya persis sama! :::</p><h2 id="kernelsu-module" tabindex="-1">KernelSU module <a class="header-anchor" href="#kernelsu-module" aria-label="Permalink to "KernelSU module""></a></h2><p>Modul KernelSU adalah folder yang ditempatkan di <code>/data/adb/modules</code> dengan struktur di bawah ini:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">/data/adb/modules</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">|</span></span>
|
||||
@@ -44,7 +44,7 @@ import{_ as a,o as n,c as e,O as s}from"./chunks/framework.43781440.js";const g=
|
||||
<span class="line"><span style="color:#A6ACCD;">│ ├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">│ └── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><p>::: perbedaan tip dengan Magisk KernelSU tidak memiliki dukungan bawaan untuk Zygisk, jadi tidak ada konten terkait Zygisk dalam modul. Namun, Anda dapat menggunakan <a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a> untuk mendukung modul Zygisk. Dalam hal ini, konten modul Zygisk identik dengan yang didukung oleh Magisk. :::</p><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p>module.prop adalah file konfigurasi untuk sebuah modul. Di KernelSU, jika modul tidak berisi file ini, maka tidak akan dikenali sebagai modul. Format file ini adalah sebagai berikut:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><p>::: perbedaan tip dengan Magisk KernelSU tidak memiliki dukungan bawaan untuk Zygisk, jadi tidak ada konten terkait Zygisk dalam modul. Namun, Anda dapat menggunakan <a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a> untuk mendukung modul Zygisk. Dalam hal ini, konten modul Zygisk identik dengan yang didukung oleh Magisk. :::</p><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p>module.prop adalah file konfigurasi untuk sebuah modul. Di KernelSU, jika modul tidak berisi file ini, maka tidak akan dikenali sebagai modul. Format file ini adalah sebagai berikut:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">name=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">version=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">versioncode=<int></span></span>
|
||||
@@ -78,4 +78,4 @@ import{_ as a,o as n,c as e,O as s}from"./chunks/framework.43781440.js";const g=
|
||||
<span class="line"><span style="color:#A6ACCD;"> for all files in <directory>, it will call:</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;"> set_perm file owner group filepermission context</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;"> for all directories in <directory> (including itself), it will call:</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;"> set_perm dir owner group dirpermission context</span></span></code></pre></div><h2 id="boot-scripts" tabindex="-1">Boot scripts <a class="header-anchor" href="#boot-scripts" aria-label="Permalink to "Boot scripts""></a></h2><p>Di KernelSU, skrip dibagi menjadi dua jenis berdasarkan mode operasinya: mode post-fs-data dan mode layanan late_start:</p><ul><li>mode pasca-fs-data <ul><li>Tahap ini adalah BLOKIR. Proses boot dijeda sebelum eksekusi selesai, atau 10 detik telah berlalu.</li><li>Skrip dijalankan sebelum modul apa pun dipasang. Ini memungkinkan pengembang modul untuk menyesuaikan modul mereka secara dinamis sebelum dipasang.</li><li>Tahap ini terjadi sebelum Zygote dimulai, yang berarti segalanya di Android</li><li><strong>PERINGATAN:</strong> menggunakan <code>setprop</code> akan menghentikan proses booting! Silakan gunakan <code>resetprop -n <prop_name> <prop_value></code> sebagai gantinya.</li><li><strong>Hanya jalankan skrip dalam mode ini jika perlu.</strong></li></ul></li><li>mode layanan late_start <ul><li>Tahap ini NON-BLOCKING. Skrip Anda berjalan paralel dengan proses booting lainnya.</li><li><strong>Ini adalah tahap yang disarankan untuk menjalankan sebagian besar skrip.</strong></li></ul></li></ul><p>Di KernelSU, skrip startup dibagi menjadi dua jenis berdasarkan lokasi penyimpanannya: skrip umum dan skrip modul:</p><ul><li>Skrip Umum <ul><li>Ditempatkan di <code>/data/adb/post-fs-data.d</code> atau <code>/data/adb/service.d</code></li><li>Hanya dieksekusi jika skrip disetel sebagai dapat dieksekusi (<code>chmod +x script.sh</code>)</li><li>Skrip di <code>post-fs-data.d</code> berjalan dalam mode post-fs-data, dan skrip di <code>service.d</code> berjalan di mode layanan late_start.</li><li>Modul seharusnya <strong>TIDAK</strong> menambahkan skrip umum selama instalasi</li></ul></li><li>Skrip Modul <ul><li>Ditempatkan di folder modul itu sendiri</li><li>Hanya dijalankan jika modul diaktifkan</li><li><code>post-fs-data.sh</code> berjalan dalam mode post-fs-data, dan <code>service.sh</code> berjalan dalam mode layanan late_start.</li></ul></li></ul><p>Semua skrip boot akan berjalan di shell BusyBox <code>ash</code> KernelSU dengan "Mode Mandiri" diaktifkan.</p>`,60),o=[l];function t(d,p,r,c,u,m){return n(),e("div",null,o)}const y=a(i,[["render",t]]);export{g as __pageData,y as default};
|
||||
<span class="line"><span style="color:#A6ACCD;"> set_perm dir owner group dirpermission context</span></span></code></pre></div><h2 id="boot-scripts" tabindex="-1">Boot scripts <a class="header-anchor" href="#boot-scripts" aria-label="Permalink to "Boot scripts""></a></h2><p>Di KernelSU, skrip dibagi menjadi dua jenis berdasarkan mode operasinya: mode post-fs-data dan mode layanan late_start:</p><ul><li>mode pasca-fs-data <ul><li>Tahap ini adalah BLOKIR. Proses boot dijeda sebelum eksekusi selesai, atau 10 detik telah berlalu.</li><li>Skrip dijalankan sebelum modul apa pun dipasang. Ini memungkinkan pengembang modul untuk menyesuaikan modul mereka secara dinamis sebelum dipasang.</li><li>Tahap ini terjadi sebelum Zygote dimulai, yang berarti segalanya di Android</li><li><strong>PERINGATAN:</strong> menggunakan <code>setprop</code> akan menghentikan proses booting! Silakan gunakan <code>resetprop -n <prop_name> <prop_value></code> sebagai gantinya.</li><li><strong>Hanya jalankan skrip dalam mode ini jika perlu.</strong></li></ul></li><li>mode layanan late_start <ul><li>Tahap ini NON-BLOCKING. Skrip Anda berjalan paralel dengan proses booting lainnya.</li><li><strong>Ini adalah tahap yang disarankan untuk menjalankan sebagian besar skrip.</strong></li></ul></li></ul><p>Di KernelSU, skrip startup dibagi menjadi dua jenis berdasarkan lokasi penyimpanannya: skrip umum dan skrip modul:</p><ul><li>Skrip Umum <ul><li>Ditempatkan di <code>/data/adb/post-fs-data.d</code> atau <code>/data/adb/service.d</code></li><li>Hanya dieksekusi jika skrip disetel sebagai dapat dieksekusi (<code>chmod +x script.sh</code>)</li><li>Skrip di <code>post-fs-data.d</code> berjalan dalam mode post-fs-data, dan skrip di <code>service.d</code> berjalan di mode layanan late_start.</li><li>Modul seharusnya <strong>TIDAK</strong> menambahkan skrip umum selama instalasi</li></ul></li><li>Skrip Modul <ul><li>Ditempatkan di folder modul itu sendiri</li><li>Hanya dijalankan jika modul diaktifkan</li><li><code>post-fs-data.sh</code> berjalan dalam mode post-fs-data, dan <code>service.sh</code> berjalan dalam mode layanan late_start.</li></ul></li></ul><p>Semua skrip boot akan berjalan di shell BusyBox <code>ash</code> KernelSU dengan "Mode Mandiri" diaktifkan.</p>`,60),o=[l];function t(d,p,r,c,u,m){return e(),n("div",null,o)}const y=a(i,[["render",t]]);export{g as __pageData,y as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as a,o as n,c as e,O as s}from"./chunks/framework.43781440.js";const g=JSON.parse('{"title":"Panduan module","description":"","frontmatter":{},"headers":[],"relativePath":"id_ID/guide/module.md","filePath":"id_ID/guide/module.md"}'),i={name:"id_ID/guide/module.md"},l=s("",60),o=[l];function t(d,p,r,c,u,m){return n(),e("div",null,o)}const y=a(i,[["render",t]]);export{g as __pageData,y as default};
|
||||
import{_ as a,o as e,c as n,O as s}from"./chunks/framework.43781440.js";const g=JSON.parse('{"title":"Panduan module","description":"","frontmatter":{},"headers":[],"relativePath":"id_ID/guide/module.md","filePath":"id_ID/guide/module.md"}'),i={name:"id_ID/guide/module.md"},l=s("",60),o=[l];function t(d,p,r,c,u,m){return e(),n("div",null,o)}const y=a(i,[["render",t]]);export{g as __pageData,y as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as e,o as a,c as i,O as o}from"./chunks/framework.43781440.js";const k=JSON.parse('{"title":"Magisk との違い","description":"","frontmatter":{},"headers":[],"relativePath":"ja_JP/guide/difference-with-magisk.md","filePath":"ja_JP/guide/difference-with-magisk.md"}'),s={name:"ja_JP/guide/difference-with-magisk.md"},l=o('<h1 id="magisk-との違い" tabindex="-1">Magisk との違い <a class="header-anchor" href="#magisk-との違い" aria-label="Permalink to "Magisk との違い""></a></h1><p>KernelSU モジュールと Magisk モジュールには多くの共通点がありますが、実装の仕組みが全く異なるため、必然的にいくつかの相違点が存在します。Magisk と KernelSU の両方でモジュールを動作させたい場合、これらの違いを理解する必要があります。</p><h2 id="似ているところ" tabindex="-1">似ているところ <a class="header-anchor" href="#似ているところ" aria-label="Permalink to "似ているところ""></a></h2><ul><li>モジュールファイルの形式:どちらもzip形式でモジュールを整理しており、モジュールの形式はほぼ同じです。</li><li>モジュールのインストールディレクトリ:どちらも <code>/data/adb/modules</code> に配置されます。</li><li>システムレス:どちらもモジュールによるシステムレスな方法で /system を変更できます。</li><li>post-fs-data.sh: 実行時間と意味は全く同じです。</li><li>service.sh: 実行時間と意味は全く同じです。</li><li>system.prop:全く同じです。</li><li>sepolicy.rule:全く同じです。</li><li>BusyBox:スクリプトは BusyBox で実行され、どちらの場合も「スタンドアロンモード」が有効です。</li></ul><h2 id="違うところ" tabindex="-1">違うところ <a class="header-anchor" href="#違うところ" aria-label="Permalink to "違うところ""></a></h2><p>違いを理解する前に、モジュールが KernelSU で動作しているか Magisk で動作しているかを区別する方法を知っておく必要があります。環境変数 <code>KSU</code> を使うとモジュールスクリプトを実行できるすべての場所 (<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>) で区別できます。KernelSU では、この環境変数に <code>true</code> が設定されます。</p><p>以下は違いです:</p><ul><li>KernelSU モジュールは、リカバリーモードではインストールできません。</li><li>KernelSU モジュールには Zygisk のサポートが組み込まれていません(ただし<a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a>を使うと Zygisk モジュールを使用できます)。</li><li>KernelSU モジュールにおけるファイルの置換や削除の方法は、Magisk とは全く異なります。KernelSU は <code>.replace</code> メソッドをサポートしていません。その代わり、<code>mknod filename c 0 0</code> で同名のファイルを作成し、対応するファイルを削除する必要があります。</li><li>BusyBox 用のディレクトリが違います。KernelSU の組み込み BusyBox は <code>/data/adb/ksu/bin/busybox</code> に、Magisk では <code>/data/adb/magisk/busybox</code> に配置されます。<strong>これは KernelSU の内部動作であり、将来的に変更される可能性があることに注意してください!</strong></li><li>KernelSU は <code>.replace</code> ファイルをサポートしていません。しかし、KernelSU はファイルやフォルダを削除したり置き換えたりするための <code>REMOVE</code> と <code>REPLACE</code> 変数をサポートしています。</li></ul>',8),r=[l];function t(d,c,n,h,_,u){return a(),i("div",null,r)}const p=e(s,[["render",t]]);export{k as __pageData,p as default};
|
||||
import{_ as e,o as a,c as i,O as o}from"./chunks/framework.43781440.js";const k=JSON.parse('{"title":"Magisk との違い","description":"","frontmatter":{},"headers":[],"relativePath":"ja_JP/guide/difference-with-magisk.md","filePath":"ja_JP/guide/difference-with-magisk.md"}'),s={name:"ja_JP/guide/difference-with-magisk.md"},l=o('<h1 id="magisk-との違い" tabindex="-1">Magisk との違い <a class="header-anchor" href="#magisk-との違い" aria-label="Permalink to "Magisk との違い""></a></h1><p>KernelSU モジュールと Magisk モジュールには多くの共通点がありますが、実装の仕組みが全く異なるため、必然的にいくつかの相違点が存在します。Magisk と KernelSU の両方でモジュールを動作させたい場合、これらの違いを理解する必要があります。</p><h2 id="似ているところ" tabindex="-1">似ているところ <a class="header-anchor" href="#似ているところ" aria-label="Permalink to "似ているところ""></a></h2><ul><li>モジュールファイルの形式:どちらもzip形式でモジュールを整理しており、モジュールの形式はほぼ同じです。</li><li>モジュールのインストールディレクトリ:どちらも <code>/data/adb/modules</code> に配置されます。</li><li>システムレス:どちらもモジュールによるシステムレスな方法で /system を変更できます。</li><li>post-fs-data.sh: 実行時間と意味は全く同じです。</li><li>service.sh: 実行時間と意味は全く同じです。</li><li>system.prop:全く同じです。</li><li>sepolicy.rule:全く同じです。</li><li>BusyBox:スクリプトは BusyBox で実行され、どちらの場合も「スタンドアロンモード」が有効です。</li></ul><h2 id="違うところ" tabindex="-1">違うところ <a class="header-anchor" href="#違うところ" aria-label="Permalink to "違うところ""></a></h2><p>違いを理解する前に、モジュールが KernelSU で動作しているか Magisk で動作しているかを区別する方法を知っておく必要があります。環境変数 <code>KSU</code> を使うとモジュールスクリプトを実行できるすべての場所 (<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>) で区別できます。KernelSU では、この環境変数に <code>true</code> が設定されます。</p><p>以下は違いです:</p><ul><li>KernelSU モジュールは、リカバリーモードではインストールできません。</li><li>KernelSU モジュールには Zygisk のサポートが組み込まれていません(ただし<a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a>を使うと Zygisk モジュールを使用できます)。</li><li>KernelSU モジュールにおけるファイルの置換や削除の方法は、Magisk とは全く異なります。KernelSU は <code>.replace</code> メソッドをサポートしていません。その代わり、<code>mknod filename c 0 0</code> で同名のファイルを作成し、対応するファイルを削除する必要があります。</li><li>BusyBox 用のディレクトリが違います。KernelSU の組み込み BusyBox は <code>/data/adb/ksu/bin/busybox</code> に、Magisk では <code>/data/adb/magisk/busybox</code> に配置されます。<strong>これは KernelSU の内部動作であり、将来的に変更される可能性があることに注意してください!</strong></li><li>KernelSU は <code>.replace</code> ファイルをサポートしていません。しかし、KernelSU はファイルやフォルダを削除したり置き換えたりするための <code>REMOVE</code> と <code>REPLACE</code> 変数をサポートしています。</li></ul>',8),t=[l];function r(d,c,n,h,_,u){return a(),i("div",null,t)}const p=e(s,[["render",r]]);export{k as __pageData,p as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as e,o as a,c as i,O as o}from"./chunks/framework.43781440.js";const k=JSON.parse('{"title":"Magisk との違い","description":"","frontmatter":{},"headers":[],"relativePath":"ja_JP/guide/difference-with-magisk.md","filePath":"ja_JP/guide/difference-with-magisk.md"}'),s={name:"ja_JP/guide/difference-with-magisk.md"},l=o("",8),r=[l];function t(d,c,n,h,_,u){return a(),i("div",null,r)}const p=e(s,[["render",t]]);export{k as __pageData,p as default};
|
||||
import{_ as e,o as a,c as i,O as o}from"./chunks/framework.43781440.js";const k=JSON.parse('{"title":"Magisk との違い","description":"","frontmatter":{},"headers":[],"relativePath":"ja_JP/guide/difference-with-magisk.md","filePath":"ja_JP/guide/difference-with-magisk.md"}'),s={name:"ja_JP/guide/difference-with-magisk.md"},l=o("",8),t=[l];function r(d,c,n,h,_,u){return a(),i("div",null,t)}const p=e(s,[["render",r]]);export{k as __pageData,p as default};
|
||||
File diff suppressed because one or more lines are too long
1
assets/ja_JP_guide_faq.md.998d2dfd.js
Normal file
1
assets/ja_JP_guide_faq.md.998d2dfd.js
Normal file
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{_ as e,o as a,c as r,O as n}from"./chunks/framework.43781440.js";const m=JSON.parse('{"title":"よくある質問","description":"","frontmatter":{},"headers":[],"relativePath":"ja_JP/guide/faq.md","filePath":"ja_JP/guide/faq.md"}'),l={name:"ja_JP/guide/faq.md"},i=n("",33),o=[i];function t(s,d,h,u,k,c){return a(),r("div",null,o)}const K=e(l,[["render",t]]);export{m as __pageData,K as default};
|
||||
import{_ as e,o as a,c as r,O as n}from"./chunks/framework.43781440.js";const m=JSON.parse('{"title":"よくある質問","description":"","frontmatter":{},"headers":[],"relativePath":"ja_JP/guide/faq.md","filePath":"ja_JP/guide/faq.md"}'),l={name:"ja_JP/guide/faq.md"},i=n("",33),o=[i];function t(s,d,h,u,k,c){return a(),r("div",null,o)}const g=e(l,[["render",t]]);export{m as __pageData,g as default};
|
||||
@@ -44,7 +44,7 @@ import{_ as s,o as e,c as a,O as n}from"./chunks/framework.43781440.js";const y=
|
||||
<span class="line"><span style="color:#A6ACCD;">│ ├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">│ └── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">Magisk との違い</p><p>KernelSU は Zygisk をビルトインでサポートしていないため、モジュール内に Zygisk に関連するコンテンツは存在しません。 しかし、<a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a> をインストールすれば Zygisk モジュールを使えます。その場合の Zygisk モジュールのコンテンツは Magisk と同じです。</p></div><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p>module.prop はモジュールの設定ファイルです。KernelSU ではこのファイルを含まないモジュールは、モジュールとして認識されません。このファイルの形式は以下の通りです:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">Magisk との違い</p><p>KernelSU は Zygisk をビルトインでサポートしていないため、モジュール内に Zygisk に関連するコンテンツは存在しません。 しかし、<a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a> をインストールすれば Zygisk モジュールを使えます。その場合の Zygisk モジュールのコンテンツは Magisk と同じです。</p></div><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p>module.prop はモジュールの設定ファイルです。KernelSU ではこのファイルを含まないモジュールは、モジュールとして認識されません。このファイルの形式は以下の通りです:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">name=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">version=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">versionCode=<int></span></span>
|
||||
@@ -78,4 +78,4 @@ import{_ as s,o as e,c as a,O as n}from"./chunks/framework.43781440.js";const y=
|
||||
<span class="line"><span style="color:#A6ACCD;"> <directory> 内のすべてのファイルに対しては以下が実行されます:</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;"> set_perm file owner group filepermission context</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;"> <directory> 内のすべてのディレクトリ(自身を含む)に対しては以下が実行されます:</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;"> set_perm dir owner group dirpermission context</span></span></code></pre></div><h2 id="ブートスクリプト" tabindex="-1">ブートスクリプト <a class="header-anchor" href="#ブートスクリプト" aria-label="Permalink to "ブートスクリプト""></a></h2><p>KernelSU では、スクリプトは実行モードによって post-fs-data モードと late_start サービスモードの2種類に分けられます:</p><ul><li>post-fs-data モード <ul><li>同期処理です。実行が終わるか、10秒が経過するまでブートプロセスが一時停止されます。</li><li>スクリプトはモジュールがマウントされる前に実行されます。モジュール開発者はモジュールがマウントされる前に、動的にモジュールを調整できます。</li><li>このステージは Zygote が始まる前に起こるので、Android のほぼすべての処理の前に割り込めます</li><li><strong>警告:</strong> <code>setprop</code> を使うとブートプロセスのデッドロックを引き起こします! <code>resetprop -n <prop_name> <prop_value></code> を使ってください。</li><li><strong>本当に必要な場合だけこのモードでコマンド実行してください</strong></li></ul></li><li>late_start サービスモード <ul><li>非同期処理です。スクリプトは、起動プロセスの残りの部分と並行して実行されます。</li><li><strong>ほとんどのスクリプトにはこちらがおすすめです</strong></li></ul></li></ul><p>KernelSU では、起動スクリプトは保存場所によって一般スクリプトとモジュールスクリプトの2種類に分けられます:</p><ul><li>一般スクリプト <ul><li><code>/data/adb/post-fs-data.d</code> か <code>/data/adb/service.d</code> に配置されます</li><li>スクリプトが実行可能な状態に設定されている場合にのみ実行されます (<code>chmod +x script.sh</code>)</li><li><code>post-fs-data.d</code> のスクリプトは post-fs-data モードで実行され、<code>service.d</code> のスクリプトは late_start サービスモードで実行されます</li><li>モジュールはインストール時に一般スクリプトを追加するべきではありません</li></ul></li><li>モジュールスクリプト <ul><li>モジュール独自のフォルダに配置されます</li><li>モジュールが有効な場合のみ実行されます</li><li><code>post-fs-data.sh</code> は post-fs-data モードで実行され、<code>service.sh</code> は late_start サービスモードで実行されます</li></ul></li></ul><p>すべてのブートスクリプトは、KernelSU の Busybox <code>ash</code> シェルで「スタンドアロンモード」を有効にした状態で実行されます。</p>`,58),p=[o];function t(c,r,i,d,A,C){return e(),a("div",null,p)}const m=s(l,[["render",t]]);export{y as __pageData,m as default};
|
||||
<span class="line"><span style="color:#A6ACCD;"> set_perm dir owner group dirpermission context</span></span></code></pre></div><h2 id="ブートスクリプト" tabindex="-1">ブートスクリプト <a class="header-anchor" href="#ブートスクリプト" aria-label="Permalink to "ブートスクリプト""></a></h2><p>KernelSU では、スクリプトは実行モードによって post-fs-data モードと late_start サービスモードの2種類に分けられます:</p><ul><li>post-fs-data モード <ul><li>同期処理です。実行が終わるか、10秒が経過するまでブートプロセスが一時停止されます。</li><li>スクリプトはモジュールがマウントされる前に実行されます。モジュール開発者はモジュールがマウントされる前に、動的にモジュールを調整できます。</li><li>このステージは Zygote が始まる前に起こるので、Android のほぼすべての処理の前に割り込めます</li><li><strong>警告:</strong> <code>setprop</code> を使うとブートプロセスのデッドロックを引き起こします! <code>resetprop -n <prop_name> <prop_value></code> を使ってください。</li><li><strong>本当に必要な場合だけこのモードでコマンド実行してください</strong></li></ul></li><li>late_start サービスモード <ul><li>非同期処理です。スクリプトは、起動プロセスの残りの部分と並行して実行されます。</li><li><strong>ほとんどのスクリプトにはこちらがおすすめです</strong></li></ul></li></ul><p>KernelSU では、起動スクリプトは保存場所によって一般スクリプトとモジュールスクリプトの2種類に分けられます:</p><ul><li>一般スクリプト <ul><li><code>/data/adb/post-fs-data.d</code> か <code>/data/adb/service.d</code> に配置されます</li><li>スクリプトが実行可能な状態に設定されている場合にのみ実行されます (<code>chmod +x script.sh</code>)</li><li><code>post-fs-data.d</code> のスクリプトは post-fs-data モードで実行され、<code>service.d</code> のスクリプトは late_start サービスモードで実行されます</li><li>モジュールはインストール時に一般スクリプトを追加するべきではありません</li></ul></li><li>モジュールスクリプト <ul><li>モジュール独自のフォルダに配置されます</li><li>モジュールが有効な場合のみ実行されます</li><li><code>post-fs-data.sh</code> は post-fs-data モードで実行され、<code>service.sh</code> は late_start サービスモードで実行されます</li></ul></li></ul><p>すべてのブートスクリプトは、KernelSU の Busybox <code>ash</code> シェルで「スタンドアロンモード」を有効にした状態で実行されます。</p>`,58),p=[o];function t(c,i,r,d,A,C){return e(),a("div",null,p)}const m=s(l,[["render",t]]);export{y as __pageData,m as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as s,o as e,c as a,O as n}from"./chunks/framework.43781440.js";const y=JSON.parse('{"title":"モジュールのガイド","description":"","frontmatter":{},"headers":[],"relativePath":"ja_JP/guide/module.md","filePath":"ja_JP/guide/module.md"}'),l={name:"ja_JP/guide/module.md"},o=n("",58),p=[o];function t(c,r,i,d,A,C){return e(),a("div",null,p)}const m=s(l,[["render",t]]);export{y as __pageData,m as default};
|
||||
import{_ as s,o as e,c as a,O as n}from"./chunks/framework.43781440.js";const y=JSON.parse('{"title":"モジュールのガイド","description":"","frontmatter":{},"headers":[],"relativePath":"ja_JP/guide/module.md","filePath":"ja_JP/guide/module.md"}'),l={name:"ja_JP/guide/module.md"},o=n("",58),p=[o];function t(c,i,r,d,A,C){return e(),a("div",null,p)}const m=s(l,[["render",t]]);export{y as __pageData,m as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as e,o,c as a,O as s}from"./chunks/framework.43781440.js";const h=JSON.parse('{"title":"Diferença com Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"pt_BR/guide/difference-with-magisk.md","filePath":"pt_BR/guide/difference-with-magisk.md"}'),i={name:"pt_BR/guide/difference-with-magisk.md"},r=s('<h1 id="diferenca-com-magisk" tabindex="-1">Diferença com Magisk <a class="header-anchor" href="#diferenca-com-magisk" aria-label="Permalink to "Diferença com Magisk""></a></h1><p>Embora existam muitas semelhanças entre os módulos KernelSU e os módulos Magisk, existem inevitavelmente algumas diferenças devido aos seus mecanismos de implementação completamente diferentes. Se você deseja que seu módulo seja executado no Magisk e no KernelSU, você deve entender essas diferenças.</p><h2 id="semelhancas" tabindex="-1">Semelhanças <a class="header-anchor" href="#semelhancas" aria-label="Permalink to "Semelhanças""></a></h2><ul><li>Formato de arquivo do módulo: ambos usam o formato zip para organizar os módulos, e o formato dos módulos é quase o mesmo.</li><li>Diretório de instalação do módulo: ambos localizados em <code>/data/adb/modules</code>.</li><li>Sem sistema: ambos suportam a modificação de <code>/system</code> de maneira sem sistema por meio de módulos.</li><li>post-fs-data.sh: o tempo de execução e a semântica são exatamente os mesmos.</li><li>service.sh: o tempo de execução e a semântica são exatamente os mesmos.</li><li>system.prop: completamente o mesmo.</li><li>sepolicy.rule: completamente o mesmo.</li><li>BusyBox: os scripts são executados no BusyBox com o "Modo Autônomo" ativado em ambos os casos.</li></ul><h2 id="diferencas" tabindex="-1">Diferenças <a class="header-anchor" href="#diferencas" aria-label="Permalink to "Diferenças""></a></h2><p>Antes de entender as diferenças, você precisa saber diferenciar se o seu módulo está rodando no KernelSU ou Magisk. Você pode usar a variável de ambiente <code>KSU</code> para diferenciá-la em todos os locais onde você pode executar os scripts do módulo (<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>). No KernelSU, esta variável de ambiente será definida como <code>true</code>.</p><p>Aqui estão algumas diferenças:</p><ul><li>Os módulos KernelSU não podem ser instalados no modo Recovery.</li><li>Os módulos KernelSU não têm suporte integrado para Zygisk (mas você pode usar módulos Zygisk através do <a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a>.</li><li>O método para substituir ou excluir arquivos nos módulos KernelSU é completamente diferente do Magisk. O KernelSU não suporta o método <code>.replace</code>. Em vez disso, você precisa criar um arquivo com o mesmo nome <code>mknod filename c 0 0</code> para excluir o arquivo correspondente.</li><li>Os diretórios do BusyBox são diferentes. O BusyBox integrado no KernelSU está localizado em <code>/data/adb/ksu/bin/busybox</code>, enquanto no Magisk está em <code>/data/adb/magisk/busybox</code>. <strong>Observe que este é um comportamento interno do KernelSU e pode mudar no futuro!</strong></li><li>O KernelSU não suporta arquivos <code>.replace</code>, entretanto, o KernelSU suporta as variáveis <code>REMOVE</code> e <code>REPLACE</code> para remover ou substituir arquivos e pastas.</li><li>O KernelSU adiciona o estágio <code>boot-completed</code> para executar alguns scripts na inicialização concluída.</li><li>O KernelSU adiciona o estágio <code>post-mount</code> para executar alguns scripts após montar overlayfs.</li></ul>',8),t=[r];function d(n,m,c,l,u,p){return o(),a("div",null,t)}const g=e(i,[["render",d]]);export{h as __pageData,g as default};
|
||||
import{_ as e,o,c as a,O as s}from"./chunks/framework.43781440.js";const h=JSON.parse('{"title":"Diferença com Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"pt_BR/guide/difference-with-magisk.md","filePath":"pt_BR/guide/difference-with-magisk.md"}'),i={name:"pt_BR/guide/difference-with-magisk.md"},t=s('<h1 id="diferenca-com-magisk" tabindex="-1">Diferença com Magisk <a class="header-anchor" href="#diferenca-com-magisk" aria-label="Permalink to "Diferença com Magisk""></a></h1><p>Embora existam muitas semelhanças entre os módulos KernelSU e os módulos Magisk, existem inevitavelmente algumas diferenças devido aos seus mecanismos de implementação completamente diferentes. Se você deseja que seu módulo seja executado no Magisk e no KernelSU, você deve entender essas diferenças.</p><h2 id="semelhancas" tabindex="-1">Semelhanças <a class="header-anchor" href="#semelhancas" aria-label="Permalink to "Semelhanças""></a></h2><ul><li>Formato de arquivo do módulo: ambos usam o formato zip para organizar os módulos, e o formato dos módulos é quase o mesmo.</li><li>Diretório de instalação do módulo: ambos localizados em <code>/data/adb/modules</code>.</li><li>Sem sistema: ambos suportam a modificação de <code>/system</code> de maneira sem sistema por meio de módulos.</li><li>post-fs-data.sh: o tempo de execução e a semântica são exatamente os mesmos.</li><li>service.sh: o tempo de execução e a semântica são exatamente os mesmos.</li><li>system.prop: completamente o mesmo.</li><li>sepolicy.rule: completamente o mesmo.</li><li>BusyBox: os scripts são executados no BusyBox com o "Modo Autônomo" ativado em ambos os casos.</li></ul><h2 id="diferencas" tabindex="-1">Diferenças <a class="header-anchor" href="#diferencas" aria-label="Permalink to "Diferenças""></a></h2><p>Antes de entender as diferenças, você precisa saber diferenciar se o seu módulo está rodando no KernelSU ou Magisk. Você pode usar a variável de ambiente <code>KSU</code> para diferenciá-la em todos os locais onde você pode executar os scripts do módulo (<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>). No KernelSU, esta variável de ambiente será definida como <code>true</code>.</p><p>Aqui estão algumas diferenças:</p><ul><li>Os módulos KernelSU não podem ser instalados no modo Recovery.</li><li>Os módulos KernelSU não têm suporte integrado para Zygisk (mas você pode usar módulos Zygisk através do <a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a>.</li><li>O método para substituir ou excluir arquivos nos módulos KernelSU é completamente diferente do Magisk. O KernelSU não suporta o método <code>.replace</code>. Em vez disso, você precisa criar um arquivo com o mesmo nome <code>mknod filename c 0 0</code> para excluir o arquivo correspondente.</li><li>Os diretórios do BusyBox são diferentes. O BusyBox integrado no KernelSU está localizado em <code>/data/adb/ksu/bin/busybox</code>, enquanto no Magisk está em <code>/data/adb/magisk/busybox</code>. <strong>Observe que este é um comportamento interno do KernelSU e pode mudar no futuro!</strong></li><li>O KernelSU não suporta arquivos <code>.replace</code>, entretanto, o KernelSU suporta as variáveis <code>REMOVE</code> e <code>REPLACE</code> para remover ou substituir arquivos e pastas.</li><li>O KernelSU adiciona o estágio <code>boot-completed</code> para executar alguns scripts na inicialização concluída.</li><li>O KernelSU adiciona o estágio <code>post-mount</code> para executar alguns scripts após montar overlayfs.</li></ul>',8),r=[t];function d(n,m,c,l,u,p){return o(),a("div",null,r)}const g=e(i,[["render",d]]);export{h as __pageData,g as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as e,o,c as a,O as s}from"./chunks/framework.43781440.js";const h=JSON.parse('{"title":"Diferença com Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"pt_BR/guide/difference-with-magisk.md","filePath":"pt_BR/guide/difference-with-magisk.md"}'),i={name:"pt_BR/guide/difference-with-magisk.md"},r=s("",8),t=[r];function d(n,m,c,l,u,p){return o(),a("div",null,t)}const g=e(i,[["render",d]]);export{h as __pageData,g as default};
|
||||
import{_ as e,o,c as a,O as s}from"./chunks/framework.43781440.js";const h=JSON.parse('{"title":"Diferença com Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"pt_BR/guide/difference-with-magisk.md","filePath":"pt_BR/guide/difference-with-magisk.md"}'),i={name:"pt_BR/guide/difference-with-magisk.md"},t=s("",8),r=[t];function d(n,m,c,l,u,p){return o(),a("div",null,r)}const g=e(i,[["render",d]]);export{h as __pageData,g as default};
|
||||
File diff suppressed because one or more lines are too long
1
assets/pt_BR_guide_faq.md.e1ef8622.js
Normal file
1
assets/pt_BR_guide_faq.md.e1ef8622.js
Normal file
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{_ as e,o,c as a,O as r}from"./chunks/framework.43781440.js";const k=JSON.parse('{"title":"FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"pt_BR/guide/faq.md","filePath":"pt_BR/guide/faq.md"}'),s={name:"pt_BR/guide/faq.md"},n=r("",33),i=[n];function t(l,d,u,p,m,c){return o(),a("div",null,i)}const g=e(s,[["render",t]]);export{k as __pageData,g as default};
|
||||
import{_ as e,o,c as a,O as r}from"./chunks/framework.43781440.js";const k=JSON.parse('{"title":"FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"pt_BR/guide/faq.md","filePath":"pt_BR/guide/faq.md"}'),s={name:"pt_BR/guide/faq.md"},i=r("",33),n=[i];function t(l,d,u,p,m,c){return o(),a("div",null,n)}const g=e(s,[["render",t]]);export{k as __pageData,g as default};
|
||||
@@ -46,7 +46,7 @@ import{_ as e,o,c as s,O as a}from"./chunks/framework.43781440.js";const v=JSON.
|
||||
<span class="line"><span style="color:#A6ACCD;">│ ├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">│ └── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">DIFERENÇA COM MAGISK</p><p>O KernelSU não possui suporte integrado para o Zygisk, portanto não há conteúdo relacionado ao Zygisk no módulo. No entanto, você pode usar <a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a> para suportar módulos Zygisk. Neste caso, o conteúdo do módulo Zygisk é idêntico ao suportado pelo Magisk.</p></div><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p><code>module.prop</code> é um arquivo de configuração para um módulo. No KernelSU, se um módulo não contiver este arquivo, ele não será reconhecido como um módulo. O formato deste arquivo é o seguinte:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">DIFERENÇA COM MAGISK</p><p>O KernelSU não possui suporte integrado para o Zygisk, portanto não há conteúdo relacionado ao Zygisk no módulo. No entanto, você pode usar <a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a> para suportar módulos Zygisk. Neste caso, o conteúdo do módulo Zygisk é idêntico ao suportado pelo Magisk.</p></div><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p><code>module.prop</code> é um arquivo de configuração para um módulo. No KernelSU, se um módulo não contiver este arquivo, ele não será reconhecido como um módulo. O formato deste arquivo é o seguinte:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">name=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">version=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">versionCode=<int></span></span>
|
||||
@@ -1 +1 @@
|
||||
import{_ as e,o as i,c as a,O as s}from"./chunks/framework.43781440.js";const m=JSON.parse('{"title":"Различия с Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"ru_RU/guide/difference-with-magisk.md","filePath":"ru_RU/guide/difference-with-magisk.md"}'),o={name:"ru_RU/guide/difference-with-magisk.md"},l=s('<h1 id="title" tabindex="-1">Различия с Magisk <a class="header-anchor" href="#title" aria-label="Permalink to "Различия с Magisk {#title}""></a></h1><p>Несмотря на большое количество сходств между модулями KernelSU и модулями Magisk, неизбежно возникают и различия, обусловленные совершенно разными механизмами их реализации. Если вы хотите, чтобы ваш модуль работал как на Magisk, так и на KernelSU, вы должны понимать эти различия.</p><h2 id="similarities" tabindex="-1">Сходства <a class="header-anchor" href="#similarities" aria-label="Permalink to "Сходства {#similarities}""></a></h2><ul><li>Формат файлов модулей: оба используют формат zip для организации модулей, и формат модулей практически одинаков</li><li>Каталог установки модулей: оба расположены в <code>/data/adb/modules</code>.</li><li>Бессистемность: оба поддерживают модификацию /system бессистемным способом через модули</li><li>post-fs-data.sh: время выполнения и семантика полностью совпадают</li><li>service.sh: время выполнения и семантика полностью совпадают</li><li>system.prop: полностью совпадает</li><li>sepolicy.rule: полностью совпадает</li><li>BusyBox: скрипты запускаются в BusyBox с включенным "автономным режимом" в обоих случаях</li></ul><h2 id="differences" tabindex="-1">Различия <a class="header-anchor" href="#differences" aria-label="Permalink to "Различия {#differences}""></a></h2><p>Прежде чем разбираться в различиях, необходимо знать, как отличить, в каком режиме работает ваш модуль - KernelSU или Magisk. Для этого можно использовать переменную окружения <code>KSU</code> во всех местах, где можно запустить скрипты модуля (<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>). В KernelSU эта переменная окружения будет установлена в значение <code>true</code>.</p><p>Вот некоторые отличия:</p><ul><li>Модули KernelSU не могут быть установлены в режиме Recovery.</li><li>Модули KernelSU не имеют встроенной поддержки Zygisk (но вы можете использовать модули Zygisk через <a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a>.</li><li>Метод замены или удаления файлов в модулях KernelSU полностью отличается от Magisk. KernelSU не поддерживает метод <code>.replace</code>. Вместо этого необходимо создать одноименный файл с помощью команды <code>mknod filename c 0 0</code> для удаления соответствующего файла.</li><li>Каталоги для BusyBox отличаются. Встроенный BusyBox в KernelSU находится в каталоге <code>/data/adb/ksu/bin/busybox</code>, а в Magisk - в каталоге <code>/data/adb/magisk/busybox</code>. <strong>Обратите внимание, что это внутреннее поведение KernelSU и в будущем оно может измениться!</strong></li><li>KernelSU не поддерживает файлы <code>.replace</code>; однако KernelSU поддерживает переменные <code>REMOVE</code> и <code>REPLACE</code> для удаления или замены файлов и папок.</li></ul>',8),r=[l];function t(d,c,n,u,h,_){return i(),a("div",null,r)}const p=e(o,[["render",t]]);export{m as __pageData,p as default};
|
||||
import{_ as e,o as i,c as a,O as s}from"./chunks/framework.43781440.js";const m=JSON.parse('{"title":"Различия с Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"ru_RU/guide/difference-with-magisk.md","filePath":"ru_RU/guide/difference-with-magisk.md"}'),o={name:"ru_RU/guide/difference-with-magisk.md"},t=s('<h1 id="title" tabindex="-1">Различия с Magisk <a class="header-anchor" href="#title" aria-label="Permalink to "Различия с Magisk {#title}""></a></h1><p>Несмотря на большое количество сходств между модулями KernelSU и модулями Magisk, неизбежно возникают и различия, обусловленные совершенно разными механизмами их реализации. Если вы хотите, чтобы ваш модуль работал как на Magisk, так и на KernelSU, вы должны понимать эти различия.</p><h2 id="similarities" tabindex="-1">Сходства <a class="header-anchor" href="#similarities" aria-label="Permalink to "Сходства {#similarities}""></a></h2><ul><li>Формат файлов модулей: оба используют формат zip для организации модулей, и формат модулей практически одинаков</li><li>Каталог установки модулей: оба расположены в <code>/data/adb/modules</code>.</li><li>Бессистемность: оба поддерживают модификацию /system бессистемным способом через модули</li><li>post-fs-data.sh: время выполнения и семантика полностью совпадают</li><li>service.sh: время выполнения и семантика полностью совпадают</li><li>system.prop: полностью совпадает</li><li>sepolicy.rule: полностью совпадает</li><li>BusyBox: скрипты запускаются в BusyBox с включенным "автономным режимом" в обоих случаях</li></ul><h2 id="differences" tabindex="-1">Различия <a class="header-anchor" href="#differences" aria-label="Permalink to "Различия {#differences}""></a></h2><p>Прежде чем разбираться в различиях, необходимо знать, как отличить, в каком режиме работает ваш модуль - KernelSU или Magisk. Для этого можно использовать переменную окружения <code>KSU</code> во всех местах, где можно запустить скрипты модуля (<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>). В KernelSU эта переменная окружения будет установлена в значение <code>true</code>.</p><p>Вот некоторые отличия:</p><ul><li>Модули KernelSU не могут быть установлены в режиме Recovery.</li><li>Модули KernelSU не имеют встроенной поддержки Zygisk (но вы можете использовать модули Zygisk через <a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a>.</li><li>Метод замены или удаления файлов в модулях KernelSU полностью отличается от Magisk. KernelSU не поддерживает метод <code>.replace</code>. Вместо этого необходимо создать одноименный файл с помощью команды <code>mknod filename c 0 0</code> для удаления соответствующего файла.</li><li>Каталоги для BusyBox отличаются. Встроенный BusyBox в KernelSU находится в каталоге <code>/data/adb/ksu/bin/busybox</code>, а в Magisk - в каталоге <code>/data/adb/magisk/busybox</code>. <strong>Обратите внимание, что это внутреннее поведение KernelSU и в будущем оно может измениться!</strong></li><li>KernelSU не поддерживает файлы <code>.replace</code>; однако KernelSU поддерживает переменные <code>REMOVE</code> и <code>REPLACE</code> для удаления или замены файлов и папок.</li></ul>',8),l=[t];function r(d,c,n,u,h,_){return i(),a("div",null,l)}const p=e(o,[["render",r]]);export{m as __pageData,p as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as e,o as i,c as a,O as s}from"./chunks/framework.43781440.js";const m=JSON.parse('{"title":"Различия с Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"ru_RU/guide/difference-with-magisk.md","filePath":"ru_RU/guide/difference-with-magisk.md"}'),o={name:"ru_RU/guide/difference-with-magisk.md"},l=s("",8),r=[l];function t(d,c,n,u,h,_){return i(),a("div",null,r)}const p=e(o,[["render",t]]);export{m as __pageData,p as default};
|
||||
import{_ as e,o as i,c as a,O as s}from"./chunks/framework.43781440.js";const m=JSON.parse('{"title":"Различия с Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"ru_RU/guide/difference-with-magisk.md","filePath":"ru_RU/guide/difference-with-magisk.md"}'),o={name:"ru_RU/guide/difference-with-magisk.md"},t=s("",8),l=[t];function r(d,c,n,u,h,_){return i(),a("div",null,l)}const p=e(o,[["render",r]]);export{m as __pageData,p as default};
|
||||
File diff suppressed because one or more lines are too long
1
assets/ru_RU_guide_faq.md.e0aa7004.js
Normal file
1
assets/ru_RU_guide_faq.md.e0aa7004.js
Normal file
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{_ as e,o as a,c as r,O as n}from"./chunks/framework.43781440.js";const m=JSON.parse('{"title":"FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"ru_RU/guide/faq.md","filePath":"ru_RU/guide/faq.md"}'),l={name:"ru_RU/guide/faq.md"},o=n("",33),i=[o];function t(s,d,h,u,k,c){return a(),r("div",null,i)}const K=e(l,[["render",t]]);export{m as __pageData,K as default};
|
||||
import{_ as e,o as a,c as r,O as n}from"./chunks/framework.43781440.js";const m=JSON.parse('{"title":"FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"ru_RU/guide/faq.md","filePath":"ru_RU/guide/faq.md"}'),l={name:"ru_RU/guide/faq.md"},o=n("",33),t=[o];function i(s,d,h,u,k,c){return a(),r("div",null,t)}const g=e(l,[["render",i]]);export{m as __pageData,g as default};
|
||||
@@ -44,7 +44,7 @@ import{_ as s,o as e,c as a,O as n}from"./chunks/framework.43781440.js";const C=
|
||||
<span class="line"><span style="color:#A6ACCD;">│ ├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">│ └── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">различия с Magisk</p><p>KernelSU не имеет встроенной поддержки Zygisk, поэтому в модуле нет содержимого, связанного с Zygisk. Однако для поддержки модулей Zygisk можно использовать <a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a>. В этом случае содержимое модуля Zygisk идентично содержимому, поддерживаемому Magisk.</p></div><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p>module.prop - это конфигурационный файл модуля. В KernelSU, если модуль не содержит этого файла, он не будет распознан как модуль. Формат этого файла следующий:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">различия с Magisk</p><p>KernelSU не имеет встроенной поддержки Zygisk, поэтому в модуле нет содержимого, связанного с Zygisk. Однако для поддержки модулей Zygisk можно использовать <a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a>. В этом случае содержимое модуля Zygisk идентично содержимому, поддерживаемому Magisk.</p></div><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p>module.prop - это конфигурационный файл модуля. В KernelSU, если модуль не содержит этого файла, он не будет распознан как модуль. Формат этого файла следующий:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">name=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">version=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">versionCode=<int></span></span>
|
||||
@@ -1 +1 @@
|
||||
import{_ as n,o as i,c as e,O as t}from"./chunks/framework.43781440.js";const k=JSON.parse('{"title":"Sự khác biệt với Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"vi_VN/guide/difference-with-magisk.md","filePath":"vi_VN/guide/difference-with-magisk.md"}'),c={name:"vi_VN/guide/difference-with-magisk.md"},h=t('<h1 id="su-khac-biet-voi-magisk" tabindex="-1">Sự khác biệt với Magisk <a class="header-anchor" href="#su-khac-biet-voi-magisk" aria-label="Permalink to "Sự khác biệt với Magisk""></a></h1><p>Mặc dù có nhiều điểm tương đồng giữa mô-đun KernelSU và mô-đun Magisk nhưng chắc chắn vẫn có một số khác biệt do cơ chế triển khai hoàn toàn khác nhau của chúng. Nếu muốn mô-đun của mình chạy trên cả Magisk và KernelSU, bạn phải hiểu những khác biệt này.</p><h2 id="điem-tuong-đong" tabindex="-1">Điểm tương đồng <a class="header-anchor" href="#điem-tuong-đong" aria-label="Permalink to "Điểm tương đồng""></a></h2><ul><li>Định dạng file mô-đun: đều sử dụng định dạng zip để sắp xếp các mô-đun và định dạng của các mô-đun gần như giống nhau</li><li>Thư mục cài đặt mô-đun: cả hai đều nằm trong <code>/data/adb/modules</code></li><li>systemless: cả hai đều hỗ trợ sửa đổi /system theo cách không có hệ thống thông qua các mô-đun</li><li>post-fs-data.sh: thời gian thực hiện và ngữ nghĩa hoàn toàn giống nhau</li><li>service.sh: thời gian thực hiện và ngữ nghĩa hoàn toàn giống nhau</li><li>system.prop: hoàn toàn giống nhau</li><li>sepolicy.rule: hoàn toàn giống nhau</li><li>BusyBox: các tập lệnh được chạy trong BusyBox với "standalone mode" được bật trong cả hai trường hợp</li></ul><h2 id="điem-khac-biet" tabindex="-1">Điểm khác biệt <a class="header-anchor" href="#điem-khac-biet" aria-label="Permalink to "Điểm khác biệt""></a></h2><p>Trước khi hiểu sự khác biệt, bạn cần biết cách phân biệt mô-đun của bạn đang chạy trong KernelSU hay Magisk. Bạn có thể sử dụng biến môi trường <code>KSU</code> để phân biệt nó ở tất cả những nơi bạn có thể chạy tập lệnh mô-đun (<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>). Trong KernelSU, biến môi trường này sẽ được đặt thành <code>true</code>.</p><p>Dưới đây là một số khác biệt:</p><ul><li>Không thể cài đặt các mô-đun KernelSU ở chế độ Recovery.</li><li>Các mô-đun KernelSU không có hỗ trợ tích hợp cho Zygisk (nhưng bạn có thể sử dụng các mô-đun Zygisk thông qua <a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a>.</li><li>Phương pháp thay thế hoặc xóa file trong module KernelSU hoàn toàn khác với Magisk. KernelSU không hỗ trợ phương thức <code>.replace</code>. Thay vào đó, bạn cần tạo một file cùng tên với <code>mknod filename c 0 0</code> để xóa file tương ứng.</li><li>Các thư mục của BusyBox khác nhau. BusyBox tích hợp trong KernelSU nằm ở <code>/data/adb/ksu/bin/busybox</code>, trong khi ở Magisk nó nằm ở <code>/data/adb/magisk/busybox</code>. <strong>Lưu ý rằng đây là hoạt động nội bộ của KernelSU và có thể thay đổi trong tương lai!</strong></li><li>KernelSU không hỗ trợ file <code>.replace</code>; tuy nhiên, KernelSU hỗ trợ biến <code>REMOVE</code> và <code>REPLACE</code> để xóa hoặc thay thế các tệp và thư mục.</li><li>KernelSU thêm giai đoạn <code>boot-completed</code> để chạy một số script khi khởi động xong.</li><li>KernelSU thêm giai đoạn <code>post-mount</code> để chạy một số tập lệnh sau khi gắn overlayfs</li></ul>',8),a=[h];function o(g,s,l,r,d,u){return i(),e("div",null,a)}const b=n(c,[["render",o]]);export{k as __pageData,b as default};
|
||||
import{_ as n,o as i,c as e,O as t}from"./chunks/framework.43781440.js";const k=JSON.parse('{"title":"Sự khác biệt với Magisk","description":"","frontmatter":{},"headers":[],"relativePath":"vi_VN/guide/difference-with-magisk.md","filePath":"vi_VN/guide/difference-with-magisk.md"}'),c={name:"vi_VN/guide/difference-with-magisk.md"},h=t('<h1 id="su-khac-biet-voi-magisk" tabindex="-1">Sự khác biệt với Magisk <a class="header-anchor" href="#su-khac-biet-voi-magisk" aria-label="Permalink to "Sự khác biệt với Magisk""></a></h1><p>Mặc dù có nhiều điểm tương đồng giữa mô-đun KernelSU và mô-đun Magisk nhưng chắc chắn vẫn có một số khác biệt do cơ chế triển khai hoàn toàn khác nhau của chúng. Nếu muốn mô-đun của mình chạy trên cả Magisk và KernelSU, bạn phải hiểu những khác biệt này.</p><h2 id="điem-tuong-đong" tabindex="-1">Điểm tương đồng <a class="header-anchor" href="#điem-tuong-đong" aria-label="Permalink to "Điểm tương đồng""></a></h2><ul><li>Định dạng file mô-đun: đều sử dụng định dạng zip để sắp xếp các mô-đun và định dạng của các mô-đun gần như giống nhau</li><li>Thư mục cài đặt mô-đun: cả hai đều nằm trong <code>/data/adb/modules</code></li><li>systemless: cả hai đều hỗ trợ sửa đổi /system theo cách không có hệ thống thông qua các mô-đun</li><li>post-fs-data.sh: thời gian thực hiện và ngữ nghĩa hoàn toàn giống nhau</li><li>service.sh: thời gian thực hiện và ngữ nghĩa hoàn toàn giống nhau</li><li>system.prop: hoàn toàn giống nhau</li><li>sepolicy.rule: hoàn toàn giống nhau</li><li>BusyBox: các tập lệnh được chạy trong BusyBox với "standalone mode" được bật trong cả hai trường hợp</li></ul><h2 id="điem-khac-biet" tabindex="-1">Điểm khác biệt <a class="header-anchor" href="#điem-khac-biet" aria-label="Permalink to "Điểm khác biệt""></a></h2><p>Trước khi hiểu sự khác biệt, bạn cần biết cách phân biệt mô-đun của bạn đang chạy trong KernelSU hay Magisk. Bạn có thể sử dụng biến môi trường <code>KSU</code> để phân biệt nó ở tất cả những nơi bạn có thể chạy tập lệnh mô-đun (<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>). Trong KernelSU, biến môi trường này sẽ được đặt thành <code>true</code>.</p><p>Dưới đây là một số khác biệt:</p><ul><li>Không thể cài đặt các mô-đun KernelSU ở chế độ Recovery.</li><li>Các mô-đun KernelSU không có hỗ trợ tích hợp cho Zygisk (nhưng bạn có thể sử dụng các mô-đun Zygisk thông qua <a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a>.</li><li>Phương pháp thay thế hoặc xóa file trong module KernelSU hoàn toàn khác với Magisk. KernelSU không hỗ trợ phương thức <code>.replace</code>. Thay vào đó, bạn cần tạo một file cùng tên với <code>mknod filename c 0 0</code> để xóa file tương ứng.</li><li>Các thư mục của BusyBox khác nhau. BusyBox tích hợp trong KernelSU nằm ở <code>/data/adb/ksu/bin/busybox</code>, trong khi ở Magisk nó nằm ở <code>/data/adb/magisk/busybox</code>. <strong>Lưu ý rằng đây là hoạt động nội bộ của KernelSU và có thể thay đổi trong tương lai!</strong></li><li>KernelSU không hỗ trợ file <code>.replace</code>; tuy nhiên, KernelSU hỗ trợ biến <code>REMOVE</code> và <code>REPLACE</code> để xóa hoặc thay thế các tệp và thư mục.</li><li>KernelSU thêm giai đoạn <code>boot-completed</code> để chạy một số script khi khởi động xong.</li><li>KernelSU thêm giai đoạn <code>post-mount</code> để chạy một số tập lệnh sau khi gắn overlayfs</li></ul>',8),a=[h];function o(g,s,l,r,d,u){return i(),e("div",null,a)}const b=n(c,[["render",o]]);export{k as __pageData,b as default};
|
||||
1
assets/vi_VN_guide_faq.md.e9230071.js
Normal file
1
assets/vi_VN_guide_faq.md.e9230071.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -46,7 +46,7 @@ import{_ as n,o as s,c as t,O as c}from"./chunks/framework.43781440.js";const m=
|
||||
<span class="line"><span style="color:#A6ACCD;">│ ├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">│ └── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">sự khác biệt với Magisk</p><p>KernelSU không có hỗ trợ tích hợp cho Zygisk nên không có nội dung liên quan đến Zygisk trong mô-đun. Tuy nhiên, bạn có thể sử dụng <a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a> để hỗ trợ các mô-đun Zygisk. Trong trường hợp này, nội dung của mô-đun Zygisk giống hệt với nội dung được Magisk hỗ trợ.</p></div><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p>module.prop là tệp cấu hình cho mô-đun. Trong KernelSU, nếu một mô-đun không chứa tệp này, nó sẽ không được nhận dạng là mô-đun. Định dạng của tập tin này như sau:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">sự khác biệt với Magisk</p><p>KernelSU không có hỗ trợ tích hợp cho Zygisk nên không có nội dung liên quan đến Zygisk trong mô-đun. Tuy nhiên, bạn có thể sử dụng <a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a> để hỗ trợ các mô-đun Zygisk. Trong trường hợp này, nội dung của mô-đun Zygisk giống hệt với nội dung được Magisk hỗ trợ.</p></div><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p>module.prop là tệp cấu hình cho mô-đun. Trong KernelSU, nếu một mô-đun không chứa tệp này, nó sẽ không được nhận dạng là mô-đun. Định dạng của tập tin này như sau:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">name=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">version=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">versionCode=<int></span></span>
|
||||
@@ -1 +1 @@
|
||||
import{_ as e,o as i,c as o,O as s}from"./chunks/framework.43781440.js";const u=JSON.parse('{"title":"KernelSU 模块与 Magisk 的差异","description":"","frontmatter":{},"headers":[],"relativePath":"zh_CN/guide/difference-with-magisk.md","filePath":"zh_CN/guide/difference-with-magisk.md"}'),l={name:"zh_CN/guide/difference-with-magisk.md"},a=s('<h1 id="title" tabindex="-1">KernelSU 模块与 Magisk 的差异 <a class="header-anchor" href="#title" aria-label="Permalink to "KernelSU 模块与 Magisk 的差异 {#title}""></a></h1><p>虽然 KernelSU 模块与 Magisk 模块有很多相似之处,但由于它们的实现机制完全不同,因此不可避免地会有一些差异;如果你希望你的模块能同时在 Magisk 与 KernelSU 中运行,那么你必须了解这些差异。</p><h2 id="similarities" tabindex="-1">相同之处 <a class="header-anchor" href="#similarities" aria-label="Permalink to "相同之处 {#similarities}""></a></h2><ul><li>模块文件格式: 都以 zip 的方式组织模块,并且模块的格式几乎相同</li><li>模块安装目录: 都在 <code>/data/adb/modules</code></li><li>systemless: 都支持通过模块的形式以 systemless 修改 /system</li><li><code>post-fs-data.sh</code>: 执行时机完全一致,语义也完全一致</li><li><code>service.sh</code>: 执行时机完全一致,语义也完全一致</li><li><code>system.prop</code>: 完全相同</li><li><code>sepolicy.rule</code>: 完全相同</li><li>BusyBox:脚本都在 BusyBox 中以“独立模式”运行</li></ul><h2 id="differences" tabindex="-1">不同之处 <a class="header-anchor" href="#differences" aria-label="Permalink to "不同之处 {#differences}""></a></h2><p>在了解不同之处之前,你需要知道如何区分你的模块是运行在 KernelSU 还是运行在 Magisk 之中;在所有你可以运行模块脚本的地方(<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>),你都可以通过环境变量<code>KSU</code> 来区分,在 KernelSU 中,这个环境变量将被设置为 <code>true</code>。</p><p>以下是一些不同之处:</p><ol><li>KernelSU 的模块不支持在 Recovery 中安装。</li><li>KernelSU 的模块没有内置的 Zygisk 支持(但你可以通过 <a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a> 来使用 Zygisk 模块)。</li><li>KernelSU 模块替换或者删除文件与 Magisk 完全不同。KernelSU 不支持 <code>.replace</code> 方式,相反,你需要通过 <code>mknod filename c 0 0</code> 创建同名文件夹来删除对应文件。</li><li>BusyBox 的目录不同;KernelSU 内置的 BusyBox 在 <code>/data/adb/ksu/bin/busybox</code> 而 Magisk 在 <code>/data/adb/magisk/busybox</code>;<strong>注意此为 KernelSU 内部行为,未来可能会更改!</strong></li><li>KernelSU 不支持 <code>.replace</code> 文件;但 KernelSU 支持 <code>REPLACE</code> 和 <code>REMOVE</code> 变量。</li><li>KernelSU 新增了一种脚本 <code>boot-completed.sh</code>,以便在 Android 系统启动后运行某些任务。</li><li>KernelSU 新增了一种脚本 <code>post-mount.sh</code>,以便在 Overlayfs 挂载后运行某些任务。</li></ol>',8),d=[a];function r(t,c,n,h,f,_){return i(),o("div",null,d)}const p=e(l,[["render",r]]);export{u as __pageData,p as default};
|
||||
import{_ as e,o as i,c as o,O as s}from"./chunks/framework.43781440.js";const u=JSON.parse('{"title":"KernelSU 模块与 Magisk 的差异","description":"","frontmatter":{},"headers":[],"relativePath":"zh_CN/guide/difference-with-magisk.md","filePath":"zh_CN/guide/difference-with-magisk.md"}'),a={name:"zh_CN/guide/difference-with-magisk.md"},l=s('<h1 id="title" tabindex="-1">KernelSU 模块与 Magisk 的差异 <a class="header-anchor" href="#title" aria-label="Permalink to "KernelSU 模块与 Magisk 的差异 {#title}""></a></h1><p>虽然 KernelSU 模块与 Magisk 模块有很多相似之处,但由于它们的实现机制完全不同,因此不可避免地会有一些差异;如果你希望你的模块能同时在 Magisk 与 KernelSU 中运行,那么你必须了解这些差异。</p><h2 id="similarities" tabindex="-1">相同之处 <a class="header-anchor" href="#similarities" aria-label="Permalink to "相同之处 {#similarities}""></a></h2><ul><li>模块文件格式: 都以 zip 的方式组织模块,并且模块的格式几乎相同</li><li>模块安装目录: 都在 <code>/data/adb/modules</code></li><li>systemless: 都支持通过模块的形式以 systemless 修改 /system</li><li><code>post-fs-data.sh</code>: 执行时机完全一致,语义也完全一致</li><li><code>service.sh</code>: 执行时机完全一致,语义也完全一致</li><li><code>system.prop</code>: 完全相同</li><li><code>sepolicy.rule</code>: 完全相同</li><li>BusyBox:脚本都在 BusyBox 中以“独立模式”运行</li></ul><h2 id="differences" tabindex="-1">不同之处 <a class="header-anchor" href="#differences" aria-label="Permalink to "不同之处 {#differences}""></a></h2><p>在了解不同之处之前,你需要知道如何区分你的模块是运行在 KernelSU 还是运行在 Magisk 之中;在所有你可以运行模块脚本的地方(<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>),你都可以通过环境变量<code>KSU</code> 来区分,在 KernelSU 中,这个环境变量将被设置为 <code>true</code>。</p><p>以下是一些不同之处:</p><ol><li>KernelSU 的模块不支持在 Recovery 中安装。</li><li>KernelSU 的模块没有内置的 Zygisk 支持(但你可以通过 <a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a> 来使用 Zygisk 模块)。</li><li>KernelSU 模块替换或者删除文件与 Magisk 完全不同。KernelSU 不支持 <code>.replace</code> 方式,相反,你需要通过 <code>mknod filename c 0 0</code> 创建同名文件夹来删除对应文件。</li><li>BusyBox 的目录不同;KernelSU 内置的 BusyBox 在 <code>/data/adb/ksu/bin/busybox</code> 而 Magisk 在 <code>/data/adb/magisk/busybox</code>;<strong>注意此为 KernelSU 内部行为,未来可能会更改!</strong></li><li>KernelSU 不支持 <code>.replace</code> 文件;但 KernelSU 支持 <code>REPLACE</code> 和 <code>REMOVE</code> 变量。</li><li>KernelSU 新增了一种脚本 <code>boot-completed.sh</code>,以便在 Android 系统启动后运行某些任务。</li><li>KernelSU 新增了一种脚本 <code>post-mount.sh</code>,以便在 Overlayfs 挂载后运行某些任务。</li></ol>',8),d=[l];function t(r,c,n,h,f,_){return i(),o("div",null,d)}const p=e(a,[["render",t]]);export{u as __pageData,p as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as e,o as i,c as o,O as s}from"./chunks/framework.43781440.js";const u=JSON.parse('{"title":"KernelSU 模块与 Magisk 的差异","description":"","frontmatter":{},"headers":[],"relativePath":"zh_CN/guide/difference-with-magisk.md","filePath":"zh_CN/guide/difference-with-magisk.md"}'),l={name:"zh_CN/guide/difference-with-magisk.md"},a=s("",8),d=[a];function r(t,c,n,h,f,_){return i(),o("div",null,d)}const p=e(l,[["render",r]]);export{u as __pageData,p as default};
|
||||
import{_ as e,o as i,c as o,O as s}from"./chunks/framework.43781440.js";const u=JSON.parse('{"title":"KernelSU 模块与 Magisk 的差异","description":"","frontmatter":{},"headers":[],"relativePath":"zh_CN/guide/difference-with-magisk.md","filePath":"zh_CN/guide/difference-with-magisk.md"}'),a={name:"zh_CN/guide/difference-with-magisk.md"},l=s("",8),d=[l];function t(r,c,n,h,f,_){return i(),o("div",null,d)}const p=e(a,[["render",t]]);export{u as __pageData,p as default};
|
||||
File diff suppressed because one or more lines are too long
1
assets/zh_CN_guide_faq.md.30eb8f8e.js
Normal file
1
assets/zh_CN_guide_faq.md.30eb8f8e.js
Normal file
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{_ as e,o as a,c as r,O as n}from"./chunks/framework.43781440.js";const m=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"zh_CN/guide/faq.md","filePath":"zh_CN/guide/faq.md"}'),o={name:"zh_CN/guide/faq.md"},l=n("",33),t=[l];function i(s,d,h,u,k,c){return a(),r("div",null,t)}const K=e(o,[["render",i]]);export{m as __pageData,K as default};
|
||||
import{_ as e,o as a,c as r,O as n}from"./chunks/framework.43781440.js";const m=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"zh_CN/guide/faq.md","filePath":"zh_CN/guide/faq.md"}'),o={name:"zh_CN/guide/faq.md"},l=n("",33),t=[l];function i(s,d,h,u,k,c){return a(),r("div",null,t)}const g=e(o,[["render",i]]);export{m as __pageData,g as default};
|
||||
@@ -46,7 +46,7 @@ import{_ as s,o as e,c as a,O as l}from"./chunks/framework.43781440.js";const C=
|
||||
<span class="line"><span style="color:#A6ACCD;">│ ├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">│ └── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">与 Magisk 的差异</p><p>KernelSU 没有内置的针对 Zygisk 的支持,因此模块中没有 Zygisk 相关的内容,但你可以通过 <a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a> 来支持 Zygisk 模块,此时 Zygisk 模块的内容与 Magisk 所支持的 Zygisk 是完全相同的。</p></div><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p>module.prop 是一个模块的配置文件,在 KernelSU 中如果模块中不包含此文件,那么它将不被认为是一个模块;此文件的格式如下:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">与 Magisk 的差异</p><p>KernelSU 没有内置的针对 Zygisk 的支持,因此模块中没有 Zygisk 相关的内容,但你可以通过 <a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a> 来支持 Zygisk 模块,此时 Zygisk 模块的内容与 Magisk 所支持的 Zygisk 是完全相同的。</p></div><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p>module.prop 是一个模块的配置文件,在 KernelSU 中如果模块中不包含此文件,那么它将不被认为是一个模块;此文件的格式如下:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">name=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">version=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">versionCode=<int></span></span>
|
||||
@@ -1 +1 @@
|
||||
import{_ as e,o as i,c as a,O as o}from"./chunks/framework.43781440.js";const u=JSON.parse('{"title":"KernelSU 模組與 Magisk 的差異","description":"","frontmatter":{},"headers":[],"relativePath":"zh_TW/guide/difference-with-magisk.md","filePath":"zh_TW/guide/difference-with-magisk.md"}'),s={name:"zh_TW/guide/difference-with-magisk.md"},l=o('<h1 id="title" tabindex="-1">KernelSU 模組與 Magisk 的差異 <a class="header-anchor" href="#title" aria-label="Permalink to "KernelSU 模組與 Magisk 的差異 {#title}""></a></h1><p>儘管 KernelSU 模組和 Magisk 模組之間有許多相似之處,但由於它們完全不同的實作機制,不可避免地存在一些差異;如果您想讓您的模組同時在 Magisk 和 KernelSU 上運作,那麼您必須瞭解這些差異。</p><h2 id="similarities" tabindex="-1">相同之處 <a class="header-anchor" href="#similarities" aria-label="Permalink to "相同之處 {#similarities}""></a></h2><ul><li>模組檔案格式:都以 Zip 的格式組織模組,並且模組的格式幾乎相同</li><li>模組安裝目錄:都位於 <code>/data/adb/modules</code></li><li>Systemless:都支援透過模組的形式以 systemless 修改 /system</li><li><code>post-fs-data.sh</code>:執行時間和語義完全相同</li><li><code>service.sh</code>:執行時間和語義完全相同</li><li><code>system.prop</code>:完全相同</li><li><code>sepolicy.rule</code>:完全相同</li><li>BusyBox:指令碼在 BusyBox 中以「獨立模式」執行</li></ul><h2 id="differences" tabindex="-1">不同之處 <a class="header-anchor" href="#differences" aria-label="Permalink to "不同之處 {#differences}""></a></h2><p>在瞭解不同之處之前,您需要知道如何區分您的模組是在 KernelSU 還是 Magisk 中執行;在所有可以執行模組指令碼的位置 (<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>),您都可以使用環境變數 <code>KSU</code> 來區分,在 KernelSU 中,這個環境變數將被設定為 <code>true</code>。</p><p>以下是一些不同之處:</p><ol><li>KernelSU 的模組不支援在 Recovery 中安裝。</li><li>KernelSU 的模組沒有內建的 Zygisk 支援 (但您可以透過 <a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a> 來使用 Zygisk 模組)。</li><li>KernelSU 模組取代或刪除檔案與 Magisk 完全不同。KernelSU 不支援 <code>.replace</code> 方法,相反,您需要透過 <code>mknod filename c 0 0</code> 建立相同名稱的資料夾以刪除對應檔案。</li><li>BusyBox 的目錄不同;KernelSU 內建的 BusyBox 在 <code>/data/adb/ksu/bin/busybox</code> 而 Magisk 在 <code>/data/adb/magisk/busybox</code>;<strong>注意此為 KernelSU 內部行為,未來可能會變更!</strong></li><li>KernelSU 不支援 <code>.replace</code> 檔案;但 KernelSU 支援 <code>REPLACE</code> 和 <code>REMOVE</code> 變數以移除或取代檔案 (資料夾)。</li></ol>',8),r=[l];function t(d,c,n,h,_,f){return i(),a("div",null,r)}const p=e(s,[["render",t]]);export{u as __pageData,p as default};
|
||||
import{_ as e,o as i,c as a,O as o}from"./chunks/framework.43781440.js";const u=JSON.parse('{"title":"KernelSU 模組與 Magisk 的差異","description":"","frontmatter":{},"headers":[],"relativePath":"zh_TW/guide/difference-with-magisk.md","filePath":"zh_TW/guide/difference-with-magisk.md"}'),s={name:"zh_TW/guide/difference-with-magisk.md"},l=o('<h1 id="title" tabindex="-1">KernelSU 模組與 Magisk 的差異 <a class="header-anchor" href="#title" aria-label="Permalink to "KernelSU 模組與 Magisk 的差異 {#title}""></a></h1><p>儘管 KernelSU 模組和 Magisk 模組之間有許多相似之處,但由於它們完全不同的實作機制,不可避免地存在一些差異;如果您想讓您的模組同時在 Magisk 和 KernelSU 上運作,那麼您必須瞭解這些差異。</p><h2 id="similarities" tabindex="-1">相同之處 <a class="header-anchor" href="#similarities" aria-label="Permalink to "相同之處 {#similarities}""></a></h2><ul><li>模組檔案格式:都以 Zip 的格式組織模組,並且模組的格式幾乎相同</li><li>模組安裝目錄:都位於 <code>/data/adb/modules</code></li><li>Systemless:都支援透過模組的形式以 systemless 修改 /system</li><li><code>post-fs-data.sh</code>:執行時間和語義完全相同</li><li><code>service.sh</code>:執行時間和語義完全相同</li><li><code>system.prop</code>:完全相同</li><li><code>sepolicy.rule</code>:完全相同</li><li>BusyBox:指令碼在 BusyBox 中以「獨立模式」執行</li></ul><h2 id="differences" tabindex="-1">不同之處 <a class="header-anchor" href="#differences" aria-label="Permalink to "不同之處 {#differences}""></a></h2><p>在瞭解不同之處之前,您需要知道如何區分您的模組是在 KernelSU 還是 Magisk 中執行;在所有可以執行模組指令碼的位置 (<code>customize.sh</code>, <code>post-fs-data.sh</code>, <code>service.sh</code>),您都可以使用環境變數 <code>KSU</code> 來區分,在 KernelSU 中,這個環境變數將被設定為 <code>true</code>。</p><p>以下是一些不同之處:</p><ol><li>KernelSU 的模組不支援在 Recovery 中安裝。</li><li>KernelSU 的模組沒有內建的 Zygisk 支援 (但您可以透過 <a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a> 來使用 Zygisk 模組)。</li><li>KernelSU 模組取代或刪除檔案與 Magisk 完全不同。KernelSU 不支援 <code>.replace</code> 方法,相反,您需要透過 <code>mknod filename c 0 0</code> 建立相同名稱的資料夾以刪除對應檔案。</li><li>BusyBox 的目錄不同;KernelSU 內建的 BusyBox 在 <code>/data/adb/ksu/bin/busybox</code> 而 Magisk 在 <code>/data/adb/magisk/busybox</code>;<strong>注意此為 KernelSU 內部行為,未來可能會變更!</strong></li><li>KernelSU 不支援 <code>.replace</code> 檔案;但 KernelSU 支援 <code>REPLACE</code> 和 <code>REMOVE</code> 變數以移除或取代檔案 (資料夾)。</li></ol>',8),t=[l];function r(d,c,n,h,_,f){return i(),a("div",null,t)}const p=e(s,[["render",r]]);export{u as __pageData,p as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as e,o as i,c as a,O as o}from"./chunks/framework.43781440.js";const u=JSON.parse('{"title":"KernelSU 模組與 Magisk 的差異","description":"","frontmatter":{},"headers":[],"relativePath":"zh_TW/guide/difference-with-magisk.md","filePath":"zh_TW/guide/difference-with-magisk.md"}'),s={name:"zh_TW/guide/difference-with-magisk.md"},l=o("",8),r=[l];function t(d,c,n,h,_,f){return i(),a("div",null,r)}const p=e(s,[["render",t]]);export{u as __pageData,p as default};
|
||||
import{_ as e,o as i,c as a,O as o}from"./chunks/framework.43781440.js";const u=JSON.parse('{"title":"KernelSU 模組與 Magisk 的差異","description":"","frontmatter":{},"headers":[],"relativePath":"zh_TW/guide/difference-with-magisk.md","filePath":"zh_TW/guide/difference-with-magisk.md"}'),s={name:"zh_TW/guide/difference-with-magisk.md"},l=o("",8),t=[l];function r(d,c,n,h,_,f){return i(),a("div",null,t)}const p=e(s,[["render",r]]);export{u as __pageData,p as default};
|
||||
1
assets/zh_TW_guide_faq.md.bea0a7af.js
Normal file
1
assets/zh_TW_guide_faq.md.bea0a7af.js
Normal file
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{_ as e,o as a,c as r,O as n}from"./chunks/framework.43781440.js";const m=JSON.parse('{"title":"常見問題","description":"","frontmatter":{},"headers":[],"relativePath":"zh_TW/guide/faq.md","filePath":"zh_TW/guide/faq.md"}'),o={name:"zh_TW/guide/faq.md"},l=n("",33),t=[l];function i(s,d,h,u,k,c){return a(),r("div",null,t)}const K=e(o,[["render",i]]);export{m as __pageData,K as default};
|
||||
import{_ as e,o as a,c as r,O as n}from"./chunks/framework.43781440.js";const m=JSON.parse('{"title":"常見問題","description":"","frontmatter":{},"headers":[],"relativePath":"zh_TW/guide/faq.md","filePath":"zh_TW/guide/faq.md"}'),o={name:"zh_TW/guide/faq.md"},l=n("",33),t=[l];function i(s,d,h,u,k,c){return a(),r("div",null,t)}const g=e(o,[["render",i]]);export{m as __pageData,g as default};
|
||||
File diff suppressed because one or more lines are too long
@@ -44,7 +44,7 @@ import{_ as s,o as e,c as a,O as l}from"./chunks/framework.43781440.js";const C=
|
||||
<span class="line"><span style="color:#A6ACCD;">│ ├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">│ └── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">與 Magisk 的差異</p><p>KernelSU 沒有內建的針對 Zygisk 的支援,因此模組中沒有與 Zygisk 相關的內容,但您可以透過 <a href="https://github.com/Dr-TSNG/ZygiskOnKernelSU" target="_blank" rel="noreferrer">ZygiskOnKernelSU</a> 以支援 Zygisk 模組,此時 Zygisk 模組的內容與 Magisk 所支援的 Zygisk 完全相同。</p></div><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p>module.prop 是一個模組的組態檔案,在 KernelSU 中如果模組中不包含這個檔案,那麼它將不被認為是一個模組;這個檔案的格式如下:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">├── .</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">與 Magisk 的差異</p><p>KernelSU 沒有內建的針對 Zygisk 的支援,因此模組中沒有與 Zygisk 相關的內容,但您可以透過 <a href="https://github.com/Dr-TSNG/ZygiskNext" target="_blank" rel="noreferrer">ZygiskNext</a> 以支援 Zygisk 模組,此時 Zygisk 模組的內容與 Magisk 所支援的 Zygisk 完全相同。</p></div><h3 id="module-prop" tabindex="-1">module.prop <a class="header-anchor" href="#module-prop" aria-label="Permalink to "module.prop""></a></h3><p>module.prop 是一個模組的組態檔案,在 KernelSU 中如果模組中不包含這個檔案,那麼它將不被認為是一個模組;這個檔案的格式如下:</p><div class="language-txt"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">id=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">name=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">version=<string></span></span>
|
||||
<span class="line"><span style="color:#A6ACCD;">versionCode=<int></span></span>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"zh_cn_guide_faq.md":"0939b2cb","zh_cn_guide_how-to-build.md":"f4f2a6dd","zh_cn_guide_how-to-integrate-for-non-gki.md":"891eeb81","zh_cn_guide_module.md":"66de1042","zh_cn_guide_rescue-from-bootloop.md":"3d907e03","zh_cn_guide_unofficially-support-devices.md":"d0fdf38a","zh_cn_guide_what-is-kernelsu.md":"cdc98b69","zh_cn_index.md":"7dc4034d","zh_tw_guide_difference-with-magisk.md":"4315a5ce","zh_tw_guide_faq.md":"c68533d0","zh_tw_guide_hidden-features.md":"f0bea9ae","zh_tw_guide_how-to-build.md":"ef330d07","zh_tw_guide_installation.md":"0f23d3bf","zh_tw_guide_module.md":"c6111b20","zh_tw_guide_rescue-from-bootloop.md":"db20cf2e","zh_tw_guide_unofficially-support-devices.md":"3dbb89ec","guide_how-to-build.md":"cf9f2c40","zh_tw_guide_what-is-kernelsu.md":"a2ba0439","zh_tw_index.md":"896578f0","zh_cn_guide_hidden-features.md":"cdd5624f","zh_tw_guide_how-to-integrate-for-non-gki.md":"e3487c4d","guide_app-profile.md":"9faae288","pt_br_guide_rescue-from-bootloop.md":"f4a13bcd","pt_br_guide_unofficially-support-devices.md":"a0a683e6","pt_br_index.md":"a1524471","ru_ru_guide_difference-with-magisk.md":"d39f4b2d","ru_ru_guide_faq.md":"6785049e","ru_ru_guide_app-profile.md":"8936210e","ru_ru_guide_how-to-integrate-for-non-gki.md":"7c70c478","ru_ru_guide_hidden-features.md":"395803e0","ru_ru_guide_module.md":"015ebdb2","ru_ru_guide_unofficially-support-devices.md":"20ee73e6","ru_ru_index.md":"4f8b1975","vi_vn_guide_difference-with-magisk.md":"16f29788","vi_vn_guide_faq.md":"ef1e0e86","vi_vn_guide_hidden-features.md":"fca4632f","vi_vn_guide_installation.md":"7fef5e5e","vi_vn_guide_how-to-integrate-for-non-gki.md":"9b3f1403","vi_vn_guide_rescue-from-bootloop.md":"d796809c","vi_vn_guide_what-is-kernelsu.md":"bea8d4b7","zh_cn_guide_difference-with-magisk.md":"401c4c2d","zh_cn_guide_app-profile.md":"557e9b58","vi_vn_guide_module.md":"a6a2e6fc","guide_difference-with-magisk.md":"869f5d82","guide_faq.md":"4a5fa376","guide_installation.md":"ec5f3b13","guide_module.md":"0288d934","guide_rescue-from-bootloop.md":"86b40f3b","guide_unofficially-support-devices.md":"c111ae52","guide_what-is-kernelsu.md":"340bbd63","id_id_guide_difference-with-magisk.md":"0aaca6ef","id_id_guide_how-to-build.md":"1ecedb69","id_id_guide_faq.md":"8fe1170a","guide_hidden-features.md":"45e791e6","vi_vn_guide_unofficially-support-devices.md":"3118c185","vi_vn_index.md":"a84edf49","id_id_index.md":"9ad2e601","id_id_guide_rescue-from-bootloop.md":"ec3ef7ee","id_id_guide_installation.md":"a7bb551d","id_id_guide_what-is-kernelsu.md":"aee47f37","id_id_guide_module.md":"372def27","id_id_guide_unofficially-support-devices.md":"ab3be105","ja_jp_guide_what-is-kernelsu.md":"779775a2","index.md":"042b4c20","ja_jp_guide_difference-with-magisk.md":"150a386f","ja_jp_guide_faq.md":"94dc4bed","ja_jp_guide_hidden-features.md":"9c5dddb2","zh_cn_guide_installation.md":"612797b7","ja_jp_guide_installation.md":"2cc6f4de","ja_jp_guide_unofficially-support-devices.md":"f9580dca","pt_br_guide_faq.md":"bfc97031","ja_jp_index.md":"be3c7573","pt_br_guide_app-profile.md":"7a2ced3a","ja_jp_guide_module.md":"111a0bd0","ja_jp_guide_rescue-from-bootloop.md":"d26f95c4","pt_br_guide_difference-with-magisk.md":"92ea83b4","pt_br_guide_hidden-features.md":"df3f1d4b","pt_br_guide_how-to-integrate-for-non-gki.md":"9373963e","pt_br_guide_installation.md":"8193d15a","pt_br_guide_module.md":"3c459c0f","pt_br_guide_what-is-kernelsu.md":"b42bbc04","pt_br_guide_how-to-build.md":"50a0b380","ru_ru_guide_how-to-build.md":"1b3dd3fb","vi_vn_guide_how-to-build.md":"f5e5323c","ru_ru_guide_what-is-kernelsu.md":"b17b08a8","ru_ru_guide_rescue-from-bootloop.md":"d9d6936e","vi_vn_guide_app-profile.md":"37d09526","guide_how-to-integrate-for-non-gki.md":"35d629c6","ru_ru_guide_installation.md":"bd641868","id_id_guide_how-to-integrate-for-non-gki.md":"16b9216a"}
|
||||
{"id_id_guide_how-to-build.md":"1ecedb69","guide_how-to-build.md":"cf9f2c40","guide_unofficially-support-devices.md":"c111ae52","id_id_guide_faq.md":"8fe1170a","id_id_guide_difference-with-magisk.md":"abc25e03","guide_app-profile.md":"9faae288","guide_difference-with-magisk.md":"88801b6b","guide_faq.md":"234d8c0d","ru_ru_guide_installation.md":"bd641868","pt_br_guide_hidden-features.md":"df3f1d4b","pt_br_guide_how-to-build.md":"50a0b380","pt_br_guide_how-to-integrate-for-non-gki.md":"9373963e","pt_br_guide_installation.md":"8193d15a","pt_br_guide_module.md":"039201f7","pt_br_guide_rescue-from-bootloop.md":"f4a13bcd","pt_br_guide_unofficially-support-devices.md":"a0a683e6","pt_br_index.md":"a1524471","ru_ru_guide_app-profile.md":"8936210e","ru_ru_guide_difference-with-magisk.md":"d55db77b","ru_ru_guide_faq.md":"e0aa7004","ru_ru_guide_hidden-features.md":"395803e0","ru_ru_guide_how-to-build.md":"1b3dd3fb","ru_ru_guide_how-to-integrate-for-non-gki.md":"7c70c478","pt_br_guide_what-is-kernelsu.md":"b42bbc04","ja_jp_guide_unofficially-support-devices.md":"f9580dca","ja_jp_guide_what-is-kernelsu.md":"779775a2","ja_jp_index.md":"be3c7573","pt_br_guide_app-profile.md":"7a2ced3a","pt_br_guide_difference-with-magisk.md":"319599e7","ru_ru_guide_module.md":"2cf2aec7","ru_ru_guide_rescue-from-bootloop.md":"d9d6936e","ru_ru_guide_unofficially-support-devices.md":"20ee73e6","ru_ru_guide_what-is-kernelsu.md":"b17b08a8","ru_ru_index.md":"4f8b1975","vi_vn_guide_app-profile.md":"37d09526","vi_vn_guide_how-to-build.md":"f5e5323c","vi_vn_guide_difference-with-magisk.md":"efd07233","vi_vn_guide_faq.md":"e9230071","vi_vn_guide_hidden-features.md":"fca4632f","vi_vn_guide_how-to-integrate-for-non-gki.md":"9b3f1403","vi_vn_guide_module.md":"907befd3","vi_vn_guide_rescue-from-bootloop.md":"d796809c","vi_vn_guide_installation.md":"7fef5e5e","vi_vn_guide_what-is-kernelsu.md":"bea8d4b7","vi_vn_index.md":"a84edf49","zh_cn_guide_app-profile.md":"557e9b58","vi_vn_guide_unofficially-support-devices.md":"3118c185","zh_cn_guide_difference-with-magisk.md":"223f61d1","zh_cn_guide_faq.md":"30eb8f8e","zh_cn_guide_hidden-features.md":"cdd5624f","zh_cn_guide_how-to-integrate-for-non-gki.md":"891eeb81","zh_cn_guide_rescue-from-bootloop.md":"3d907e03","zh_cn_guide_what-is-kernelsu.md":"cdc98b69","zh_tw_guide_difference-with-magisk.md":"161de8ef","zh_cn_index.md":"7dc4034d","zh_cn_guide_unofficially-support-devices.md":"d0fdf38a","zh_cn_guide_module.md":"88839cd5","zh_tw_guide_how-to-build.md":"ef330d07","zh_tw_guide_module.md":"76671e26","zh_tw_guide_rescue-from-bootloop.md":"db20cf2e","guide_installation.md":"ec5f3b13","zh_tw_index.md":"896578f0","zh_tw_guide_faq.md":"bea0a7af","zh_tw_guide_hidden-features.md":"f0bea9ae","zh_tw_guide_how-to-integrate-for-non-gki.md":"e3487c4d","zh_tw_guide_installation.md":"0f23d3bf","pt_br_guide_faq.md":"e1ef8622","id_id_guide_how-to-integrate-for-non-gki.md":"16b9216a","zh_cn_guide_how-to-build.md":"f4f2a6dd","guide_how-to-integrate-for-non-gki.md":"35d629c6","guide_module.md":"1b64f354","zh_cn_guide_installation.md":"612797b7","id_id_guide_installation.md":"a7bb551d","id_id_guide_module.md":"a65f7310","id_id_guide_what-is-kernelsu.md":"aee47f37","id_id_index.md":"9ad2e601","guide_what-is-kernelsu.md":"340bbd63","index.md":"042b4c20","ja_jp_guide_difference-with-magisk.md":"34107b11","zh_tw_guide_what-is-kernelsu.md":"a2ba0439","guide_hidden-features.md":"45e791e6","ja_jp_guide_installation.md":"2cc6f4de","ja_jp_guide_faq.md":"998d2dfd","zh_tw_guide_unofficially-support-devices.md":"3dbb89ec","ja_jp_guide_rescue-from-bootloop.md":"d26f95c4","ja_jp_guide_hidden-features.md":"9c5dddb2","guide_rescue-from-bootloop.md":"86b40f3b","ja_jp_guide_module.md":"8abad8eb","id_id_guide_rescue-from-bootloop.md":"ec3ef7ee","id_id_guide_unofficially-support-devices.md":"ab3be105"}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user