Search code examples
androidandroid-fragmentsclassloaderdalvik

ClassLoader loading android class which extends android class from android support library


I am creating an extendable android application and I need to be able to load class which extends Fragment from different application (apk).

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;

This was working fine, but when I tried to use Fragment from Android support library(android.support.v4.app.Fragment) to make my application compatible with older Android devices the problem occurred. To be specific I have been getting exception when I try to cast to Fragment (ClassCastException). I know that this is happenning because both Fragment classes are loaded with different ClassLoader, but I was not able to make it work.


Solution

  • So I have finally figured it out. I needed to remove android support library from my plugin application so with help from this article http://android-developers.blogspot.cz/2011/07/custom-class-loading-in-dalvik.html I was able to use ant to compile my plugin application without android support library classes. Then it worked like a charm.