Expose WrappingMultiDexFile in MultiDexIO.readMultiDexContainer methods

This commit is contained in:
Lanchon 2017-09-22 21:46:02 -03:00
parent 2a79c6d3e0
commit f59046497d

View File

@ -16,6 +16,7 @@ import java.io.IOException;
import java.util.List; import java.util.List;
import org.jf.dexlib2.Opcodes; import org.jf.dexlib2.Opcodes;
import org.jf.dexlib2.dexbacked.DexBackedDexFile;
import org.jf.dexlib2.iface.DexFile; import org.jf.dexlib2.iface.DexFile;
import org.jf.dexlib2.iface.MultiDexContainer; import org.jf.dexlib2.iface.MultiDexContainer;
@ -29,22 +30,25 @@ public class MultiDexIO {
public static DexFile readDexFile(boolean multiDex, File file, DexFileNamer namer, Opcodes opcodes, public static DexFile readDexFile(boolean multiDex, File file, DexFileNamer namer, Opcodes opcodes,
DexIO.Logger logger) throws IOException { DexIO.Logger logger) throws IOException {
MultiDexContainer<? extends DexFile> container = readMultiDexContainer(multiDex, file, namer, opcodes, logger); MultiDexContainer<WrappingMultiDexFile<DexBackedDexFile>> container =
readMultiDexContainer(multiDex, file, namer, opcodes, logger);
return new MultiDexContainerBackedDexFile<>(container); return new MultiDexContainerBackedDexFile<>(container);
} }
public static MultiDexContainer<? extends DexFile> readMultiDexContainer(boolean multiDex, File file, public static MultiDexContainer<WrappingMultiDexFile<DexBackedDexFile>> readMultiDexContainer(boolean multiDex,
DexFileNamer namer, Opcodes opcodes, DexIO.Logger logger) throws IOException { File file, DexFileNamer namer, Opcodes opcodes, DexIO.Logger logger) throws IOException {
MultiDexContainer<? extends DexFile> container = readMultiDexContainer(file, namer, opcodes, logger); MultiDexContainer<WrappingMultiDexFile<DexBackedDexFile>> container =
readMultiDexContainer(file, namer, opcodes, logger);
int entries = container.getDexEntryNames().size(); int entries = container.getDexEntryNames().size();
if (entries == 0) throw new EmptyMultiDexContainerException(file.toString()); if (entries == 0) throw new EmptyMultiDexContainerException(file.toString());
if (!multiDex && entries > 1) throw new MultiDexDetectedException(file.toString()); if (!multiDex && entries > 1) throw new MultiDexDetectedException(file.toString());
return container; return container;
} }
public static MultiDexContainer<? extends DexFile> readMultiDexContainer(File file, DexFileNamer namer, public static MultiDexContainer<WrappingMultiDexFile<DexBackedDexFile>> readMultiDexContainer(File file,
Opcodes opcodes, DexIO.Logger logger) throws IOException { DexFileNamer namer, Opcodes opcodes, DexIO.Logger logger) throws IOException {
MultiDexContainer<? extends DexFile> container = readMultiDexContainer(file, namer, opcodes); MultiDexContainer<WrappingMultiDexFile<DexBackedDexFile>> container =
readMultiDexContainer(file, namer, opcodes);
if (logger != null) { if (logger != null) {
for (String name : container.getDexEntryNames()) { for (String name : container.getDexEntryNames()) {
logger.log(file, name, container.getEntry(name).getClasses().size()); logger.log(file, name, container.getEntry(name).getClasses().size());
@ -53,8 +57,8 @@ public class MultiDexIO {
return container; return container;
} }
public static MultiDexContainer<? extends DexFile> readMultiDexContainer(File file, DexFileNamer namer, public static MultiDexContainer<WrappingMultiDexFile<DexBackedDexFile>> readMultiDexContainer(File file,
Opcodes opcodes) throws IOException { DexFileNamer namer, Opcodes opcodes) throws IOException {
if (file.isDirectory()) return new DirectoryDexContainer(file, namer, opcodes); if (file.isDirectory()) return new DirectoryDexContainer(file, namer, opcodes);
if (!file.isFile()) throw new FileNotFoundException(file.toString()); if (!file.isFile()) throw new FileNotFoundException(file.toString());
if (ZipFileDexContainer.isZipFile(file)) return new ZipFileDexContainer(file, namer, opcodes); if (ZipFileDexContainer.isZipFile(file)) return new ZipFileDexContainer(file, namer, opcodes);