【问题标题】:Android, plugin system and reflected classesAndroid、插件系统和反射类
【发布时间】:2012-11-05 18:27:38
【问题描述】:

我正在开发一个需要某种插件系统的应用程序。

是否可以在单独的 .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;
    }
}

【问题讨论】:

  • 不知道它是如何工作的,或者即使developer.android.com/reference/dalvik/system/… 听起来它可以做这样的事情
  • 听起来不错,很有效。可能是这样的:DexClassLoader cl = new DexClassLoader("/mnt/sdcard/whatever.apk", "/path/temp", null, getClassLoader()); 但是如果我希望用户只安装 apk 怎么办?这要求 apk 位于该路径上。

标签: android class plugins reflection


【解决方案1】:

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

【讨论】:

  • 我正在开发一个移动应用程序框架。从主应用程序,开发人员可以运行某种脚本。我已经在框架中实现了 PDF 生成和其他东西,但是这些使 .apk 变得巨大。通过反射,我可以构建不同的 .apks,一个带有 PDF 生成,一个不带它,但我不希望这样。我想要完成的是,如果开发人员想要使用 PDF 生成,那么他必须安装 PDF 插件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
相关资源
最近更新 更多