【发布时间】: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