我正在创建一个可扩展的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支持库中的Fragment(android.support.v4.app.Fragment)使我的应用程序与旧的Android设备兼容时,问题就出现了。具体来说,当我尝试强制转换为Fragment(ClassCastException)时,我一直处于异常状态。我知道这是发生的,因为两个Fragment类都加载了不同的ClassLoader,但是我无法使它工作。
答案 0 :(得分:1)
所以我终于明白了。我需要从我的插件应用程序中删除android支持库,所以在本文http://android-developers.blogspot.cz/2011/07/custom-class-loading-in-dalvik.html的帮助下,我能够使用ant来编译我的插件应用程序,而不需要android支持库类。然后它就像一个魅力。