我想使用 ApplicationWrapepr 方法在我的应用程序中使用 multidex,如此处所述https://plus.google.com/104023661970539138053/posts/YTMf8ADTcFg
我使用了 --minimal-main-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<String> getPaths(final String[] sourcePaths) {
List<String> result = new ArrayList<String>();
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
但是,当使用带有此路径的 new DexFile() 时,IOEsxception 会抛出消息“无法打开 dexfile”。