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

183 lines
83 KiB
HTML
Raw 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="ru-RU" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Руководство по разработке модулей | KernelSU</title>
<meta name="description" content="Решение на основе ядра root для устройств Android GKI.">
<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/ru_RU_guide_module.md.19fabb40.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="/ru_RU/" 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="/ru_RU/guide/what-is-kernelsu.html" tabindex="0" data-v-7f418b0f data-v-42ef59de><!--[--><span data-v-42ef59de>Руководство</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>Русский</p><!--[--><div class="VPMenuLink" data-v-74abcbb9 data-v-43f1e123><a class="VPLink link" href="/guide/module.html" data-v-43f1e123><!--[-->English<!--]--></a></div><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="/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>Русский</p><!--[--><div class="VPMenuLink" data-v-d0bd9dde data-v-43f1e123><a class="VPLink link" href="/guide/module.html" data-v-43f1e123><!--[-->English<!--]--></a></div><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="/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>Руководство</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="/ru_RU/guide/what-is-kernelsu.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Что такое 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="/ru_RU/guide/installation.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Установка</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="/ru_RU/guide/how-to-build.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Как собрать?</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="/ru_RU/guide/how-to-integrate-for-non-gki.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Реализация в устройствах, не относящихся к GKI</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="/ru_RU/guide/unofficially-support-devices.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Неофициально поддерживаемые устройства</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="/ru_RU/guide/module.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Руководство по разработке модулей</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="/ru_RU/guide/app-profile.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Профиль приложений</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="/ru_RU/guide/rescue-from-bootloop.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Выход из циклической загрузки</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="/ru_RU/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="/ru_RU/guide/hidden-features.html" data-v-e31bd47b><!--[--><p class="text" data-v-e31bd47b>Скрытые возможности</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 _ru_RU_guide_module" data-v-6b87e69f><div><h1 id="introduction" tabindex="-1">Руководство по разработке модулей <a class="header-anchor" href="#introduction" aria-label="Permalink to &quot;Руководство по разработке модулей {#introduction}&quot;"></a></h1><p>KernelSU предоставляет механизм модулей, позволяющий добиться эффекта модификации системного каталога при сохранении целостности системного раздела. Этот механизм принято называть &quot;бессистемным&quot;.</p><p>Модульный механизм KernelSU практически аналогичен механизму Magisk. Если вы знакомы с разработкой модулей Magisk, то разработка модулей KernelSU очень похожа. Представление модулей ниже можно пропустить, достаточно прочитать [различия-с-magisk] (difference-with-magisk.md).</p><h2 id="busybox" tabindex="-1">Busybox <a class="header-anchor" href="#busybox" aria-label="Permalink to &quot;Busybox&quot;"></a></h2><p>В комплект поставки KernelSU входит полнофункциональный бинарный файл BusyBox (включая полную поддержку SELinux). Исполняемый файл находится по адресу <code>/data/adb/ksu/bin/busybox</code>. BusyBox от KernelSU поддерживает переключаемый во время работы &quot;ASH Standalone Shell Mode&quot;. Этот автономный режим означает, что при запуске в оболочке <code>ash</code> BusyBox каждая команда будет напрямую использовать апплет внутри BusyBox, независимо от того, что задано в качестве <code>PATH</code>. Например, такие команды, как <code>ls</code>, <code>rm</code>, <code>chmod</code> будут <strong>НЕ</strong> использовать то, что находится в <code>PATH</code> (в случае Android по умолчанию это будут <code>/system/bin/ls</code>, <code>/system/bin/rm</code> и <code>/system/bin/chmod</code> соответственно), а вместо этого будут напрямую вызывать внутренние апплеты BusyBox. Это гарантирует, что скрипты всегда будут выполняться в предсказуемом окружении и всегда будут иметь полный набор команд, независимо от того, на какой версии Android они выполняются. Чтобы заставить команду <em>не</em> использовать BusyBox, необходимо вызвать исполняемый файл с полными путями.</p><p>Каждый сценарий оболочки, запущенный в контексте KernelSU, будет выполняться в оболочке BusyBox <code>ash</code> с включенным автономным режимом. Для сторонних разработчиков это касается всех загрузочных скриптов и скриптов установки модулей.</p><p>Для тех, кто хочет использовать эту возможность &quot;Автономного режима&quot; вне KernelSU, есть два способа включить ее:</p><ol><li>Установите переменной окружения <code>ASH_STANDALONE</code> значение <code>1</code><br>Пример: <code>ASH_STANDALONE=1 /data/adb/ksu/bin/busybox sh &lt;script&gt;</code></li><li>Переключитесь с помощью параметров командной строки:<br><code>/data/adb/ksu/bin/busybox sh -o standalone &lt;script&gt;</code></li></ol><p>Чтобы убедиться, что все последующие запуски оболочки <code>sh</code> также выполняются в автономном режиме, предпочтительным методом является вариант 1 (и это то, что KernelSU и менеджер KernelSU используют внутри), поскольку переменные окружения наследуются вплоть до дочерних процессов.</p><div class="tip custom-block"><p class="custom-block-title">отличие от Magisk</p><p>BusyBox в KernelSU теперь использует бинарный файл, скомпилированный непосредственно из проекта Magisk. **Поэтому вам не нужно беспокоиться о проблемах совместимости между скриптами BusyBox в Magisk и KernelSU, поскольку они абсолютно одинаковы!</p></div><h2 id="kernelsu-modules" tabindex="-1">Модули KernelSU <a class="header-anchor" href="#kernelsu-modules" aria-label="Permalink to &quot;Модули KernelSU {#kernelsu-modules}&quot;"></a></h2><p>Модуль KernelSU - это папка, размещенная в каталоге <code>/data/adb/modules</code> и имеющая следующую структуру:</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;--- Папка имеет имя с идентификатором модуля</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;">│ ├── module.prop &lt;--- В этом файле хранятся метаданные модуля</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;">│ ├── system &lt;--- Эта папка будет смонтирована, если skip_mount не существует</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;">│ │ *** Флаги состояния ***</span></span>
<span class="line"><span style="color:#e1e4e8;">│ │</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── skip_mount &lt;--- Если он существует, то KernelSU НЕ будет монтировать вашу системную папку</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── disable &lt;--- Если модуль существует, то он будет отключен</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── remove &lt;--- Если модуль существует, то при следующей перезагрузке он будет удален</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;">│ ├── post-fs-data.sh &lt;--- Этот скрипт будет выполняться в post-fs-data</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── service.sh &lt;--- Этот скрипт будет выполняться в сервисе late_start</span></span>
<span class="line"><span style="color:#e1e4e8;">| ├── uninstall.sh &lt;--- Этот скрипт будет выполнен, когда KernelSU удалит ваш модуль</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── system.prop &lt;--- Свойства из этого файла будут загружены в качестве системных свойств программой resetprop</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── sepolicy.rule &lt;--- Дополнительные пользовательские правила sepolicy</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;">│ ├── vendor &lt;--- Символьная ссылка на $MODID/system/vendor</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── product &lt;--- Символьная ссылка на $MODID/system/product</span></span>
<span class="line"><span style="color:#e1e4e8;">│ ├── system_ext &lt;--- Симлинк на $MODID/system/system_ext</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;">│ └── ...</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;--- Папка имеет имя с идентификатором модуля</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;">│ ├── module.prop &lt;--- В этом файле хранятся метаданные модуля</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;">│ ├── system &lt;--- Эта папка будет смонтирована, если skip_mount не существует</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;">│ │ *** Флаги состояния ***</span></span>
<span class="line"><span style="color:#24292e;">│ │</span></span>
<span class="line"><span style="color:#24292e;">│ ├── skip_mount &lt;--- Если он существует, то KernelSU НЕ будет монтировать вашу системную папку</span></span>
<span class="line"><span style="color:#24292e;">│ ├── disable &lt;--- Если модуль существует, то он будет отключен</span></span>
<span class="line"><span style="color:#24292e;">│ ├── remove &lt;--- Если модуль существует, то при следующей перезагрузке он будет удален</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;">│ ├── post-fs-data.sh &lt;--- Этот скрипт будет выполняться в post-fs-data</span></span>
<span class="line"><span style="color:#24292e;">│ ├── service.sh &lt;--- Этот скрипт будет выполняться в сервисе late_start</span></span>
<span class="line"><span style="color:#24292e;">| ├── uninstall.sh &lt;--- Этот скрипт будет выполнен, когда KernelSU удалит ваш модуль</span></span>
<span class="line"><span style="color:#24292e;">│ ├── system.prop &lt;--- Свойства из этого файла будут загружены в качестве системных свойств программой resetprop</span></span>
<span class="line"><span style="color:#24292e;">│ ├── sepolicy.rule &lt;--- Дополнительные пользовательские правила sepolicy</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;">│ ├── vendor &lt;--- Символьная ссылка на $MODID/system/vendor</span></span>
<span class="line"><span style="color:#24292e;">│ ├── product &lt;--- Символьная ссылка на $MODID/system/product</span></span>
<span class="line"><span style="color:#24292e;">│ ├── system_ext &lt;--- Симлинк на $MODID/system/system_ext</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;">│ └── ...</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">различия с 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 &quot;module.prop&quot;"></a></h3><p>module.prop - это конфигурационный файл модуля. В KernelSU, если модуль не содержит этого файла, он не будет распознан как модуль. Формат этого файла следующий:</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> должно соответствовать данному регулярному выражению: <code>^[a-zA-Z][a-zA-Z0-9._-]+$</code><br> экс: ✓ <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> Это <strong>уникальный идентификатор</strong> вашего модуля. Не следует изменять его после публикации.</li><li><code>versionCode</code> должен быть <strong>целым</strong>. Это используется для сравнения версий</li><li>Другими, не упомянутыми выше, могут быть любые <strong>однострочные</strong> строки.</li><li>Обязательно используйте тип перевода строки <code>UNIX (LF)</code>, а не <code>Windows (CR+LF)</code> или <code>Macintosh (CR)</code>.</li></ul><h3 id="shell-scripts" tabindex="-1">Сценарии командной оболочки <a class="header-anchor" href="#shell-scripts" aria-label="Permalink to &quot;Сценарии командной оболочки {#shell-scripts}&quot;"></a></h3><p>Чтобы понять разницу между <code>post-fs-data.sh</code> и <code>Service.sh</code>, прочитайте раздел <a href="#boot-scripts">Boot Scripts</a>. Для большинства разработчиков модулей <code>service.sh</code> должно быть достаточно, если вам нужно просто запустить загрузочный скрипт.</p><p>Во всех скриптах вашего модуля используйте <code>MODDIR=${0%/*}</code> для получения пути к базовому каталогу вашего модуля; <strong>НЕ</strong> кодируйте жестко путь к вашему модулю в скриптах.</p><div class="tip custom-block"><p class="custom-block-title">различия с Magisk</p><p>С помощью переменной окружения KSU можно определить, выполняется ли сценарий в KernelSU или в Magisk. Если скрипт выполняется в KernelSU, то это значение будет равно true.</p></div><h3 id="system-directories" tabindex="-1">каталог <code>system</code> <a class="header-anchor" href="#system-directories" aria-label="Permalink to &quot;каталог `system` {#system-directories}&quot;"></a></h3><p>После загрузки системы содержимое этого каталога будет наложено поверх раздела /system с помощью overlayfs. Это означает, что:</p><ol><li>Файлы с теми же именами, что и в соответствующем каталоге в системе, будут перезаписаны файлами в этом каталоге.</li><li>Папки с теми же именами, что и в соответствующем каталоге в системе, будут объединены с папками в этом каталоге.</li></ol><p>Если вы хотите удалить файл или папку в исходном каталоге системы, необходимо создать файл с тем же именем, что и файл/папка, в каталоге модуля с помощью команды <code>mknod filename c 0 0</code>. Таким образом, система overlayfs автоматически &quot;забелит&quot; этот файл, как если бы он был удален (раздел /system при этом фактически не изменится).</p><p>Вы также можете объявить в <code>customize.sh</code> переменную с именем <code>REMOVE</code>, содержащую список каталогов для выполнения операций удаления, и KernelSU автоматически выполнит команду <code>mknod &lt;TARGET&gt; c 0 0</code> в соответствующих каталогах модуля. Например:</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>В приведенном выше списке будут выполнены команды <code>mknod $MODPATH/system/app/YouTuBe c 0 0</code> и <code>mknod $MODPATH/system/app/Bloatware c 0 0</code>; при этом <code>/system/app/YouTube</code> и <code>/system/app/Bloatware</code> будут удалены после вступления модуля в силу.</p><p>Если вы хотите заменить каталог в системе, то необходимо создать каталог с тем же путем в каталоге модуля, а затем установить для этого каталога атрибут <code>setfattr -n trusted.overlay.opaque -v y &lt;TARGET&gt;</code>. Таким образом, система overlayfs автоматически заменит соответствующий каталог в системе (без изменения раздела /system).</p><p>Вы можете объявить в файле <code>customize.sh</code> переменную с именем <code>REPLACE</code>, содержащую список заменяемых каталогов, и KernelSU автоматически выполнит соответствующие операции в каталоге вашего модуля. Например:</p><p>REPLACE=&quot; /system/app/YouTube /system/app/Bloatware &quot;</p><p>В этом списке будут автоматически созданы каталоги <code>$MODPATH/system/app/YouTube</code> и <code>$MODPATH/system/app/Bloatware</code>, а затем выполнены команды <code>setfattr -n trusted.overlay.opaque -v y $MODPATH/system/app/YouTube</code> и <code>setfattr -n trusted.overlay.opaque -v y $MODPATH/system/app/Bloatware</code>. После вступления модуля в силу каталоги <code>/system/app/YouTube</code> и <code>/system/app/Bloatware</code> будут заменены на пустые.</p><div class="tip custom-block"><p class="custom-block-title">различия с Magisk</p><p>В KernelSU бессистемный механизм реализован через overlayfs ядра, а в Magisk в настоящее время используется магическое монтирование (bind mount). Эти два метода реализации имеют существенные различия, но конечная цель у них одна: модификация файлов /system без физического изменения раздела /system.</p></div><p>Если вы заинтересованы в использовании overlayfs, рекомендуется прочитать <a href="https://docs.kernel.org/filesystems/overlayfs.html" target="_blank" rel="noreferrer">документацию по overlayfs</a> ядра Linux.</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>Этот файл имеет тот же формат, что и <code>build.prop</code>. Каждая строка состоит из <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>Если для вашего модуля требуются дополнительные патчи sepolicy, добавьте эти правила в данный файл. Каждая строка в этом файле будет рассматриваться как утверждение политики.</p><h2 id="module-installer" tabindex="-1">Установщик модулей <a class="header-anchor" href="#module-installer" aria-label="Permalink to &quot;Установщик модулей {#module-installer}&quot;"></a></h2><p>Инсталлятор модуля KernelSU - это модуль KernelSU, упакованный в zip-файл, который может быть прошит в APP-менеджере KernelSU. Простейший установщик модуля KernelSU - это просто модуль KernelSU, упакованный в zip-файл.</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;--- (Необязательно, более подробно позже)</span></span>
<span class="line"><span style="color:#e1e4e8;">│ Этот скрипт будет использоваться в update-binary</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;">module.zip</span></span>
<span class="line"><span style="color:#24292e;"></span></span>
<span class="line"><span style="color:#24292e;">├── customize.sh &lt;--- (Необязательно, более подробно позже)</span></span>
<span class="line"><span style="color:#24292e;">│ Этот скрипт будет использоваться в update-binary</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="warning custom-block"><p class="custom-block-title">WARNING</p><p>Модуль KernelSU НЕ поддерживается для установки в пользовательское Recovery!!!</p></div><h3 id="customizing-installation" tabindex="-1">Персонализация <a class="header-anchor" href="#customizing-installation" aria-label="Permalink to &quot;Персонализация {#customizing-installation}&quot;"></a></h3><p>Если вам необходимо настроить процесс установки модуля, то в качестве опции вы можете создать в программе установки скрипт с именем <code>customize.sh</code>. Этот скрипт будет <em>источником</em> (не исполняться!) сценария установщика модуля после извлечения всех файлов и применения стандартных разрешений и secontext. Это очень удобно, если ваш модуль требует дополнительной настройки в зависимости от ABI устройства, или вам необходимо установить специальные разрешения/секонтекст для некоторых файлов модуля.</p><p>Если вы хотите полностью контролировать и настраивать процесс установки, объявите <code>SKIPUNZIP=1</code> в файле <code>customize.sh</code>, чтобы пропустить все шаги установки по умолчанию. При этом ваш <code>customize.sh</code> будет сам отвечать за установку.</p><p>Сценарий <code>customize.sh</code> запускается в оболочке BusyBox <code>ash</code> KernelSU с включенным &quot;Автономным режимом&quot;. Доступны следующие переменные и функции:</p><h4 id="переменные" tabindex="-1">Переменные <a class="header-anchor" href="#переменные" aria-label="Permalink to &quot;Переменные&quot;"></a></h4><ul><li><code>KSU</code> (bool): переменная, отмечающая, что скрипт выполняется в окружении KernelSU, причем значение этой переменной всегда будет true. Ее можно использовать для различения KernelSU и Magisk.</li><li><code>KSU_VER</code> (string): строка версии текущего установленного KernelSU (например, <code>v0.4.0</code>)</li><li><code>KSU_VER_CODE</code> (int): код версии текущего установленного KernelSU в пользовательском пространстве (например, <code>10672</code>)</li><li><code>KSU_KERNEL_VER_CODE</code> (int): код версии текущей установленной KernelSU в пространстве ядра (например, <code>10672</code>)</li><li><code>BOOTMODE</code> (bool): в KernelSU всегда должно быть <code>true</code>.</li><li><code>MODPATH</code> (path): путь, по которому должны быть установлены файлы ваших модулей</li><li><code>TMPDIR</code> (path): место, где вы можете временно хранить файлы</li><li><code>ZIPFILE</code> (path): установочный zip-архив вашего модуля</li><li><code>ARCH</code> (string): архитектура процессора устройства. Значение: <code>arm</code>, <code>arm64</code>, <code>x86</code> или <code>x64</code>.</li><li><code>IS64BIT</code> (bool): <code>true</code>, если <code>$ARCH</code> имеет значение <code>arm64</code> или <code>x64</code>.</li><li><code>API</code> (int): уровень API (версия Android) устройства (например, <code>23</code> для Android 6.0)</li></ul><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>В KernelSU MAGISK_VER_CODE всегда равен 25200, а MAGISK_VER всегда равен v25.2. Пожалуйста, не используйте эти две переменные для определения того, запущен ли он на KernelSU или нет.</p></div><h4 id="functions" tabindex="-1">Функции <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;"> вывести &lt;msg&gt; на консоль</span></span>
<span class="line"><span style="color:#e1e4e8;"> Избегайте использования &#39;echo&#39;, так как он не будет отображаться в консоли пользовательского recovery</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;"> вывести сообщение об ошибке &lt;msg&gt; на консоль и завершить установку</span></span>
<span class="line"><span style="color:#e1e4e8;"> Избегайте использования команды &#39;exit&#39;, так как в этом случае будут пропущены шаги очистки завершения установки</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;"> если [context] не задан, то по умолчанию используется &quot;u:object_r:system_file:s0&quot;.</span></span>
<span class="line"><span style="color:#e1e4e8;"> Эта функция является сокращением для следующих команд:</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;"> если [context] не задан, то по умолчанию используется &quot;u:object_r:system_file:s0&quot;.</span></span>
<span class="line"><span style="color:#e1e4e8;"> для всех файлов в &lt;directory&gt; будет вызвана команда:</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;"> для всех каталогов в &lt;directory&gt; (включая себя самого), он вызовет:</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;"> вывести &lt;msg&gt; на консоль</span></span>
<span class="line"><span style="color:#24292e;"> Избегайте использования &#39;echo&#39;, так как он не будет отображаться в консоли пользовательского recovery</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;"> вывести сообщение об ошибке &lt;msg&gt; на консоль и завершить установку</span></span>
<span class="line"><span style="color:#24292e;"> Избегайте использования команды &#39;exit&#39;, так как в этом случае будут пропущены шаги очистки завершения установки</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;"> если [context] не задан, то по умолчанию используется &quot;u:object_r:system_file:s0&quot;.</span></span>
<span class="line"><span style="color:#24292e;"> Эта функция является сокращением для следующих команд:</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;"> если [context] не задан, то по умолчанию используется &quot;u:object_r:system_file:s0&quot;.</span></span>
<span class="line"><span style="color:#24292e;"> для всех файлов в &lt;directory&gt; будет вызвана команда:</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;"> для всех каталогов в &lt;directory&gt; (включая себя самого), он вызовет:</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">Загрузочные сценарии <a class="header-anchor" href="#boot-scripts" aria-label="Permalink to &quot;Загрузочные сценарии {#boot-scripts}&quot;"></a></h2><p>В KernelSU скрипты делятся на два типа в зависимости от режима их работы: режим post-fs-data и режим late_start service:</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 &lt;prop_name&gt; &lt;prop_value&gt;</code>.</li><li>Запускайте скрипты в этом режиме только в случае необходимости.</li></ul></li><li>режим обслуживания late_start <ul><li>Эта стадия является НЕБЛОКИРУЮЩЕЙ. Ваш скрипт выполняется параллельно с остальным процессом загрузки.</li><li><strong>Это рекомендуемый этап для запуска большинства скриптов.</strong></li></ul></li></ul><p>В KernelSU скрипты запуска делятся на два типа по месту их хранения: общие скрипты и скрипты модулей:</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 service.</li><li>Модули не должны <strong>НЕ</strong> добавлять общие скрипты при установке</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 service.</li></ul></li></ul><p>Все загрузочные скрипты будут выполняться в оболочке BusyBox <code>ash</code> от KernelSU с включенным &quot;Автономным режимом&quot;.</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/ru_RU/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> Редактировать эту страницу на GitHub<!--]--></a></div><!----></div><nav class="prev-next" data-v-ef5dee53><div class="pager" data-v-ef5dee53><a class="pager-link prev" href="/ru_RU/guide/unofficially-support-devices.html" data-v-ef5dee53><span class="desc" data-v-ef5dee53>Previous page</span><span class="title" data-v-ef5dee53>Неофициально поддерживаемые устройства</span></a></div><div class="pager" data-v-ef5dee53><a class="pager-link next" href="/ru_RU/guide/app-profile.html" data-v-ef5dee53><span class="desc" data-v-ef5dee53>Next page</span><span class="title" data-v-ef5dee53>Профиль приложений</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>Выпускается под лицензией GPL3.</p><p class="copyright" data-v-e03eb2e1>Авторские права © 2022-текущее Разработчики KernelSU</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>