2012-11-17 62 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