Dalvik VM からフレームワーク内の Android サービスにアクセスすることは可能ですか?
Dalvik VM の一部のクラス (libcore/luni クラスなど) を変更し、サービスから結果を取得したいと考えています (データベースやその他の操作で)。
これは可能ですか?
Dalvik VM からフレームワーク内の Android サービスにアクセスすることは可能ですか?
Dalvik VM の一部のクラス (libcore/luni クラスなど) を変更し、サービスから結果を取得したいと考えています (データベースやその他の操作で)。
これは可能ですか?
フレームワークは、Dalvik が実行される可能性のあるすべてのコンテキストで実行/セットアップされるわけではないことに注意してください。
とはいえ、簡単なハックとして、リフレクションを使用してフレームワーク クラスを取得できる場合があります。
ただし、正しい方法は、インターフェイスと静的メソッドのようなもので構成される Dalvik コアで API を定義することです。静的メソッドは、コア ライブラリが使用するインターフェイスのインスタンスを登録します。次に、フレームワークで、その登録関数を呼び出すコードを追加します。このようなもの(ここでは非常に単純化されています。たとえば、エラー/権限チェックが必要です):
libcore で:
public interface TheInterface {
void doSomethingInteresting();
...
}
public class TheRegistrar {
private static TheInterface theOne;
public static void register(TheInterface instance) {
theOne = instance;
}
public static TheInterface get() {
return theOne;
}
}
次に、これを使用したい libcore コードで、これを実行しますget()
(そして、それが の場合に対処する準備をしますnull
)。
フレームワークでは、次のように定義します。
public class FrameworkDoohicky implements TheInterface {
...
}
フレームワークの初期化中にへの呼び出しでそれを登録しTheRegistrar.register()
ます。