Files
KernelSU/guide/module.html
2023-11-13 03:46:43 +00:00

187 lines
73 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Module guides | KernelSU</title>
<meta name="description" content="A kernel-based root solution for Android GKI devices.">
<link rel="preload stylesheet" href="/assets/style.aaa90101.css" as="style">
<script type="module" src="/assets/app.a2c23f3d.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.2ed14f66.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/framework.ec8f7e8e.js">
<link rel="modulepreload" href="/assets/chunks/theme.4b73f3e8.js">
<link rel="modulepreload" href="/assets/guide_module.md.fcc5d1bb.lean.js">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-5a346dfe><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0f60ec36></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0f60ec36> Skip to content </a><!--]--><!----><header class="VPNav" data-v-5a346dfe data-v-ae24b3ad><div class="VPNavBar has-sidebar" data-v-ae24b3ad data-v-a0fd61f4><div class="container" data-v-a0fd61f4><div class="title" data-v-a0fd61f4><div class="VPNavBarTitle has-sidebar" data-v-a0fd61f4 data-v-86d1bed8><a class="title" href="/" data-v-86d1bed8><!--[--><!--]--><!----><!--[-->KernelSU<!--]--><!--[--><!--]--></a></div></div><div class="content" data-v-a0fd61f4><div class="curtain" data-v-a0fd61f4></div><div class="content-body" data-v-a0fd61f4><!--[--><!--]--><div class="VPNavBarSearch search" data-v-a0fd61f4><!----></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-a0fd61f4 data-v-7f418b0f><span id="main-nav-aria-label" class="visually-hidden" data-v-7f418b0f>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/guide/what-is-kernelsu.html" tabindex="0" data-v-7f418b0f data-v-42ef59de><!--[--><span data-v-42ef59de>Guide</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://github.com/tiann/KernelSU" target="_blank" rel="noreferrer" tabindex="0" data-v-7f418b0f data-v-42ef59de><!--[--><span data-v-42ef59de>Github</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-a0fd61f4 data-v-74abcbb9 data-v-9c007e85><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-9c007e85><span class="text" data-v-9c007e85><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="option-icon" data-v-9c007e85><path d="M0 0h24v24H0z" fill="none"></path><path d=" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z " class="css-c4d79v"></path></svg><!----><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-9c007e85><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-9c007e85><div class="VPMenu" data-v-9c007e85 data-v-e7ea1737><!----><!--[--><!--[--><div class="items" data-v-74abcbb9><p class="title" data-v-74abcbb9>English</p><!--[--><div class="VPMenuLink" data-v-74abcbb9 data-v-43f1e123><a class="VPLink link" href="/zh_CN/guide/module.html" data-v-43f1e123><!--[-->简体中文<!--]--></a></div><div class="VPMenuLink" data-v-74abcbb9 data-v-43f1e123><a class="VPLink link" href="/zh_TW/guide/module.html" data-v-43f1e123><!--[-->繁體中文<!--]--></a></div><div class="VPMenuLink" data-v-74abcbb9 data-v-43f1e123><a class="VPLink link" href="/ja_JP/guide/module.html" data-v-43f1e123><!--[-->日本語<!--]--></a></div><div class="VPMenuLink" data-v-74abcbb9 data-v-43f1e123><a class="VPLink link" href="/vi_VN/guide/module.html" data-v-43f1e123><!--[-->Tiếng Việt<!--]--></a></div><div class="VPMenuLink" data-v-74abcbb9 data-v-43f1e123><a class="VPLink link" href="/id_ID/guide/module.html" data-v-43f1e123><!--[-->Bahasa<!--]--></a></div><div class="VPMenuLink" data-v-74abcbb9 data-v-43f1e123><a class="VPLink link" href="/ru_RU/guide/module.html" data-v-43f1e123><!--[-->Русский<!--]--></a></div><div class="VPMenuLink" data-v-74abcbb9 data-v-43f1e123><a class="VPLink link" href="/pt_BR/guide/module.html" data-v-43f1e123><!--[-->Português (Brasil)<!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-a0fd61f4 data-v-e6aabb21><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="toggle dark mode" aria-checked="false" data-v-e6aabb21 data-v-ce54a7d1 data-v-b1685198><span class="check" data-v-b1685198><span class="icon" data-v-b1685198><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-ce54a7d1><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-ce54a7d1><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-a0fd61f4 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/tiann/KernelSU" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-f80f8133><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-a0fd61f4 data-v-d0bd9dde data-v-9c007e85><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-9c007e85><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-9c007e85><circle cx="12" cy="12" r="2"></circle><circle cx="19" cy="12" r="2"></circle><circle cx="5" cy="12" r="2"></circle></svg></button><div class="menu" data-v-9c007e85><div class="VPMenu" data-v-9c007e85 data-v-e7ea1737><!----><!--[--><!--[--><div class="group translations" data-v-d0bd9dde><p class="trans-title" data-v-d0bd9dde>English</p><!--[--><div class="VPMenuLink" data-v-d0bd9dde data-v-43f1e123><a class="VPLink link" href="/zh_CN/guide/module.html" data-v-43f1e123><!--[-->简体中文<!--]--></a></div><div class="VPMenuLink" data-v-d0bd9dde data-v-43f1e123><a class="VPLink link" href="/zh_TW/guide/module.html" data-v-43f1e123><!--[-->繁體中文<!--]--></a></div><div class="VPMenuLink" data-v-d0bd9dde data-v-43f1e123><a class="VPLink link" href="/ja_JP/guide/module.html" data-v-43f1e123><!--[-->日本語<!--]--></a></div><div class="VPMenuLink" data-v-d0bd9dde data-v-43f1e123><a class="VPLink link" href="/vi_VN/guide/module.html" data-v-43f1e123><!--[-->Tiếng Việt<!--]--></a></div><div class="VPMenuLink" data-v-d0bd9dde data-v-43f1e123><a class="VPLink link" href="/id_ID/guide/module.html" data-v-43f1e123><!--[-->Bahasa<!--]--></a></div><div class="VPMenuLink" data-v-d0bd9dde data-v-43f1e123><a class="VPLink link" href="/ru_RU/guide/module.html" data-v-43f1e123><!--[-->Русский<!--]--></a></div><div class="VPMenuLink" data-v-d0bd9dde data-v-43f1e123><a class="VPLink link" href="/pt_BR/guide/module.html" data-v-43f1e123><!--[-->Português (Brasil)<!--]--></a></div><!--]--></div><div class="group" data-v-d0bd9dde><div class="item appearance" data-v-d0bd9dde><p class="label" data-v-d0bd9dde>Appearance</p><div class="appearance-action" data-v-d0bd9dde><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="toggle dark mode" aria-checked="false" data-v-d0bd9dde data-v-ce54a7d1 data-v-b1685198><span class="check" data-v-b1685198><span class="icon" data-v-b1685198><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-ce54a7d1><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-ce54a7d1><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div></div></div><div class="group" data-v-d0bd9dde><div class="item social-links" data-v-d0bd9dde><div class="VPSocialLinks social-links-list" data-v-d0bd9dde data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/tiann/KernelSU" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-f80f8133><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-a0fd61f4 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><!----></header><div class="VPLocalNav reached-top" data-v-5a346dfe data-v-79c8c1df><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-79c8c1df><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="menu-icon" data-v-79c8c1df><path d="M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"></path><path d="M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"></path><path d="M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"></path><path d="M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"></path></svg><span class="menu-text" data-v-79c8c1df>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-79c8c1df data-v-1c15a60a><button data-v-1c15a60a>Return to top</button><!----></div></div><aside class="VPSidebar" data-v-5a346dfe data-v-b00e2fdd><div class="curtain" data-v-b00e2fdd></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-b00e2fdd><span class="visually-hidden" id="sidebar-aria-label" data-v-b00e2fdd> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="group" data-v-b00e2fdd><section class="VPSidebarItem level-0 has-active" data-v-b00e2fdd data-v-e31bd47b><div class="item" role="button" tabindex="0" data-v-e31bd47b><div class="indicator" data-v-e31bd47b></div><h2 class="text" data-v-e31bd47b>Guide</h2><!----></div><div class="items" data-v-e31bd47b><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e31bd47b data-v-e31bd47b><div class="item" data-v-e31bd47b><div class="indicator" data-v-e31bd47b></div><a class="VPLink link link" href="/guide/what-is-kernelsu.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>What is KernelSU?</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e31bd47b data-v-e31bd47b><div class="item" data-v-e31bd47b><div class="indicator" data-v-e31bd47b></div><a class="VPLink link link" href="/guide/installation.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Installation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e31bd47b data-v-e31bd47b><div class="item" data-v-e31bd47b><div class="indicator" data-v-e31bd47b></div><a class="VPLink link link" href="/guide/how-to-build.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>How to build?</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e31bd47b data-v-e31bd47b><div class="item" data-v-e31bd47b><div class="indicator" data-v-e31bd47b></div><a class="VPLink link link" href="/guide/how-to-integrate-for-non-gki.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Intergrate for non-GKI devices</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e31bd47b data-v-e31bd47b><div class="item" data-v-e31bd47b><div class="indicator" data-v-e31bd47b></div><a class="VPLink link link" href="/guide/unofficially-support-devices.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Unofficially supported devices</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e31bd47b data-v-e31bd47b><div class="item" data-v-e31bd47b><div class="indicator" data-v-e31bd47b></div><a class="VPLink link link" href="/guide/module.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Module Guide</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e31bd47b data-v-e31bd47b><div class="item" data-v-e31bd47b><div class="indicator" data-v-e31bd47b></div><a class="VPLink link link" href="/guide/app-profile.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>App Profile</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e31bd47b data-v-e31bd47b><div class="item" data-v-e31bd47b><div class="indicator" data-v-e31bd47b></div><a class="VPLink link link" href="/guide/rescue-from-bootloop.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Rescue from bootloop</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e31bd47b data-v-e31bd47b><div class="item" data-v-e31bd47b><div class="indicator" data-v-e31bd47b></div><a class="VPLink link link" href="/guide/faq.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>FAQ</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e31bd47b data-v-e31bd47b><div class="item" data-v-e31bd47b><div class="indicator" data-v-e31bd47b></div><a class="VPLink link link" href="/guide/hidden-features.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Hidden features</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5a346dfe data-v-669faec9><div class="VPDoc has-sidebar has-aside" data-v-669faec9 data-v-6b87e69f><!--[--><!--]--><div class="container" data-v-6b87e69f><div class="aside" data-v-6b87e69f><div class="aside-curtain" data-v-6b87e69f></div><div class="aside-container" data-v-6b87e69f><div class="aside-content" data-v-6b87e69f><div class="VPDocAside" data-v-6b87e69f data-v-3f215769><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline" role="navigation" data-v-3f215769 data-v-d330b1bb><div class="content" data-v-d330b1bb><div class="outline-marker" data-v-d330b1bb></div><div class="outline-title" role="heading" aria-level="2" data-v-d330b1bb>On this page</div><nav aria-labelledby="doc-outline-aria-label" data-v-d330b1bb><span class="visually-hidden" id="doc-outline-aria-label" data-v-d330b1bb> Table of Contents for current page </span><ul class="root" data-v-d330b1bb data-v-d0ee3533><!--[--><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-6b87e69f><div class="content-container" data-v-6b87e69f><!--[--><!--]--><!----><main class="main" data-v-6b87e69f><div style="position:relative;" class="vp-doc _guide_module" data-v-6b87e69f><div><h1 id="module-guides" tabindex="-1">Module guides <a class="header-anchor" href="#module-guides" aria-label="Permalink to &quot;Module guides&quot;"></a></h1><p>KernelSU provides a module mechanism that achieves the effect of modifying the system directory while maintaining the integrity of the system partition. This mechanism is commonly known as &quot;systemless&quot;.</p><p>The module mechanism of KernelSU is almost the same as that of Magisk. If you are familiar with Magisk module development, developing KernelSU modules is very similar. You can skip the introduction of modules below and only need to read <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 &quot;Busybox&quot;"></a></h2><p>KernelSU ships with a feature complete BusyBox binary (including full SELinux support). The executable is located at <code>/data/adb/ksu/bin/busybox</code>. KernelSU&#39;s BusyBox supports runtime toggle-able &quot;ASH Standalone Shell Mode&quot;. What this standalone mode means is that when running in the <code>ash</code> shell of BusyBox, every single command will directly use the applet within BusyBox, regardless of what is set as <code>PATH</code>. For example, commands like <code>ls</code>, <code>rm</code>, <code>chmod</code> will <strong>NOT</strong> use what is in <code>PATH</code> (in the case of Android by default it will be <code>/system/bin/ls</code>, <code>/system/bin/rm</code>, and <code>/system/bin/chmod</code> respectively), but will instead directly call internal BusyBox applets. This makes sure that scripts always run in a predictable environment and always have the full suite of commands no matter which Android version it is running on. To force a command <em>not</em> to use BusyBox, you have to call the executable with full paths.</p><p>Every single shell script running in the context of KernelSU will be executed in BusyBox&#39;s <code>ash</code> shell with standalone mode enabled. For what is relevant to 3rd party developers, this includes all boot scripts and module installation scripts.</p><p>For those who want to use this &quot;Standalone Mode&quot; feature outside of KernelSU, there are 2 ways to enable it:</p><ol><li>Set environment variable <code>ASH_STANDALONE</code> to <code>1</code><br>Example: <code>ASH_STANDALONE=1 /data/adb/ksu/bin/busybox sh &lt;script&gt;</code></li><li>Toggle with command-line options:<br><code>/data/adb/ksu/bin/busybox sh -o standalone &lt;script&gt;</code></li></ol><p>To make sure all subsequent <code>sh</code> shell executed also runs in standalone mode, option 1 is the preferred method (and this is what KernelSU and the KernelSU manager internally use) as environment variables are inherited down to child processes.</p><div class="tip custom-block"><p class="custom-block-title">difference with Magisk</p><p>KernelSU&#39;s BusyBox is now using the binary file compiled directly from the Magisk project. <strong>Thanks to Magisk!</strong> Therefore, you don&#39;t have to worry about compatibility issues between BusyBox scripts in Magisk and KernelSU because they are exactly the same!</p></div><h2 id="kernelsu-modules" tabindex="-1">KernelSU modules <a class="header-anchor" href="#kernelsu-modules" aria-label="Permalink to &quot;KernelSU modules&quot;"></a></h2><p>A KernelSU module is a folder placed in <code>/data/adb/modules</code> with the structure below:</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki github-dark vp-code-dark"><code><span class="line"><span style="color:#e1e4e8;">/data/adb/modules</span></span>
<span class="line"><span style="color:#e1e4e8;">├── .</span></span>
<span class="line"><span style="color:#e1e4e8;">├── .</span></span>
<span class="line"><span style="color:#e1e4e8;">|</span></span>
<span class="line"><span style="color:#e1e4e8;">├── $MODID &lt;--- The folder is named with the ID of the module</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │ *** Module Identity ***</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── module.prop &lt;--- This file stores the metadata of the module</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │ *** Main Contents ***</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── system &lt;--- This folder will be mounted if skip_mount does not exist</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │ ├── ...</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │ ├── ...</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │ └── ...</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │ *** Status Flags ***</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── skip_mount &lt;--- If exists, KernelSU will NOT mount your system folder</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── disable &lt;--- If exists, the module will be disabled</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── remove &lt;--- If exists, the module will be removed next reboot</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │ *** Optional Files ***</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── post-fs-data.sh &lt;--- This script will be executed in post-fs-data</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── post-mount.sh &lt;--- This script will be executed in post-mount</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── service.sh &lt;--- This script will be executed in late_start service</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── boot-completed.sh &lt;--- This script will be executed on boot completed</span></span>
<span class="line"><span style="color:#e1e4e8;">| ├── uninstall.sh &lt;--- This script will be executed when KernelSU removes your module</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── system.prop &lt;--- Properties in this file will be loaded as system properties by resetprop</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── sepolicy.rule &lt;--- Additional custom sepolicy rules</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │ *** Auto Generated, DO NOT MANUALLY CREATE OR MODIFY ***</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── vendor &lt;--- A symlink to $MODID/system/vendor</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── product &lt;--- A symlink to $MODID/system/product</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── system_ext &lt;--- A symlink to $MODID/system/system_ext</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │ *** Any additional files / folders are allowed ***</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── ...</span></span>
<span class="line"><span style="color:#e1e4e8;">│ └── ...</span></span>
<span class="line"><span style="color:#e1e4e8;">|</span></span>
<span class="line"><span style="color:#e1e4e8;">├── another_module</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── .</span></span>
<span class="line"><span style="color:#e1e4e8;">│ └── .</span></span>
<span class="line"><span style="color:#e1e4e8;">├── .</span></span>
<span class="line"><span style="color:#e1e4e8;">├── .</span></span></code></pre><pre class="shiki github-light vp-code-light"><code><span class="line"><span style="color:#24292e;">/data/adb/modules</span></span>
<span class="line"><span style="color:#24292e;">├── .</span></span>
<span class="line"><span style="color:#24292e;">├── .</span></span>
<span class="line"><span style="color:#24292e;">|</span></span>
<span class="line"><span style="color:#24292e;">├── $MODID &lt;--- The folder is named with the ID of the module</span></span>
<span class="line"><span style="color:#24292e;">│ │</span></span>
<span class="line"><span style="color:#24292e;">│ │ *** Module Identity ***</span></span>
<span class="line"><span style="color:#24292e;">│ │</span></span>
<span class="line"><span style="color:#24292e;">│ ├── module.prop &lt;--- This file stores the metadata of the module</span></span>
<span class="line"><span style="color:#24292e;">│ │</span></span>
<span class="line"><span style="color:#24292e;">│ │ *** Main Contents ***</span></span>
<span class="line"><span style="color:#24292e;">│ │</span></span>
<span class="line"><span style="color:#24292e;">│ ├── system &lt;--- This folder will be mounted if skip_mount does not exist</span></span>
<span class="line"><span style="color:#24292e;">│ │ ├── ...</span></span>
<span class="line"><span style="color:#24292e;">│ │ ├── ...</span></span>
<span class="line"><span style="color:#24292e;">│ │ └── ...</span></span>
<span class="line"><span style="color:#24292e;">│ │</span></span>
<span class="line"><span style="color:#24292e;">│ │ *** Status Flags ***</span></span>
<span class="line"><span style="color:#24292e;">│ │</span></span>
<span class="line"><span style="color:#24292e;">│ ├── skip_mount &lt;--- If exists, KernelSU will NOT mount your system folder</span></span>
<span class="line"><span style="color:#24292e;">│ ├── disable &lt;--- If exists, the module will be disabled</span></span>
<span class="line"><span style="color:#24292e;">│ ├── remove &lt;--- If exists, the module will be removed next reboot</span></span>
<span class="line"><span style="color:#24292e;">│ │</span></span>
<span class="line"><span style="color:#24292e;">│ │ *** Optional Files ***</span></span>
<span class="line"><span style="color:#24292e;">│ │</span></span>
<span class="line"><span style="color:#24292e;">│ ├── post-fs-data.sh &lt;--- This script will be executed in post-fs-data</span></span>
<span class="line"><span style="color:#24292e;">│ ├── post-mount.sh &lt;--- This script will be executed in post-mount</span></span>
<span class="line"><span style="color:#24292e;">│ ├── service.sh &lt;--- This script will be executed in late_start service</span></span>
<span class="line"><span style="color:#24292e;">│ ├── boot-completed.sh &lt;--- This script will be executed on boot completed</span></span>
<span class="line"><span style="color:#24292e;">| ├── uninstall.sh &lt;--- This script will be executed when KernelSU removes your module</span></span>
<span class="line"><span style="color:#24292e;">│ ├── system.prop &lt;--- Properties in this file will be loaded as system properties by resetprop</span></span>
<span class="line"><span style="color:#24292e;">│ ├── sepolicy.rule &lt;--- Additional custom sepolicy rules</span></span>
<span class="line"><span style="color:#24292e;">│ │</span></span>
<span class="line"><span style="color:#24292e;">│ │ *** Auto Generated, DO NOT MANUALLY CREATE OR MODIFY ***</span></span>
<span class="line"><span style="color:#24292e;">│ │</span></span>
<span class="line"><span style="color:#24292e;">│ ├── vendor &lt;--- A symlink to $MODID/system/vendor</span></span>
<span class="line"><span style="color:#24292e;">│ ├── product &lt;--- A symlink to $MODID/system/product</span></span>
<span class="line"><span style="color:#24292e;">│ ├── system_ext &lt;--- A symlink to $MODID/system/system_ext</span></span>
<span class="line"><span style="color:#24292e;">│ │</span></span>
<span class="line"><span style="color:#24292e;">│ │ *** Any additional files / folders are allowed ***</span></span>
<span class="line"><span style="color:#24292e;">│ │</span></span>
<span class="line"><span style="color:#24292e;">│ ├── ...</span></span>
<span class="line"><span style="color:#24292e;">│ └── ...</span></span>
<span class="line"><span style="color:#24292e;">|</span></span>
<span class="line"><span style="color:#24292e;">├── another_module</span></span>
<span class="line"><span style="color:#24292e;">│ ├── .</span></span>
<span class="line"><span style="color:#24292e;">│ └── .</span></span>
<span class="line"><span style="color:#24292e;">├── .</span></span>
<span class="line"><span style="color:#24292e;">├── .</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 &quot;module.prop&quot;"></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 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki github-dark vp-code-dark"><code><span class="line"><span style="color:#e1e4e8;">id=&lt;string&gt;</span></span>
<span class="line"><span style="color:#e1e4e8;">name=&lt;string&gt;</span></span>
<span class="line"><span style="color:#e1e4e8;">version=&lt;string&gt;</span></span>
<span class="line"><span style="color:#e1e4e8;">versionCode=&lt;int&gt;</span></span>
<span class="line"><span style="color:#e1e4e8;">author=&lt;string&gt;</span></span>
<span class="line"><span style="color:#e1e4e8;">description=&lt;string&gt;</span></span></code></pre><pre class="shiki github-light vp-code-light"><code><span class="line"><span style="color:#24292e;">id=&lt;string&gt;</span></span>
<span class="line"><span style="color:#24292e;">name=&lt;string&gt;</span></span>
<span class="line"><span style="color:#24292e;">version=&lt;string&gt;</span></span>
<span class="line"><span style="color:#24292e;">versionCode=&lt;int&gt;</span></span>
<span class="line"><span style="color:#24292e;">author=&lt;string&gt;</span></span>
<span class="line"><span style="color:#24292e;">description=&lt;string&gt;</span></span></code></pre></div><ul><li><code>id</code> has to match this regular expression: <code>^[a-zA-Z][a-zA-Z0-9._-]+$</code><br> ex: ✓ <code>a_module</code>, ✓ <code>a.module</code>, ✓ <code>module-101</code>, ✗ <code>a module</code>, ✗ <code>1_module</code>, ✗ <code>-a-module</code><br> This is the <strong>unique identifier</strong> of your module. You should not change it once published.</li><li><code>versionCode</code> has to be an <strong>integer</strong>. This is used to compare versions</li><li>Others that weren&#39;t mentioned above can be any <strong>single line</strong> string.</li><li>Make sure to use the <code>UNIX (LF)</code> line break type and not the <code>Windows (CR+LF)</code> or <code>Macintosh (CR)</code>.</li></ul><h3 id="shell-scripts" tabindex="-1">Shell scripts <a class="header-anchor" href="#shell-scripts" aria-label="Permalink to &quot;Shell scripts&quot;"></a></h3><p>Please read the <a href="#boot-scripts">Boot Scripts</a> section to understand the difference between <code>post-fs-data.sh</code> and <code>service.sh</code>. For most module developers, <code>service.sh</code> should be good enough if you just need to run a boot script, if you need to run the script after boot completed, please use <code>boot-completed.sh</code>. If you want to do something after mounting overlayfs, please use <code>post-mount.sh</code>.</p><p>In all scripts of your module, please use <code>MODDIR=${0%/*}</code> to get your module&#39;s base directory path; do <strong>NOT</strong> hardcode your module path in scripts.</p><div class="tip custom-block"><p class="custom-block-title">difference with Magisk</p><p>You can use the environment variable KSU to determine if a script is running in KernelSU or Magisk. If running in KernelSU, this value will be set to true.</p></div><h3 id="system-directory" tabindex="-1"><code>system</code> directory <a class="header-anchor" href="#system-directory" aria-label="Permalink to &quot;`system` directory&quot;"></a></h3><p>The contents of this directory will be overlaid on top of the system&#39;s /system partition using overlayfs after the system is booted. This means that:</p><ol><li>Files with the same name as those in the corresponding directory in the system will be overwritten by the files in this directory.</li><li>Folders with the same name as those in the corresponding directory in the system will be merged with the folders in this directory.</li></ol><p>If you want to delete a file or folder in the original system directory, you need to create a file with the same name as the file/folder in the module directory using <code>mknod filename c 0 0</code>. This way, the overlayfs system will automatically &quot;whiteout&quot; this file as if it has been deleted (the /system partition is not actually changed).</p><p>You can also declare a variable named <code>REMOVE</code> containing a list of directories in <code>customize.sh</code> to execute removal operations, and KernelSU will automatically execute <code>mknod &lt;TARGET&gt; c 0 0</code> in the corresponding directories of the module. For example:</p><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki github-dark vp-code-dark"><code><span class="line"><span style="color:#E1E4E8;">REMOVE</span><span style="color:#F97583;">=</span><span style="color:#9ECBFF;">&quot;</span></span>
<span class="line"><span style="color:#9ECBFF;">/system/app/YouTube</span></span>
<span class="line"><span style="color:#9ECBFF;">/system/app/Bloatware</span></span>
<span class="line"><span style="color:#9ECBFF;">&quot;</span></span></code></pre><pre class="shiki github-light vp-code-light"><code><span class="line"><span style="color:#24292E;">REMOVE</span><span style="color:#D73A49;">=</span><span style="color:#032F62;">&quot;</span></span>
<span class="line"><span style="color:#032F62;">/system/app/YouTube</span></span>
<span class="line"><span style="color:#032F62;">/system/app/Bloatware</span></span>
<span class="line"><span style="color:#032F62;">&quot;</span></span></code></pre></div><p>The above list will execute <code>mknod $MODPATH/system/app/YouTuBe c 0 0</code> and <code>mknod $MODPATH/system/app/Bloatware c 0 0</code>; and <code>/system/app/YouTube</code> and <code>/system/app/Bloatware</code> will be removed after the module takes effect.</p><p>If you want to replace a directory in the system, you need to create a directory with the same path in your module directory, and then set the attribute <code>setfattr -n trusted.overlay.opaque -v y &lt;TARGET&gt;</code> for this directory. This way, the overlayfs system will automatically replace the corresponding directory in the system (without changing the /system partition).</p><p>You can declare a variable named <code>REPLACE</code> in your <code>customize.sh</code> file, which includes a list of directories to be replaced, and KernelSU will automatically perform the corresponding operations in your module directory. For example:</p><p>REPLACE=&quot; /system/app/YouTube /system/app/Bloatware &quot;</p><p>This list will automatically create the directories <code>$MODPATH/system/app/YouTube</code> and <code>$MODPATH/system/app/Bloatware</code>, and then execute <code>setfattr -n trusted.overlay.opaque -v y $MODPATH/system/app/YouTube</code> and <code>setfattr -n trusted.overlay.opaque -v y $MODPATH/system/app/Bloatware</code>. After the module takes effect, <code>/system/app/YouTube</code> and <code>/system/app/Bloatware</code> will be replaced with empty directories.</p><div class="tip custom-block"><p class="custom-block-title">difference with Magisk</p><p>KernelSU&#39;s systemless mechanism is implemented through the kernel&#39;s overlayfs, while Magisk currently uses magic mount (bind mount). The two implementation methods have significant differences, but the ultimate goal is the same: to modify /system files without physically modifying the /system partition.</p></div><p>If you are interested in overlayfs, it is recommended to read the Linux Kernel&#39;s <a href="https://docs.kernel.org/filesystems/overlayfs.html" target="_blank" rel="noreferrer">documentation on overlayfs</a>.</p><h3 id="system-prop" tabindex="-1">system.prop <a class="header-anchor" href="#system-prop" aria-label="Permalink to &quot;system.prop&quot;"></a></h3><p>This file follows the same format as <code>build.prop</code>. Each line comprises of <code>[key]=[value]</code>.</p><h3 id="sepolicy-rule" tabindex="-1">sepolicy.rule <a class="header-anchor" href="#sepolicy-rule" aria-label="Permalink to &quot;sepolicy.rule&quot;"></a></h3><p>If your module requires some additional sepolicy patches, please add those rules into this file. Each line in this file will be treated as a policy statement.</p><h2 id="module-installer" tabindex="-1">Module installer <a class="header-anchor" href="#module-installer" aria-label="Permalink to &quot;Module installer&quot;"></a></h2><p>A KernelSU module installer is a KernelSU module packaged in a zip file that can be flashed in the KernelSU manager APP. The simplest KernelSU module installer is just a KernelSU module packed as a zip file.</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki github-dark vp-code-dark"><code><span class="line"><span style="color:#e1e4e8;">module.zip</span></span>
<span class="line"><span style="color:#e1e4e8;"></span></span>
<span class="line"><span style="color:#e1e4e8;">├── customize.sh &lt;--- (Optional, more details later)</span></span>
<span class="line"><span style="color:#e1e4e8;">│ This script will be sourced by update-binary</span></span>
<span class="line"><span style="color:#e1e4e8;">├── ...</span></span>
<span class="line"><span style="color:#e1e4e8;">├── ... /* The rest of module&#39;s files */</span></span>
<span class="line"><span style="color:#e1e4e8;"></span></span></code></pre><pre class="shiki github-light vp-code-light"><code><span class="line"><span style="color:#24292e;">module.zip</span></span>
<span class="line"><span style="color:#24292e;"></span></span>
<span class="line"><span style="color:#24292e;">├── customize.sh &lt;--- (Optional, more details later)</span></span>
<span class="line"><span style="color:#24292e;">│ This script will be sourced by update-binary</span></span>
<span class="line"><span style="color:#24292e;">├── ...</span></span>
<span class="line"><span style="color:#24292e;">├── ... /* The rest of module&#39;s files */</span></span>
<span class="line"><span style="color:#24292e;"></span></span></code></pre></div><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>KernelSU module is NOT supported to be installed in custom recovery!!</p></div><h3 id="customization" tabindex="-1">Customization <a class="header-anchor" href="#customization" aria-label="Permalink to &quot;Customization&quot;"></a></h3><p>If you need to customize the module installation process, optionally you can create a script in the installer named <code>customize.sh</code>. This script will be <em>sourced</em> (not executed!) by the module installer script after all files are extracted and default permissions and secontext are applied. This is very useful if your module require additional setup based on the device ABI, or you need to set special permissions/secontext for some of your module files.</p><p>If you would like to fully control and customize the installation process, declare <code>SKIPUNZIP=1</code> in <code>customize.sh</code> to skip all default installation steps. By doing so, your <code>customize.sh</code> will be responsible to install everything by itself.</p><p>The <code>customize.sh</code> script runs in KernelSU&#39;s BusyBox <code>ash</code> shell with &quot;Standalone Mode&quot; enabled. The following variables and functions are available:</p><h4 id="variables" tabindex="-1">Variables <a class="header-anchor" href="#variables" aria-label="Permalink to &quot;Variables&quot;"></a></h4><ul><li><code>KSU</code> (bool): a variable to mark that the script is running in the KernelSU environment, and the value of this variable will always be true. You can use it to distinguish between KernelSU and Magisk.</li><li><code>KSU_VER</code> (string): the version string of current installed KernelSU (e.g. <code>v0.4.0</code>)</li><li><code>KSU_VER_CODE</code> (int): the version code of current installed KernelSU in userspace (e.g. <code>10672</code>)</li><li><code>KSU_KERNEL_VER_CODE</code> (int): the version code of current installed KernelSU in kernel space (e.g. <code>10672</code>)</li><li><code>BOOTMODE</code> (bool): always be <code>true</code> in KernelSU</li><li><code>MODPATH</code> (path): the path where your module files should be installed</li><li><code>TMPDIR</code> (path): a place where you can temporarily store files</li><li><code>ZIPFILE</code> (path): your module&#39;s installation zip</li><li><code>ARCH</code> (string): the CPU architecture of the device. Value is either <code>arm</code>, <code>arm64</code>, <code>x86</code>, or <code>x64</code></li><li><code>IS64BIT</code> (bool): <code>true</code> if <code>$ARCH</code> is either <code>arm64</code> or <code>x64</code></li><li><code>API</code> (int): the API level (Android version) of the device (e.g. <code>23</code> for Android 6.0)</li></ul><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>In KernelSU, MAGISK_VER_CODE is always 25200 and MAGISK_VER is always v25.2. Please do not use these two variables to determine whether it is running on KernelSU or not.</p></div><h4 id="functions" tabindex="-1">Functions <a class="header-anchor" href="#functions" aria-label="Permalink to &quot;Functions&quot;"></a></h4><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki github-dark vp-code-dark"><code><span class="line"><span style="color:#e1e4e8;">ui_print &lt;msg&gt;</span></span>
<span class="line"><span style="color:#e1e4e8;"> print &lt;msg&gt; to console</span></span>
<span class="line"><span style="color:#e1e4e8;"> Avoid using &#39;echo&#39; as it will not display in custom recovery&#39;s console</span></span>
<span class="line"><span style="color:#e1e4e8;"></span></span>
<span class="line"><span style="color:#e1e4e8;">abort &lt;msg&gt;</span></span>
<span class="line"><span style="color:#e1e4e8;"> print error message &lt;msg&gt; to console and terminate the installation</span></span>
<span class="line"><span style="color:#e1e4e8;"> Avoid using &#39;exit&#39; as it will skip the termination cleanup steps</span></span>
<span class="line"><span style="color:#e1e4e8;"></span></span>
<span class="line"><span style="color:#e1e4e8;">set_perm &lt;target&gt; &lt;owner&gt; &lt;group&gt; &lt;permission&gt; [context]</span></span>
<span class="line"><span style="color:#e1e4e8;"> if [context] is not set, the default is &quot;u:object_r:system_file:s0&quot;</span></span>
<span class="line"><span style="color:#e1e4e8;"> this function is a shorthand for the following commands:</span></span>
<span class="line"><span style="color:#e1e4e8;"> chown owner.group target</span></span>
<span class="line"><span style="color:#e1e4e8;"> chmod permission target</span></span>
<span class="line"><span style="color:#e1e4e8;"> chcon context target</span></span>
<span class="line"><span style="color:#e1e4e8;"></span></span>
<span class="line"><span style="color:#e1e4e8;">set_perm_recursive &lt;directory&gt; &lt;owner&gt; &lt;group&gt; &lt;dirpermission&gt; &lt;filepermission&gt; [context]</span></span>
<span class="line"><span style="color:#e1e4e8;"> if [context] is not set, the default is &quot;u:object_r:system_file:s0&quot;</span></span>
<span class="line"><span style="color:#e1e4e8;"> for all files in &lt;directory&gt;, it will call:</span></span>
<span class="line"><span style="color:#e1e4e8;"> set_perm file owner group filepermission context</span></span>
<span class="line"><span style="color:#e1e4e8;"> for all directories in &lt;directory&gt; (including itself), it will call:</span></span>
<span class="line"><span style="color:#e1e4e8;"> set_perm dir owner group dirpermission context</span></span></code></pre><pre class="shiki github-light vp-code-light"><code><span class="line"><span style="color:#24292e;">ui_print &lt;msg&gt;</span></span>
<span class="line"><span style="color:#24292e;"> print &lt;msg&gt; to console</span></span>
<span class="line"><span style="color:#24292e;"> Avoid using &#39;echo&#39; as it will not display in custom recovery&#39;s console</span></span>
<span class="line"><span style="color:#24292e;"></span></span>
<span class="line"><span style="color:#24292e;">abort &lt;msg&gt;</span></span>
<span class="line"><span style="color:#24292e;"> print error message &lt;msg&gt; to console and terminate the installation</span></span>
<span class="line"><span style="color:#24292e;"> Avoid using &#39;exit&#39; as it will skip the termination cleanup steps</span></span>
<span class="line"><span style="color:#24292e;"></span></span>
<span class="line"><span style="color:#24292e;">set_perm &lt;target&gt; &lt;owner&gt; &lt;group&gt; &lt;permission&gt; [context]</span></span>
<span class="line"><span style="color:#24292e;"> if [context] is not set, the default is &quot;u:object_r:system_file:s0&quot;</span></span>
<span class="line"><span style="color:#24292e;"> this function is a shorthand for the following commands:</span></span>
<span class="line"><span style="color:#24292e;"> chown owner.group target</span></span>
<span class="line"><span style="color:#24292e;"> chmod permission target</span></span>
<span class="line"><span style="color:#24292e;"> chcon context target</span></span>
<span class="line"><span style="color:#24292e;"></span></span>
<span class="line"><span style="color:#24292e;">set_perm_recursive &lt;directory&gt; &lt;owner&gt; &lt;group&gt; &lt;dirpermission&gt; &lt;filepermission&gt; [context]</span></span>
<span class="line"><span style="color:#24292e;"> if [context] is not set, the default is &quot;u:object_r:system_file:s0&quot;</span></span>
<span class="line"><span style="color:#24292e;"> for all files in &lt;directory&gt;, it will call:</span></span>
<span class="line"><span style="color:#24292e;"> set_perm file owner group filepermission context</span></span>
<span class="line"><span style="color:#24292e;"> for all directories in &lt;directory&gt; (including itself), it will call:</span></span>
<span class="line"><span style="color:#24292e;"> 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 &quot;Boot scripts&quot;"></a></h2><p>In KernelSU, scripts are divided into two types based on their running mode: post-fs-data mode and late_start service mode:</p><ul><li>post-fs-data mode <ul><li>This stage is BLOCKING. The boot process is paused before execution is done, or 10 seconds have passed.</li><li>Scripts run before any modules are mounted. This allows a module developer to dynamically adjust their modules before it gets mounted.</li><li>This stage happens before Zygote is started, which pretty much means everything in Android</li><li><strong>WARNING:</strong> using <code>setprop</code> will deadlock the boot process! Please use <code>resetprop -n &lt;prop_name&gt; &lt;prop_value&gt;</code> instead.</li><li><strong>Only run scripts in this mode if necessary.</strong></li></ul></li><li>late_start service mode <ul><li>This stage is NON-BLOCKING. Your script runs in parallel with the rest of the booting process.</li><li><strong>This is the recommended stage to run most scripts.</strong></li></ul></li></ul><p>In KernelSU, startup scripts are divided into two types based on their storage location: general scripts and module scripts:</p><ul><li>General Scripts <ul><li>Placed in <code>/data/adb/post-fs-data.d</code>, <code>/data/adb/service.d</code>, <code>/data/adb/post-mount.d</code> or <code>/data/adb/boot-completed.d</code></li><li>Only executed if the script is set as executable (<code>chmod +x script.sh</code>)</li><li>Scripts in <code>post-fs-data.d</code> runs in post-fs-data mode, and scripts in <code>service.d</code> runs in late_start service mode.</li><li>Modules should <strong>NOT</strong> add general scripts during installation</li></ul></li><li>Module Scripts <ul><li>Placed in the module&#39;s own folder</li><li>Only executed if the module is enabled</li><li><code>post-fs-data.sh</code> runs in post-fs-data mode, <code>service.sh</code> runs in late_start service mode, <code>boot-completed.sh</code> runs on boot completed, <code>post-mount.sh</code> runs on overlayfs mounted.</li></ul></li></ul><p>All boot scripts will run in KernelSU&#39;s BusyBox <code>ash</code> shell with &quot;Standalone Mode&quot; enabled.</p></div></div></main><footer class="VPDocFooter" data-v-6b87e69f data-v-ef5dee53><!--[--><!--]--><div class="edit-info" data-v-ef5dee53><div class="edit-link" data-v-ef5dee53><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/tiann/KernelSU/edit/main/website/docs/guide/module.md" target="_blank" rel="noreferrer" data-v-ef5dee53><!--[--><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" class="edit-link-icon" aria-label="edit icon" data-v-ef5dee53><path d="M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"></path><path d="M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"></path></svg> Edit this page on GitHub<!--]--></a></div><!----></div><nav class="prev-next" data-v-ef5dee53><div class="pager" data-v-ef5dee53><a class="pager-link prev" href="/guide/unofficially-support-devices.html" data-v-ef5dee53><span class="desc" data-v-ef5dee53>Previous page</span><span class="title" data-v-ef5dee53>Unofficially supported devices</span></a></div><div class="pager" data-v-ef5dee53><a class="pager-link next" href="/guide/app-profile.html" data-v-ef5dee53><span class="desc" data-v-ef5dee53>Next page</span><span class="title" data-v-ef5dee53>App Profile</span></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-5a346dfe data-v-e03eb2e1><div class="container" data-v-e03eb2e1><p class="message" data-v-e03eb2e1>Released under the GPL3 License.</p><p class="copyright" data-v-e03eb2e1>Copyright © 2022-present KernelSU Developers</p></div></footer><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"ja_jp_guide_difference-with-magisk.md\":\"665d74c8\",\"ja_jp_guide_faq.md\":\"b51546fa\",\"ja_jp_guide_hidden-features.md\":\"cdaa1636\",\"ja_jp_guide_installation.md\":\"7f4d5495\",\"id_id_guide_rescue-from-bootloop.md\":\"5cce45dd\",\"guide_app-profile.md\":\"27f6816c\",\"ja_jp_index.md\":\"474a6e1c\",\"guide_hidden-features.md\":\"469c34a7\",\"guide_installation.md\":\"f81e59f3\",\"guide_how-to-integrate-for-non-gki.md\":\"5ad8c015\",\"guide_rescue-from-bootloop.md\":\"656e5988\",\"guide_unofficially-support-devices.md\":\"692e1ce3\",\"id_id_guide_difference-with-magisk.md\":\"24526677\",\"id_id_guide_how-to-build.md\":\"f09b7a1a\",\"id_id_guide_module.md\":\"068bf86d\",\"id_id_guide_installation.md\":\"2d1e9f50\",\"ja_jp_guide_module.md\":\"dbefd5cf\",\"id_id_guide_unofficially-support-devices.md\":\"78d9391e\",\"id_id_guide_what-is-kernelsu.md\":\"b6c7dc2f\",\"guide_how-to-build.md\":\"83e45bdd\",\"id_id_index.md\":\"06fbc917\",\"index.md\":\"133d8307\",\"pt_br_guide_rescue-from-bootloop.md\":\"ee15e0d3\",\"ru_ru_guide_app-profile.md\":\"084a5687\",\"ru_ru_guide_faq.md\":\"1d543e4d\",\"id_id_guide_faq.md\":\"a19560c6\",\"guide_module.md\":\"fcc5d1bb\",\"pt_br_guide_app-profile.md\":\"dd333014\",\"guide_what-is-kernelsu.md\":\"f089de90\",\"zh_tw_index.md\":\"419b5e06\",\"pt_br_guide_module.md\":\"dc3df57b\",\"zh_cn_guide_how-to-integrate-for-non-gki.md\":\"fc1a10e8\",\"ru_ru_guide_hidden-features.md\":\"6c681acf\",\"ru_ru_guide_how-to-build.md\":\"3ac4fa09\",\"ja_jp_guide_rescue-from-bootloop.md\":\"7bb5da8e\",\"ja_jp_guide_unofficially-support-devices.md\":\"e12c36fa\",\"ja_jp_guide_what-is-kernelsu.md\":\"10b56327\",\"pt_br_guide_faq.md\":\"01a58b64\",\"pt_br_guide_how-to-build.md\":\"df81a6ce\",\"guide_difference-with-magisk.md\":\"6bc0c587\",\"ru_ru_guide_rescue-from-bootloop.md\":\"c45eb81e\",\"ru_ru_guide_unofficially-support-devices.md\":\"903ca1e7\",\"ru_ru_guide_what-is-kernelsu.md\":\"11586959\",\"ru_ru_index.md\":\"4a8cc387\",\"vi_vn_guide_app-profile.md\":\"0b09a7b5\",\"vi_vn_guide_difference-with-magisk.md\":\"57b7c7d3\",\"vi_vn_guide_faq.md\":\"510e2971\",\"vi_vn_guide_hidden-features.md\":\"f00f568c\",\"vi_vn_guide_how-to-build.md\":\"f65da7b9\",\"vi_vn_guide_how-to-integrate-for-non-gki.md\":\"f0064cd4\",\"vi_vn_guide_installation.md\":\"a6c03995\",\"vi_vn_guide_module.md\":\"d89b5b5b\",\"vi_vn_guide_rescue-from-bootloop.md\":\"dc2854ff\",\"vi_vn_guide_unofficially-support-devices.md\":\"2078077c\",\"vi_vn_guide_what-is-kernelsu.md\":\"48965b2f\",\"vi_vn_index.md\":\"f75cd4bf\",\"zh_cn_guide_app-profile.md\":\"cabe50a9\",\"zh_cn_guide_difference-with-magisk.md\":\"d3fa9085\",\"zh_cn_guide_faq.md\":\"ac23a8b3\",\"zh_cn_guide_hidden-features.md\":\"34a0e2c0\",\"pt_br_guide_unofficially-support-devices.md\":\"9d8e434d\",\"guide_faq.md\":\"89521262\",\"zh_cn_guide_installation.md\":\"b6f3f2dc\",\"zh_cn_guide_module.md\":\"95d10721\",\"zh_cn_guide_rescue-from-bootloop.md\":\"fa76b90c\",\"zh_cn_guide_how-to-build.md\":\"709f65fb\",\"zh_cn_guide_unofficially-support-devices.md\":\"4c68d324\",\"zh_cn_guide_what-is-kernelsu.md\":\"296b4e28\",\"zh_cn_index.md\":\"c6e87037\",\"zh_tw_guide_difference-with-magisk.md\":\"831b592b\",\"zh_tw_guide_faq.md\":\"e91224a7\",\"ru_ru_guide_installation.md\":\"ad88b078\",\"zh_tw_guide_hidden-features.md\":\"728dbc1c\",\"zh_tw_guide_how-to-build.md\":\"32de6944\",\"zh_tw_guide_how-to-integrate-for-non-gki.md\":\"035c5fb8\",\"ru_ru_guide_module.md\":\"19fabb40\",\"zh_tw_guide_installation.md\":\"48e9e870\",\"zh_tw_guide_module.md\":\"57647aec\",\"zh_tw_guide_rescue-from-bootloop.md\":\"499539d8\",\"zh_tw_guide_unofficially-support-devices.md\":\"e1ab05b4\",\"zh_tw_guide_what-is-kernelsu.md\":\"c73a8b16\",\"ru_ru_guide_how-to-integrate-for-non-gki.md\":\"12445e00\",\"pt_br_guide_hidden-features.md\":\"817db7e8\",\"pt_br_guide_difference-with-magisk.md\":\"c0878d2e\",\"pt_br_guide_what-is-kernelsu.md\":\"e7123691\",\"pt_br_index.md\":\"14860a0b\",\"id_id_guide_how-to-integrate-for-non-gki.md\":\"600d4255\",\"ru_ru_guide_difference-with-magisk.md\":\"928ea8b2\",\"pt_br_guide_installation.md\":\"163448ef\",\"pt_br_guide_how-to-integrate-for-non-gki.md\":\"6bd8e7c3\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"KernelSU\",\"description\":\"A VitePress site\",\"base\":\"/\",\"head\":[],\"appearance\":true,\"themeConfig\":{},\"locales\":{\"root\":{\"label\":\"English\",\"lang\":\"en-US\",\"themeConfig\":{\"nav\":[{\"text\":\"Guide\",\"link\":\"/guide/what-is-kernelsu\"},{\"text\":\"Github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"lastUpdatedText\":\"last Updated\",\"sidebar\":{\"/guide/\":[{\"text\":\"Guide\",\"items\":[{\"text\":\"What is KernelSU?\",\"link\":\"/guide/what-is-kernelsu\"},{\"text\":\"Installation\",\"link\":\"/guide/installation\"},{\"text\":\"How to build?\",\"link\":\"/guide/how-to-build\"},{\"text\":\"Intergrate for non-GKI devices\",\"link\":\"/guide/how-to-integrate-for-non-gki\"},{\"text\":\"Unofficially supported devices\",\"link\":\"/guide/unofficially-support-devices.md\"},{\"text\":\"Module Guide\",\"link\":\"/guide/module.md\"},{\"text\":\"App Profile\",\"link\":\"/guide/app-profile.md\"},{\"text\":\"Rescue from bootloop\",\"link\":\"/guide/rescue-from-bootloop.md\"},{\"text\":\"FAQ\",\"link\":\"/guide/faq\"},{\"text\":\"Hidden features\",\"link\":\"/guide/hidden-features\"}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"footer\":{\"message\":\"Released under the GPL3 License.\",\"copyright\":\"Copyright © 2022-present KernelSU Developers\"},\"editLink\":{\"pattern\":\"https://github.com/tiann/KernelSU/edit/main/website/docs/:path\",\"text\":\"Edit this page on GitHub\"}},\"description\":\"A kernel-based root solution for Android GKI devices.\"},\"zh_CN\":{\"label\":\"简体中文\",\"lang\":\"zh-CN\",\"themeConfig\":{\"nav\":[{\"text\":\"指南\",\"link\":\"/zh_CN/guide/what-is-kernelsu\"},{\"text\":\"Github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"lastUpdatedText\":\"最后更新\",\"sidebar\":{\"/zh_CN/guide/\":[{\"text\":\"Guide\",\"items\":[{\"text\":\"什么是 KernelSU?\",\"link\":\"/zh_CN/guide/what-is-kernelsu\"},{\"text\":\"安装\",\"link\":\"/zh_CN/guide/installation\"},{\"text\":\"如何构建?\",\"link\":\"/zh_CN/guide/how-to-build\"},{\"text\":\"如何为非GKI设备集成 KernelSU\",\"link\":\"/zh_CN/guide/how-to-integrate-for-non-gki\"},{\"text\":\"非官方支持设备\",\"link\":\"/zh_CN/guide/unofficially-support-devices.md\"},{\"text\":\"模块开发指南\",\"link\":\"/zh_CN/guide/module.md\"},{\"text\":\"App Profile\",\"link\":\"/zh_CN/guide/app-profile.md\"},{\"text\":\"救砖\",\"link\":\"/zh_CN/guide/rescue-from-bootloop.md\"},{\"text\":\"常见问题\",\"link\":\"/zh_CN/guide/faq\"},{\"text\":\"隐藏功能\",\"link\":\"/zh_CN/guide/hidden-features\"}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"footer\":{\"message\":\"在 GPL3 许可证下发布。\",\"copyright\":\"Copyright © 2022-现在 KernelSU 开发者\"},\"editLink\":{\"pattern\":\"https://github.com/tiann/KernelSU/edit/main/website/docs/:path\",\"text\":\"在 GitHub 中编辑本页\"}},\"description\":\"一个基于内核,为安卓 GKI 准备的 root 方案。\"},\"zh_TW\":{\"label\":\"繁體中文\",\"lang\":\"zh-TW\",\"themeConfig\":{\"nav\":[{\"text\":\"指南\",\"link\":\"/zh_TW/guide/what-is-kernelsu\"},{\"text\":\"Github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"lastUpdatedText\":\"上次更新\",\"sidebar\":{\"/zh_TW/guide/\":[{\"text\":\"Guide\",\"items\":[{\"text\":\"什麼是 KernelSU\",\"link\":\"/zh_TW/guide/what-is-kernelsu\"},{\"text\":\"安裝\",\"link\":\"/zh_TW/guide/installation\"},{\"text\":\"如何建置?\",\"link\":\"/zh_TW/guide/how-to-build\"},{\"text\":\"如何為非 GKI 核心整合 KernelSU\",\"link\":\"/zh_TW/guide/how-to-integrate-for-non-gki\"},{\"text\":\"非官方支援裝置\",\"link\":\"/zh_TW/guide/unofficially-support-devices.md\"},{\"text\":\"模組指南\",\"link\":\"/zh_TW/guide/module.md\"},{\"text\":\"搶救開機迴圈\",\"link\":\"/zh_TW/guide/rescue-from-bootloop.md\"},{\"text\":\"常見問題\",\"link\":\"/zh_TW/guide/faq\"},{\"text\":\"隱藏功能\",\"link\":\"/zh_TW/guide/hidden-features\"}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"footer\":{\"message\":\"係依據 GPL3 授權發行。\",\"copyright\":\"Copyright © 2022-目前 KernelSU 開發人員\"},\"editLink\":{\"pattern\":\"https://github.com/tiann/KernelSU/edit/main/website/docs/:path\",\"text\":\"在 GitHub 中編輯本頁面\"}},\"description\":\"一個以核心為基礎,適用於 Android GKI 的 Root 解決方案。\"},\"ja_JP\":{\"label\":\"日本語\",\"lang\":\"ja-JP\",\"themeConfig\":{\"nav\":[{\"text\":\"ガイド\",\"link\":\"/ja_JP/guide/what-is-kernelsu\"},{\"text\":\"Github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"lastUpdatedText\":\"最終更新\",\"sidebar\":{\"/ja_JP/guide/\":[{\"text\":\"ガイド\",\"items\":[{\"text\":\"KernelSU とは?\",\"link\":\"/ja_JP/guide/what-is-kernelsu\"},{\"text\":\"インストール\",\"link\":\"/ja_JP/guide/installation\"},{\"text\":\"ビルドするには?\",\"link\":\"/guide/how-to-build\"},{\"text\":\"非 GKI デバイスでの実装\",\"link\":\"/guide/how-to-integrate-for-non-gki\"},{\"text\":\"非公式の対応デバイス\",\"link\":\"/ja_JP/guide/unofficially-support-devices.md\"},{\"text\":\"モジュールのガイド\",\"link\":\"/ja_JP/guide/module.md\"},{\"text\":\"ブートループからの復旧\",\"link\":\"/ja_JP/guide/rescue-from-bootloop.md\"},{\"text\":\"よくある質問\",\"link\":\"/ja_JP/guide/faq\"},{\"text\":\"隠し機能\",\"link\":\"/ja_JP/guide/hidden-features\"}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"footer\":{\"message\":\"GPL3 ライセンスでリリースされています。\",\"copyright\":\"Copyright © 2022-現在 KernelSU 開発者\"},\"editLink\":{\"pattern\":\"https://github.com/tiann/KernelSU/edit/main/website/docs/:path\",\"text\":\"GitHub でこのページを編集\"}},\"description\":\"Android GKI デバイス向けのカーネルベースの root ソリューション\"},\"vi_VN\":{\"label\":\"Tiếng Việt\",\"lang\":\"vi-VN\",\"themeConfig\":{\"nav\":[{\"text\":\"Hướng Dẫn\",\"link\":\"/vi_VN/guide/what-is-kernelsu\"},{\"text\":\"Github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"lastUpdatedText\":\"cập nhật lần cuối\",\"sidebar\":{\"/vi_VN/guide/\":[{\"text\":\"Hướng Dẫn\",\"items\":[{\"text\":\"KernelSU là gì?\",\"link\":\"/vi_VN/guide/what-is-kernelsu\"},{\"text\":\"Cách cài đặt\",\"link\":\"/vi_VN/guide/installation\"},{\"text\":\"Cách để build?\",\"link\":\"/vi_VN/guide/how-to-build\"},{\"text\":\"Tích hợp vào thiết bị không sử dụng GKI\",\"link\":\"/vi_VN/guide/how-to-integrate-for-non-gki\"},{\"text\":\"Thiết bị hỗ trợ không chính thức\",\"link\":\"/vi_VN/guide/unofficially-support-devices.md\"},{\"text\":\"FAQ - Câu hỏi thường gặp\",\"link\":\"/vi_VN/guide/faq\"}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"footer\":{\"message\":\"Phát hành dưới giấy phép GPL3.\",\"copyright\":\"Bản Quyền © 2022-nay KernelSU Developers\"},\"editLink\":{\"pattern\":\"https://github.com/tiann/KernelSU/edit/main/website/docs/:path\",\"text\":\"Chỉnh sửa trang này trên GitHub\"}},\"description\":\"Một giải pháp root trực tiếp trên kernel dành cho các thiết bị hỗ trợ GKI.\"},\"id_ID\":{\"label\":\"Bahasa\",\"lang\":\"id-ID\",\"themeConfig\":{\"nav\":[{\"text\":\"Petunjuk\",\"link\":\"/id_ID/guide/what-is-kernelsu\"},{\"text\":\"Github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"lastUpdatedText\":\"Update Terakhir\",\"sidebar\":{\"/id_ID/guide/\":[{\"text\":\"Petunjuk\",\"items\":[{\"text\":\"Apa itu KernelSU?\",\"link\":\"/id_ID/guide/what-is-kernelsu\"},{\"text\":\"Instalasi\",\"link\":\"/id_ID/guide/installation\"},{\"text\":\"Bagaimana cara buildnya?\",\"link\":\"/id_ID/guide/how-to-build\"},{\"text\":\"Integrasi untuk perangkat non-GKI\",\"link\":\"/id_ID/guide/how-to-integrate-for-non-gki\"},{\"text\":\"Perangkat yang didukung secara tidak resmi\",\"link\":\"/id_ID/guide/unofficially-support-devices.md\"},{\"text\":\"Petunjuk module\",\"link\":\"/id_ID/guide/module.md\"},{\"text\":\"Antisipasi dari bootloop\",\"link\":\"/id_ID/guide/rescue-from-bootloop.md\"},{\"text\":\"FAQ\",\"link\":\"/id_ID/guide/faq\"}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"footer\":{\"message\":\"Rilis Dibawah Lisensi GPL3.\",\"copyright\":\"Copyright © 2022-Sekarang pengembang KernelSU \"},\"editLink\":{\"pattern\":\"https://github.com/tiann/KernelSU/edit/main/website/docs/:path\",\"text\":\"Edit Halaman ini di GitHub\"}},\"description\":\"Solusi root kernel-based untuk perangkat Android GKI.\"},\"ru_RU\":{\"label\":\"Русский\",\"lang\":\"ru-RU\",\"themeConfig\":{\"nav\":[{\"text\":\"Руководство\",\"link\":\"/ru_RU/guide/what-is-kernelsu\"},{\"text\":\"Github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"lastUpdatedText\":\"последнее обновление\",\"sidebar\":{\"/ru_RU/guide/\":[{\"text\":\"Руководство\",\"items\":[{\"text\":\"Что такое KernelSU?\",\"link\":\"/ru_RU/guide/what-is-kernelsu\"},{\"text\":\"Установка\",\"link\":\"/ru_RU/guide/installation\"},{\"text\":\"Как собрать?\",\"link\":\"/ru_RU/guide/how-to-build\"},{\"text\":\"Реализация в устройствах, не относящихся к GKI\",\"link\":\"/ru_RU/guide/how-to-integrate-for-non-gki\"},{\"text\":\"Неофициально поддерживаемые устройства\",\"link\":\"/ru_RU/guide/unofficially-support-devices.md\"},{\"text\":\"Руководство по разработке модулей\",\"link\":\"/ru_RU/guide/module.md\"},{\"text\":\"Профиль приложений\",\"link\":\"/ru_RU/guide/app-profile.md\"},{\"text\":\"Выход из циклической загрузки\",\"link\":\"/ru_RU/guide/rescue-from-bootloop.md\"},{\"text\":\"FAQ\",\"link\":\"/ru_RU/guide/faq\"},{\"text\":\"Скрытые возможности\",\"link\":\"/ru_RU/guide/hidden-features\"}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"footer\":{\"message\":\"Выпускается под лицензией GPL3.\",\"copyright\":\"Авторские права © 2022-текущее Разработчики KernelSU\"},\"editLink\":{\"pattern\":\"https://github.com/tiann/KernelSU/edit/main/website/docs/:path\",\"text\":\"Редактировать эту страницу на GitHub\"}},\"description\":\"Решение на основе ядра root для устройств Android GKI.\"},\"pt_BR\":{\"label\":\"Português (Brasil)\",\"lang\":\"pt-BR\",\"themeConfig\":{\"nav\":[{\"text\":\"Guia\",\"link\":\"/pt_BR/guide/what-is-kernelsu\"},{\"text\":\"Github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"lastUpdatedText\":\"Última atualização\",\"sidebar\":{\"/pt_BR/guide/\":[{\"text\":\"Guia\",\"items\":[{\"text\":\"O que é KernelSU?\",\"link\":\"/pt_BR/guide/what-is-kernelsu\"},{\"text\":\"Instalação\",\"link\":\"/pt_BR/guide/installation\"},{\"text\":\"Como construir?\",\"link\":\"/pt_BR/guide/how-to-build\"},{\"text\":\"Integração para dispositivos não GKI\",\"link\":\"/pt_BR/guide/how-to-integrate-for-non-gki\"},{\"text\":\"Dispositivos com suporte não oficial\",\"link\":\"/pt_BR/guide/unofficially-support-devices.md\"},{\"text\":\"Guias de módulo\",\"link\":\"/pt_BR/guide/module.md\"},{\"text\":\"Perfil do Aplicativo\",\"link\":\"/pt_BR/guide/app-profile.md\"},{\"text\":\"Resgate do bootloop\",\"link\":\"/pt_BR/guide/rescue-from-bootloop.md\"},{\"text\":\"FAQ\",\"link\":\"/pt_BR/guide/faq\"},{\"text\":\"Recursos ocultos\",\"link\":\"/pt_BR/guide/hidden-features\"}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/tiann/KernelSU\"}],\"footer\":{\"message\":\"Lançado sob a Licença GPL3.\",\"copyright\":\"Copyright © Desenvolvedores KernelSU atuais de 2022\"},\"editLink\":{\"pattern\":\"https://github.com/tiann/KernelSU/edit/main/website/docs/:path\",\"text\":\"Edite esta página no GitHub\"}},\"description\":\"Uma solução root baseada em kernel para dispositivos Android GKI.\"}},\"scrollOffset\":90,\"cleanUrls\":false}");</script>
</body>
</html>