Android の世界では、2 つの一般的なインジェクション/ハイジャック/フック フレームワークがあります。
XposedおよびAndroid サブストレート
Xposed のメカニズムは、開発チュートリアルで説明されています。
Android Substrateの作成者は、FAQとhereで2 つのフレームワークを比較しましたが、その仕組みについては言及していません。
私はただ疑問に思います:
Android Substrate はどのように機能しますか?
Android の世界では、2 つの一般的なインジェクション/ハイジャック/フック フレームワークがあります。
XposedおよびAndroid サブストレート
Xposed のメカニズムは、開発チュートリアルで説明されています。
Android Substrateの作成者は、FAQとhereで2 つのフレームワークを比較しましたが、その仕組みについては言及していません。
私はただ疑問に思います:
Android Substrate はどのように機能しますか?
Jay Freeman(Saurik) は、この投稿 ( http://www.cydiasubstrate.com/id/34058d37-3198-414f-a696-73e97e0a80db/ ) で、xposed と Substrate の違いについて話し、それらが方法でどのように違いがあるかについても話します彼らは素晴らしい読み物です。
2 つのフレームワークには多くの類似点がありますが、フック プロセスなどの実際の実装は、両方のフレームワークを並行して実行できるほど十分に異なります。
ただし、XPosed よりも Substrate に見られる最大の利点は、XPosed が Java セキュリティ モデルを削除し、Substrate がそれを保持するという事実と、説明したようにメソッドをフックする前にクラスがロードされるのを待機できることです。 「直交性」に関する@xmllmxの回答からの次の引用。
これを簡単にするために、Xposed は一般的なユース ケース用の一連のヘルパーを提供します。VM の起動時、Zygote が制御を取得したとき、特定のパッケージがロードされたとき、またはコマンド ライン アプリケーションが実行されたときにフックできます。これらのどれを使用するかを知る必要がありますが、動的なランタイムによって作成されたクラス ローダー (ダウンロードされたコードなど) を介してロードされたクラスをフックする方法はまだ不明です。
代わりに、Substrate は、MS.hookClassLoad のおかげで、このすべてを排除します。MS.hookClassLoad は、特定のクラスが任意のクラス ローダーからいつでもロードされるのを待機できる API を提供します。これにより、変更に対して脆弱でなく、単純なミスが発生しにくく、ターゲット アプリケーションの開発者がプログラムのコードをロードする方法による制限が少なくなる方法でフックを作成できます。
結論として、とにかく私の意見では、両方のフレームワークは非常に似ており、同じ目標を達成するための実行可能なオプションです。それらを区別する唯一の主要な重み付けの事実は、それぞれがリリースされたときの間のタイムスケールです. XPosed はずっと前から存在しており、Xposed のリリースと Android 用の Cydia Substrate のリリースの間の合間に試行錯誤を繰り返してきました。Jay Freeman (Saurik) はそれを公然と認めています。
これに関係なく、Cydia Substrate は XPosed の強力で非常に実行可能な代替手段です。さらに、(前述のように) 両方のフレームワークを競合することなくデバイスにインストールできるため、これらのフレームワークのいずれかの開発だけに限定する必要はありません。現在インストールされている XPosed モジュール、パッケージ、または拡張機能を使用できなくなります。