モジュール開発ガイド
更新: 8/20/2025字数: 0 字时长: 0 分钟
大部分の内容において、ShiroSU はMagiskとKernelSUとほぼ同じです。ここでは異なる点のみを紹介します。
TIP
ShiroSU を他の root 実装のモジュールマネージャーとしてのみ使用する場合、モジュールの標準は現在の root 実装に準拠する必要があります。ShiroSU は他の root 実装のいかなる動作にも干渉しません。
ただし、モジュールのWebUI は ShiroSU のモジュール WebUIを考慮する必要があります。
IMPORTANT
モジュール内のすべてのテキストファイルがUNIX (LF)改行タイプを使用していることを確認してください。Windows (CR + LF)やMacintosh (CR)ではありません!
Systemless[1]
ShiroSU の Systemless は、Magisk に類似したマウントメカニズムであり、そのインターフェースは.replaceの用法など、Magisk と完全に互換性があります。ただし、ShiroSU のマウントメカニズムは互換性が高く、動的なパーティション認識に基づいています。つまり、モジュールはodmなど、他の root 実装ではマウントできないパーティションを直接 Systemless でマウントでき、そのために余分な労力を費やす必要はありません。
さらに、より高い安全性を確保するために、ShiroSU の Systemless は、モジュールがマウントするファイル/ディレクトリの SELinux コンテキスト、ディレクトリの権限、およびファイル/ディレクトリのユーザー/グループを無視します。ファイルが存在しないディレクトリにマウントされた場合、そのSELinux コンテキスト、権限、ユーザー/グループは親ディレクトリから継承されます。通常、これらの動作はモジュールの実行に影響を与えず、むしろ安定性の向上に役立ちます。
TIP
ShiroSU の Systemless は、モジュールディレクトリ内のsystemlessフォルダを使用してマウントを実行します。モジュールがsystemフォルダを使用して Systemless を使用する場合、systemlessフォルダは自動的に作成されます。
モジュールが ShiroSU のみに対応している場合、systemlessフォルダを直接使用して Systemless を使用できます。
Shell
ShiroSU は、この点で他の root 実装とは大きく異なります。ShiroSU で実行される Shell スクリプトは、デフォルトではBusyBoxで "独立モード" で実行されません。
Shell スクリプトの開発を容易にするために、ShiroSU はsush(Rust で記述されたBash) を使用して Shell スクリプトを実行し、uutils(Rust で記述されたcoreutils) のコマンドセットを優先的に使用し、Magisk の BusyBox を代替として使用します。つまり、コマンドは最初に uutils から取得され、存在しないコマンドのみが BusyBox から取得されます。
BusyBox で "独立モード" で実行されないため、コマンドはPATH環境変数を介して注入されます。モジュールの Shell スクリプト内でPATHをハードコーディングして変更しないでください!
環境変数
区別を容易にするために、ShiroSU はモジュールの実行時に以下の変数を注入します。
SSU(ブール値): ShiroSU 環境で実行されている場合、この値はtrueになります。ただし、$SSU && # code ...を使用してコードを実行できるわけではありません。常に[ "$SSU" = true ]または同様の方法を使用して ShiroSU を検出する必要があります。SSU_VER(文字列): ShiroSU のバージョン番号 (パッチ番号は含まれません)SSU_VER_CODE(整数値): ShiroSU の純粋な数値バージョン番号 (パッチ番号を含む)
Recovery
ShiroSU は Recovery を介したモジュールのインストールをサポートしていません。モジュールのインストール時にMETA-INF/com/google/android/update-binary内のコードは実行されません。
SU 呼び出し
ShiroSU の SU 実装には、デフォルトで Shell コマンドを直接実行するためだけに使用できるsudoが付属しています。たとえば、sudo ls /を実行できます。
sudoは、簡素化されたsu -cの代替としてのみ存在しますが、モジュール内でsudoまたはsu -cを使用して Shell コマンドを実行するべきではありません!
同様に、モジュールはハードコーディングによってコマンドを取得するべきではありません。たとえば、/data/adb/ssu/bin/busybox crondなどです。BusyBox の "独立モード" であっても、PATHを介してコマンドが直接注入されていても、コマンドはすでに直接呼び出すことができ、ハードコーディングされた手動取得は不要です。
ANSI エスケープコード[2]
ShiroSU では、module.propまたは Shell スクリプトでANSI エスケープコードを使用してテキストの表示を豊かにすることができます。たとえば、module.propで次のコードを使用できます。
id=ssu_cmd_ext
name=Command Set Extension
version=Auto-generated by SSU
versionAnsi=\e[1mAuto-generated\e[0m by SSU
versionCode=1
author=SSU Developers (OOM. WG.)
description=Add coreutils, busybox, and bash to /system/bin.
descriptionAnsi=Add \e[1mcoreutils, busybox, and bash\e[0m to \e[1m/system/bin\e[0m.上記のmodule.propを使用すると、モジュールが ShiroSU マネージャーに表示されるときに、Auto-generated、coreutils, busybox, and bash、および/system/binが太字で表示されます。
module.propでは、nameAnsi、versionAnsi、authorAnsi、およびdescriptionAnsiを使用して、ANSI エスケープコードを含むテキストを表示できます。
Ansiサフィックスが含まれていなくても使用できますが、互換性を確保するために、そうしてください。
ShiroSU はmodule.propの内容を順番に解析して読み取るため、Ansiサフィックスを含む値が後にあることを確認してください。展開してレンダリング効果を表示

モジュール WebUI
ShiroSU とKernelSUも同様に、モジュールが WebUI を使用して機能を提供することを許可しています。詳細については、モジュール WebUIを参照してください。
module.prop
ShiroSU マネージャーには、module.propが破損しているか、仕様に準拠しているかを検出するメカニズムがあります。破損しているか、仕様に準拠していない場合、ShiroSU マネージャーはそのモジュールの上部にラベルを表示します。
WARNING
一部のモジュールでは、sedコマンドを使用してmodule.propを変更し、コンテンツをリアルタイムで更新していますが、この方法ではmodule.propファイルが破損する可能性がいくらかあります。sedを使用した変更を避けたり、他の方法でリアルタイムコンテンツを表示したり、module.propの破損検出メカニズムを実装して、破損時にデフォルトコンテンツに復元したりすることもできます。
ShiroSU マネージャーは、具体的に次の内容を検出します。
module.prop内に構文に準拠しないコンテンツが含まれているかどうかid、name、version、author、descriptionが空かどうか (Ansiサフィックスが付いている場合も同様に検出)idが次の正規表現に準拠しているかどうか:^[a-zA-Z][a-zA-Z0-9._-]+$versionCodeが0より大きいかどうかmodule.prop内に大文字と小文字の区別が正しくない箇所があるかどうか (ShiroSU マネージャーは正常に解析しますが、ラベルは表示されます)
module.propが破損しているだけの場合は、モジュールを再インストールすることで通常この問題を解決できます。仕様に準拠していない場合は、開発者が自分で修正してこの問題を解決する必要があります。
カーネルインターフェース
ShiroSU は/data/adb/ssu/._settingsをカーネル設定ディレクトリとして使用します。通常、次のファイルが含まれます。
._su_list: スーパーユーザー権限の使用を許可されたリスト._bypass_list: SELinux 制限をバイパスするリスト._hide_list: root 使用の痕跡を隠す必要があるリスト
上記のファイルはすべて、バイナリ UID(32 ビット整数) +\0+パッケージ名形式で保存され、複数の値は\nで区切られます
IMPORTANT
上記のファイルはすべて読み取り専用です。モジュール/ソフトウェアは ShiroSU のカーネル構成ファイルを変更するべきではありません。ShiroSU マネージャーのみが変更権限を持っています!
他のモジュール/ソフトウェアによる変更は無効になるはずです。ShiroSU は今後のアップデートで、カーネル構成ファイルへの書き込み制限を段階的に追加します。
その他の違い
ShiroSU は、今後のアップデートでモジュールバックアップインターフェース、モジュール更新インターフェース (更新時に元のモジュールのコードを実行)、モジュールストレージインターフェースなどの機能を提供する予定です。これらの内容はまだ計画段階であり、今後のアップデートでリリースされます。



白彩恋
YumeYuka