# Shevery
[](https://github.com/HmnDev-Tech/shevery/stargazers) [](https://github.com/HmnDev-Tech/shevery/network/members) [](https://github.com/HmnDev-Tech/shevery/releases) [](https://t.me/hmndevtech)
[English](README.md) | [Русский](README.ru.md) | [Қазақша](README.kk.md) | [Qazaqşa (Latın)](README.kk-Latn.md) | [Português](README.pt.md) | [Español](README.es.md) | [العربية](README.ar.md) | [简体中文](README.zh-CN.md) | [日本語](README.ja.md)
## Статус форка
> [!IMPORTANT]
> **Требуется действие по миграции:** из-за смены идентификатора приложения (`moe.shizuku.privileged.api` -> `com.hamondev.shevery`) вы **ДОЛЖНЫ УДАЛИТЬ** старое официальное приложение Shizuku Manager с устройства перед установкой Shevery. Иначе они будут конфликтовать.
> Апстрим-проект:
>
## Нововведения форка
- Интерфейс менеджера на Jetpack Compose с компонентами Material 3 Expressive, анимациями, переключателями и скруглёнными иконками.
- **Экспериментальная поддержка Dhizuku**: специальная система bridging для Device Owner, доступная в разделе «Лаборатория».
- **Улучшенная функция «Comput»** на основе shell/adb с объяснениями от Gemini, макросами и созданием команд через Commandium AI.
- Работа над поддержкой Android 16/17 с актуальными SDK и инструментами сборки в этом форке.
- Экран ADB-модулей для установки ZIP-модулей и управления ими.
- Возможности модулей: `module.prop`, баннер, переключатель вкл/выкл, `action.sh`, контролируемый политиками `service.sh`, локальный WebUI, удаление, проверки путей, ограничения размера, ограничения вывода и журналы последних запусков.
- Настройки политики модулей: безопасный режим, полный доступ и управление фоновыми действиями.
- Каталог модулей с прямой установкой.
## Документация
- [Руководство по ADB-модулям](docs/adb-modules-guide.md)
- [Справочник API ADB-модулей](docs/adb-modules-api.md)
- [API коннекторов Shizuku](docs/shizuku-connectors.md)
- [Совместимость с Android 17](docs/android-17-compatibility.md)
- [Руководство по публикации ADB-модулей](docs/github-catalog.md)
## Предыстория
При разработке приложений, которым нужен root, самый распространённый способ — выполнять команды в su shell. Например, есть приложение, которое использует команду `pm enable/disable` для включения/отключения компонентов.
У этого способа очень большие недостатки:
1. **Крайне медленно** (создание множества процессов)
2. Нужно обрабатывать текст (**совершенно ненадёжно**)
3. Возможности ограничены доступными командами
4. Даже если у ADB достаточно прав, приложению всё равно нужен root для работы
Shizuku использует совершенно другой подход. Подробное описание — ниже.
## Руководство пользователя и загрузка
## Скриншоты
Нажмите, чтобы открыть скриншоты
 Главный экран |
 Консоль Comput |
 ADB-модули |
 Настройки |
## Как работает Shevery?
Сначала нужно поговорить о том, как приложения используют системные API. Например, если приложение хочет получить список установленных приложений, мы все знаем, что нужно использовать `PackageManager#getInstalledPackages()`. На самом деле это межпроцессное взаимодействие (IPC) процесса приложения и процесса системного сервера, просто Android-фреймворк берёт внутреннюю работу на себя.
Android использует `binder` для такого IPC. `Binder` позволяет серверной стороне узнать uid и pid клиентской стороны, чтобы системный сервер мог проверить, есть ли у приложения разрешение на выполнение операции.
Обычно, если у приложений есть «менеджер» (например, `PackageManager`), то в процессе системного сервера должен быть «сервис» (например, `PackageManagerService`). Можно упрощённо считать: если у приложения есть `binder` «сервиса», оно может communicating с «сервисом». При запуске процесс приложения получает binder'ы системных сервисов.
Shizuku предлагает пользователю сначала запустить процесс — сервер Shizuku — с правами root или через ADB. Когда приложение запускается, `binder` сервера Shizuku также передаётся приложению.
Самая важная возможность, которую предоставляет Shevery, — быть посредником: принимать запросы от приложения, отправлять их системному серверу и возвращать результаты. Подробности смотрите в методе `transactRemote` класса `rikka.shizuku.server.ShizukuService` и в классе `moe.shizuku.api.ShizukuBinderWrapper`.
Таким образом мы достигли цели — использовать системные API с повышенными правами. А для приложения это почти неотличимо от прямого использования системных API.
## Руководство разработчика
### API и пример
https://github.com/RikkaApps/Shizuku-API
### Миграция с версий до v11
> Существующие приложения, конечно же, продолжают работать.
https://github.com/RikkaApps/Shizuku-API#migration-guide-for-existing-applications-use-shizuku-pre-v11
### Обратите внимание
1. Права ADB ограничены
Права ADB ограничены и различаются в разных версиях системы. Посмотреть права, выданные ADB, можно [здесь](https://github.com/aosp-mirror/platform_frameworks_base/blob/master/packages/Shell/AndroidManifest.xml).
Перед вызовом API можно использовать `ShizukuService#getUid`, чтобы проверить, работает ли Shizuku от пользователя ADB, или `ShizukuService#checkPermission`, чтобы проверить, достаточно ли у сервера прав.
2. Ограничение скрытых API начиная с Android 9
Начиная с Android 9 использование скрытых API обычными приложениями ограничено. Используйте другие методы (например, ).
3. Android 8.0 и ADB
В настоящее время сервис Shizuku получает процесс приложения, комбинируя `IActivityManager#registerProcessObserver` и `IActivityManager#registerUidObserver` (26+), чтобы гарантировать отправку процесса при запуске приложения. Однако на API 26 у ADB нет прав на использование `registerUidObserver`, поэтому если нужно использовать Shizuku в процессе, который может быть запущен не через Activity, рекомендуется инициировать отправку binder запуском прозрачной activity.
4. На что обратить внимание при прямом использовании `transactRemote`
* API может отличаться в разных версиях Android, обязательно проверяйте внимательно. Также `android.app.IActivityManager` существует в aidl-форме на API 26 и новее, а `android.app.IActivityManager$Stub` существует только на API 26.
* `SystemServiceHelper.getTransactionCode` может получить неверный код транзакции, например `android.content.pm.IPackageManager$Stub.TRANSACTION_getInstalledPackages` не существует на API 25, и там есть `android.content.pm.IPackageManager$Stub.TRANSACTION_getInstalledPackages_47` (этот случай уже обработан, но не исключены другие подобные ситуации). При методе `ShizukuBinderWrapper` эта проблема не встречается.
## Разработка самого Shizuku
### Сборка
- Клонируйте с `git clone --recurse-submodules`
- Запустите задачу Gradle `:manager:assembleDebug` или `:manager:assembleRelease`
Задача `:manager:assembleDebug` генерирует отлаживаемый сервер. Можно подключить отладчик к `shizuku_server` для отладки сервера. Обратите внимание: в Android Studio в «Run/Debug configurations» должен быть отмечен пункт «Always install with package manager», чтобы сервер использовал актуальный код.
## Как работает «Запуск (через Dhizuku)»?
* Сначала нужно запустить Shevery с помощью ПК/OTG или беспроводной отладки.
* Затем запустите Dhizuku.
- Не запускайте Shevery через Dhizuku первым делом.
## Лицензия
Все файлы кода в этом проекте лицензированы под Apache 2.0
## Благодарности
* [kerneldroid](https://github.com/kerneldroid) — за части интерфейса приложения, систему каталога модулей и поддержку Android 17.
* [RikkaApps/Shizuku](https://github.com/rikkaapps/Shizuku) — за Shizuku API и основные исходники.
* [Landon Moran](https://github.com/LandonMoran) — за Dhizuku, исправления TCP и др.
* [DP-Hridayan](https://github.com/DP-Hridayan/aShellYou) — за части интерфейса «Comput».
* [protonpony/Shizuku-Keeper](https://github.com/protonpony/Shizuku-Keeper) — за «Автозапуск при загрузке через беспроводную отладку».
## И ещё...
Теперь вы можете опубликовать свой ADB-модуль!
Выполните следующие шаги:
- Создайте свой модуль.
- Создайте GH-репозиторий для этого модуля.
- Добавьте топик «shevery-modules».
- Добавьте исходники и релиз с модулем.
> [!CAUTION]
> **Уведомление о бесплатности приложения**
>
> Shevery — **полностью бесплатное приложение**. Не платите сторонним файловым менеджерам или облачным сервисам за загрузку этого приложения.