Android にプラグイン アーキテクチャを実装する実験を行っています。より具体的には、apk クラスのクロスロードです。
私が次のものを持っていると仮定します: apk A と apk B で、インターフェイス IsharedUserId
で同じ定義があり、apk A で定義されており、apk B にはIを実装するクラス IBが含まれています。AndroidManifest.xml
私は次のアプローチを試しました
apk A で、B のコンテキストを取得するために使用し、目的のクラス名
createPackageContext
を呼び出してロードします。Context.getClassLoader
ただし、これにより2つのクラスローダーが作成されるため、 B にロードされたクラス IBをインターフェイス I にキャストできません。つまり、リフレクションを使用する必要があります...apk B を
DexClassLoader
( で取得した apk B へのパス) に渡し、「予期しない DEX によって解決されたクラスApplicationInfo.sourceDir
」で失敗しました。おそらく、apk B にも重複したインターフェイス I があるためです...「 Dalvik でのカスタム クラスのロード
build xml
」のアプローチを変更して従い、 Iを実装する B にクラス IBを含む別の jar を作成し、その jar を apk B のディレクトリに配置します。クラスIBをロードして問題なくIにキャストできるため、このアプローチは有望に見えます。ただし、jar をコピーする必要が生じます。NDK 共有ライブラリが関係している場合に何が起こるかわかりません。assets
私の質問は、build.xml/ant.properties の変更を伴わず、NDK ライブラリで動作するアプローチはありますか?