я хотел бы использовать подход 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, что нормально. Затем я использую библиотеку, которая использует следующий код для перечисления всех классов в файле dex, но просто получает записи основного «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: если обнаружено, что файл class2.dex находится в папке: /data/data/com./code_cache/secondary-dexes/com.-1.apk.classes2.dex
однако при использовании new DexFile() с этим путем IOEsxception выдается с сообщением «невозможно открыть dexfile».