2

Android にプラグイン アーキテクチャを実装する実験を行っています。より具体的には、apk クラスのクロスロードです。

私が次のものを持っていると仮定します: apk A と apk B で、インターフェイス IsharedUserIdで同じ定義があり、apk A で定義されており、apk B にはIを実装するクラス IBが含まれています。AndroidManifest.xml

私は次のアプローチを試しました

  1. apk A で、B のコンテキストを取得するために使用し、目的のクラス名createPackageContextを呼び出してロードします。Context.getClassLoaderただし、これにより2つのクラスローダーが作成されるため、 B にロードされたクラス IBをインターフェイス I にキャストできません。つまり、リフレクションを使用する必要があります...

  2. apk B をDexClassLoader( で取得した apk B へのパス) に渡し、「予期しない DEX によって解決されたクラスApplicationInfo.sourceDir」で失敗しました。おそらく、apk B にも重複したインターフェイス I があるためです...

  3. 「 Dalvik でのカスタム クラスのロードbuild xml」のアプローチを変更して従い、 Iを実装する B にクラス IBを含む別の jar を作成し、その jar を apk B のディレクトリに配置します。クラスIBをロードして問題なくIにキャストできるため、このアプローチは有望に見えます。ただし、jar をコピーする必要が生じます。NDK 共有ライブラリが関係している場合に何が起こるかわかりません。assets

私の質問は、build.xml/ant.properties の変更を伴わず、NDK ライブラリで動作するアプローチはありますか?

4

1 に答える 1

1

他のアプローチについてはわかりませんが、アプローチ2では、BをapkにパックするときにインターフェイスIを除外できます。生成されたI.classファイルを除外するだけで十分です。

Fred Chungによるこの投稿が役立つと思い、ヒントが得られるかもしれません。http://android-developers.blogspot.kr/2011/07/custom-class-loading-in-dalvik.html

于 2012-06-06T06:33:18.410 に答える