モジュール開発ガイド
更新: 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 は、今後のアップデートでモジュールバックアップインターフェース、モジュール更新インターフェース (更新時に元のモジュールのコードを実行)、モジュールストレージインターフェースなどの機能を提供する予定です。これらの内容はまだ計画段階であり、今後のアップデートでリリースされます。