我正在創建一個框架供我的工作環境中的許多部門使用。我需要一種方法來從各個部門的apk動態加載類到框架中。例如一種將部門A的內容提供者類動態加載到框架中的方法。動態加載來自其他APK的類
我已經有一點運氣試圖找出這一點,任何幫助將不勝感激。謝謝。
我正在創建一個框架供我的工作環境中的許多部門使用。我需要一種方法來從各個部門的apk動態加載類到框架中。例如一種將部門A的內容提供者類動態加載到框架中的方法。動態加載來自其他APK的類
我已經有一點運氣試圖找出這一點,任何幫助將不勝感激。謝謝。
我希望這會是一個安全漏洞,如果這是允許的,並且您的設計風險很高,因爲您將程序緊密結合到其他人的程序中。
更好的解決方案是能夠僅從您的活動中使用內容提供者,就像您可以訪問Android中的聯繫人一樣。
如果你想從你的設備上當前安裝的另一個.apk中加載一個已知的類,你可以採用下面的方法(假設你的類有一個默認的構造函數)。另請注意,您必須知道另一個.apk文件的包名稱,另一個.apk文件的包名稱必須與您的應用程序包名稱不同。
private Object loadClass(String packageName, String className){
Object plugin = null;
try {
PackageManager packageManager = getPackageManager();
ApplicationInfo appInfo = packageManager.getApplicationInfo(packageName, 0);
DexFile df = new DexFile(appInfo.sourceDir);
ClassLoader cl = getClassLoader();
Class classToInvestigate = df.loadClass(className, cl);
plugin = classToInvestigate.newInstance();
} catch (Exception e) {
System.out.println("EXCEPTION");
}
finally{
return plugin;
}
}
它將被緊密耦合。基本上我有一個服務來發送和接收數據。應用程序可以向服務註冊,所以當收到數據時,它知道在哪裏存儲內容(因此我需要能夠加載該特定數據庫的內容提供者類)。 我猜框架不是一個好詞。它更多的是提供一個jar文件來訪問服務的開發工具包。但我堅持這個問題...... – jjNford
因此,把所有的內容提供商放在一個地方,但Android的優勢是隻需要提供一個內容提供商,它可以處理您需要的內容並保存/更新數據。 Android基於鬆耦合,因此您可能需要遵循該設計。 –
我同意。此應用程序將處理非常敏感的信息。現在我有一個遠程前臺服務運行它並接收和發送網絡數據。 APK可以綁定到服務並註冊廣播接收器和內容觀察器。這個想法是,當新數據進入手機時,它可以放入數據庫並觸發將發送廣播的內容觀察者光標。通過這種方式,部門apk的開發人員可以處理他們想要的方式。它也保證死apk會收到一個他們有新數據的信號。我只需要一種方法將內容 – jjNford