我想用ApplicationWrapepr方法在我的應用程序中使用multidex喜歡這裏描述https://plus.google.com/104023661970539138053/posts/YTMf8ADTcFg的Android Multidex列表中的所有類
我用--minimal - 主 - DEX選項,像這樣一個保持文件一起:
android/support/multidex/ZipUtil.class
android/support/multidex/ZipUtil$CentralDirectory.class
android/support/multidex/MultiDex$V14.class
android/support/multidex/MultiDexExtractor$1.class
android/support/multidex/MultiDexExtractor.class
com/<mypackage>/common/MyApplication.class
com/<mypackage>/common/MyApplicationWrapper.class
com/<mypackage>/common/ui/DashboardActivity.class
android/support/multidex/MultiDexApplication.class
android/support/multidex/MultiDex.class
android/support/multidex/MultiDex$V19.class
android/support/multidex/MultiDex$V4.class
這會導致列出的類在我的主要dex文件中沒有問題。我比使用一個庫,使用下面的代碼來列出dexfile中的所有類,但只獲取主「clesses.dex」的條目,而不是所有其他加載的dex文件的條目,因爲新的DexFile只檢查「classes.dex」 :
private static List getPaths(final String [] sourcePaths){ List result = new ArrayList();
for (String s : sourcePaths) {
try {
DexFile dexfile = new DexFile(s);
Enumeration<String> entries = dexfile.entries();
while (entries.hasMoreElements()) {
result.add(entries.nextElement());
}
} catch (IOException ioe) {
Log.w(TAG, "cannot open file=" + s + ";Exception=" + ioe.getMessage());
}
}
return result;
}
了現在單一路徑獲取與確定:
application.getApplicationContext().getApplicationInfo().sourceDir;
導致財產以後要像/data/../myapplicationname.apk
是否有另一種可能性,讓所有班列出的dex文件?或者ClassLoaders中的所有類?該庫對於項目來說至關重要,並且使用這種方法通過稍後的反射來查找組件實現。
EDIT1: 如果發現該classes2.dex文件被劃歸: /data/data/com./code_cache/secondary-dexes/com.-1.apk.classes2.dex
但是,在使用此路徑使用新的DexFile()時,將引發IOEsxception,並顯示消息「無法打開dexfile」。
喜。我認爲這會奏效。由於性能考慮,我們決定使用顯式依賴配置。 – Denny1989 2014-11-18 13:59:51
它在哪裏可以在這個解決方案中失去性能? – 2015-03-29 19:51:46