diff --git a/src/main/java/lanchon/multidexlib2/BasicMultiDexFile.java b/src/main/java/lanchon/multidexlib2/BasicMultiDexFile.java index 03bb446..01299f0 100644 --- a/src/main/java/lanchon/multidexlib2/BasicMultiDexFile.java +++ b/src/main/java/lanchon/multidexlib2/BasicMultiDexFile.java @@ -18,7 +18,7 @@ import org.jf.dexlib2.iface.DexFile; import org.jf.dexlib2.iface.MultiDexContainer; import org.jf.dexlib2.iface.MultiDexContainer.MultiDexFile; -public class BasicMultiDexFile> implements MultiDexFile { +public class BasicMultiDexFile> implements WrappingMultiDexFile { private final T container; private final String entryName; @@ -50,4 +50,9 @@ public class BasicMultiDexFile { +public class DirectoryDexContainer extends AbstractMultiDexContainer { public DirectoryDexContainer(File directory, DexFileNamer namer, Opcodes opcodes) throws IOException { - Map entryMap = new TreeMap<>(new DexFileNameComparator(namer)); + Map entryMap = new TreeMap<>(new DexFileNameComparator(namer)); String[] names = directory.list(); if (names == null) throw new IOException("Cannot access directory: " + directory); for (String entryName : names) { File file = new File(directory, entryName); if (file.isFile() && namer.isValidName(entryName)) { DexFile dexFile = RawDexIO.readRawDexFile(file, opcodes); - MultiDexFile multiDexFile = new BasicMultiDexFile<>(this, entryName, dexFile); + WrappingMultiDexFile multiDexFile = new BasicMultiDexFile<>(this, entryName, dexFile); if (entryMap.put(entryName, multiDexFile) != null) throwDuplicateEntryName(entryName); } } diff --git a/src/main/java/lanchon/multidexlib2/SingletonDexContainer.java b/src/main/java/lanchon/multidexlib2/SingletonDexContainer.java index d27f96c..6834c4d 100644 --- a/src/main/java/lanchon/multidexlib2/SingletonDexContainer.java +++ b/src/main/java/lanchon/multidexlib2/SingletonDexContainer.java @@ -15,9 +15,8 @@ import java.util.Map; import org.jf.dexlib2.Opcodes; import org.jf.dexlib2.iface.DexFile; -import org.jf.dexlib2.iface.MultiDexContainer.MultiDexFile; -public class SingletonDexContainer extends AbstractMultiDexContainer { +public class SingletonDexContainer extends AbstractMultiDexContainer { // I insist that some dex container entries do not have names // even though dexlib2 does not allow null entry names. @@ -33,8 +32,8 @@ public class SingletonDexContainer extends AbstractMultiDexContainer(this, entryName, dexFile); - Map entryMap = Collections.singletonMap(entryName, multiDexFile); + WrappingMultiDexFile multiDexFile = new BasicMultiDexFile<>(this, entryName, dexFile); + Map entryMap = Collections.singletonMap(entryName, multiDexFile); initialize(entryMap, opcodes); } diff --git a/src/main/java/lanchon/multidexlib2/WrappingMultiDexFile.java b/src/main/java/lanchon/multidexlib2/WrappingMultiDexFile.java new file mode 100644 index 0000000..53d0acb --- /dev/null +++ b/src/main/java/lanchon/multidexlib2/WrappingMultiDexFile.java @@ -0,0 +1,20 @@ +/* + * DexPatcher - Copyright 2015-2017 Rodrigo Balerdi + * (GNU General Public License version 3 or later) + * + * DexPatcher is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + */ + +package lanchon.multidexlib2; + +import org.jf.dexlib2.iface.DexFile; +import org.jf.dexlib2.iface.MultiDexContainer.MultiDexFile; + +public interface WrappingMultiDexFile extends MultiDexFile { + + DexFile getWrappedDexFile(); + +} diff --git a/src/main/java/lanchon/multidexlib2/ZipFileDexContainer.java b/src/main/java/lanchon/multidexlib2/ZipFileDexContainer.java index 7c81503..1618c87 100644 --- a/src/main/java/lanchon/multidexlib2/ZipFileDexContainer.java +++ b/src/main/java/lanchon/multidexlib2/ZipFileDexContainer.java @@ -21,9 +21,8 @@ import java.util.zip.ZipFile; import org.jf.dexlib2.Opcodes; import org.jf.dexlib2.iface.DexFile; -import org.jf.dexlib2.iface.MultiDexContainer.MultiDexFile; -public class ZipFileDexContainer extends AbstractMultiDexContainer { +public class ZipFileDexContainer extends AbstractMultiDexContainer { public static boolean isZipFile(File zip) { if (!zip.isFile()) return false; @@ -37,7 +36,7 @@ public class ZipFileDexContainer extends AbstractMultiDexContainer } public ZipFileDexContainer(File zip, DexFileNamer namer, Opcodes opcodes) throws IOException { - Map entryMap = new TreeMap<>(new DexFileNameComparator(namer)); + Map entryMap = new TreeMap<>(new DexFileNameComparator(namer)); ZipFile zipFile = new ZipFile(zip); try { Enumeration zipEntries = zipFile.entries(); @@ -52,7 +51,7 @@ public class ZipFileDexContainer extends AbstractMultiDexContainer } finally { inputStream.close(); } - MultiDexFile multiDexFile = new BasicMultiDexFile<>(this, entryName, dexFile); + WrappingMultiDexFile multiDexFile = new BasicMultiDexFile<>(this, entryName, dexFile); if (entryMap.put(entryName, multiDexFile) != null) throwDuplicateEntryName(entryName); } }