2

拡張可能な Android アプリケーションを作成していますが、別のアプリケーション (apk) から Fragment を拡張するクラスをロードできる必要があります。

String packageName = "com.something.project";
String className = "com.something.project.TestFragment";
String apkName = getPackageManager().getApplicationInfo(packageName, 0).sourceDir;
PathClassLoader classLoader = new PathClassLoader(apkName,ClassLoader.getSystemClassLoader());
Class<?> clazz = classLoader.loadClass(className);
Fragment f = (Fragment)obj;

これは正常に機能していましたが、Android サポート ライブラリ (android.support.v4.app.Fragment) の Fragment を使用してアプリケーションを古い Android デバイスと互換性を持たせようとすると、問題が発生しました。具体的には、Fragment (ClassCastException) にキャストしようとすると例外が発生します。両方の Fragment クラスが異なる ClassLoader でロードされているため、これが発生していることはわかっていますが、機能させることができませんでした。

4

1 に答える 1

1

だから私はついにそれを理解しました。プラグイン アプリケーションから Android サポート ライブラリを削除する必要があったため、この記事http://android-developers.blogspot.cz/2011/07/custom-class-loading-in-dalvik.htmlの助けを借りて、 ant を使用できました。 Androidサポートライブラリクラスなしでプラグインアプリケーションをコンパイルします。その後、それは魅力のように機能しました。

于 2013-08-31T23:30:56.093 に答える