2012-11-17 34 views
2

我正在开发一个需要有某种插件系统的应用程序。Android,插件系统和反射类

是否有可能在单独的.apk文件中加载反射类?

欢迎任何其他想法。

编辑:解决,谢谢大家。最后我想出了这个:

public Object loadPlugin(String packageName, String className) { 
    try { 
     return (Object) new PathClassLoader(getPackageManager().getPackageInfo(packageName, 0).applicationInfo.sourceDir, null, getClassLoader()).loadClass(className).getConstructor(new Class[]{ Context.class, IXoneApp.class }).newInstance(new Object[] {this, this.appData()}); 
    } catch (NameNotFoundException ex) { 
     Utils.DebugLog(Utils.TAG_FRAMEWORK, "El módulo " + packageName + " no está instalado"); 
     return null; 
    } catch (Exception ex) { 
     Utils.DebugLog(Utils.TAG_FRAMEWORK, "Fallo al invocar el módulo " + packageName + "\n" + ex.getMessage()); 
     return null; 
    } 
} 
+1

不知道它是如何工作的,或者即使http://developer.android.com/reference/dalvik/system/DexClassLoader.html听起来像它可以做那样的事情 – zapl

+1

这听起来不错,它的工作原理。它可能是这样的:'DexClassLoader cl = new DexClassLoader(“/ mnt/sdcard/whatever.apk”,“/ path/temp”,null,getClassLoader());'但是如果我想让用户安装apk?这需要apk安装在该路径上。 – user1831114

回答

0

你必须对“插件”更具体。如果你想要添加单独的功能,你可能想要一个主要的.apk,然后是较小的.apks来实现插件。取决于你想要做什么。

+1

我正在开发一个移动应用程序框架。在主应用程序中,开发人员可以运行某种脚本。我已经在框架中实现了PDF生成和其他东西,但是这些使得.apk变得巨大。通过反思,我可以构建不同的PDF文件,其中一个带有PDF生成功能,但没有它,但我不想那么做。我想完成的是,如果开发人员想要使用PDF生成,那么他将不得不安装PDF插件。 – user1831114