Je suis en train de développer une application qui nécessitera une sorte de système de plugin.Android, système de plugins et classes reflétées
Est-il possible de charger des classes avec la réflexion sur un .apk distinct?
Toutes les autres idées sont les bienvenues.
EDIT: Résolu, merci à tous. En fin de compte, je suis venu avec ceci:
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;
}
}
Aucune idée de comment cela fonctionne ou même si, mais http://developer.android.com/reference/dalvik/system/DexClassLoader.html sonne comme il pourrait faire quelque chose comme ça – zapl
Cela semble bien, ça fonctionne. Cela pourrait être quelque chose comme ceci: 'DexClassLoader cl = nouveau DexClassLoader ("/mnt/sdcard/whatever.apk ","/chemin/temp ", null, getClassLoader());' Mais si je veux que l'utilisateur installe juste l'apk? Cela nécessite que l'apk soit sur ce chemin. – user1831114