1

Dalvik VM からフレームワーク内の Android サービスにアクセスすることは可能ですか?

Dalvik VM の一部のクラス (libcore/luni クラスなど) を変更し、サービスから結果を取得したいと考えています (データベースやその他の操作で)。

これは可能ですか?

4

1 に答える 1

1

フレームワークは、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()ます。

于 2012-07-31T21:46:23.700 に答える