diff options
Diffstat (limited to 'src/proguard/io/DataEntryCopier.java')
-rw-r--r-- | src/proguard/io/DataEntryCopier.java | 204 |
1 files changed, 154 insertions, 50 deletions
diff --git a/src/proguard/io/DataEntryCopier.java b/src/proguard/io/DataEntryCopier.java index 440e73b..63b2fa9 100644 --- a/src/proguard/io/DataEntryCopier.java +++ b/src/proguard/io/DataEntryCopier.java @@ -2,7 +2,7 @@ * ProGuard -- shrinking, optimization, obfuscation, and preverification * of Java bytecode. * - * Copyright (c) 2002-2013 Eric Lafortune (eric@graphics.cornell.edu) + * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) * * This program 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 @@ -120,19 +120,22 @@ public class DataEntryCopier implements DataEntryReader String input = args[0]; String output = args[1]; + boolean outputIsApk = output.endsWith(".apk") || + output.endsWith(".ap_"); boolean outputIsJar = output.endsWith(".jar"); + boolean outputIsAar = output.endsWith(".aar"); boolean outputIsWar = output.endsWith(".war"); boolean outputIsEar = output.endsWith(".ear"); boolean outputIsZip = output.endsWith(".zip"); DataEntryWriter writer = new DirectoryWriter(new File(output), + outputIsApk || outputIsJar || + outputIsAar || outputIsWar || outputIsEar || outputIsZip); - if (!outputIsJar) - { // Zip up any zips, if necessary. DataEntryWriter zipWriter = new JarWriter(writer); if (outputIsZip) @@ -150,6 +153,23 @@ public class DataEntryCopier implements DataEntryReader writer); } + // Zip up any ears, if necessary. + DataEntryWriter earWriter = new JarWriter(writer); + if (outputIsEar) + { + // Always zip. + writer = earWriter; + } + else + { + // Only zip up ears. + writer = new FilteredDataEntryWriter(new DataEntryParentFilter( + new DataEntryNameFilter( + new ExtensionMatcher(".ear"))), + earWriter, + writer); + } + // Zip up any wars, if necessary. DataEntryWriter warWriter = new JarWriter(writer); if (outputIsWar) @@ -166,79 +186,163 @@ public class DataEntryCopier implements DataEntryReader warWriter, writer); } - } - // Zip up any jars, if necessary. - DataEntryWriter jarWriter = new JarWriter(writer); - if (outputIsJar) - { - // Always zip. - writer = jarWriter; - } - else - { - // Only zip up jars. - writer = new FilteredDataEntryWriter(new DataEntryParentFilter( - new DataEntryNameFilter( - new ExtensionMatcher(".jar"))), - jarWriter, - writer); - } + // Zip up any aars, if necessary. + DataEntryWriter aarWriter = new JarWriter(writer); + if (outputIsAar) + { + // Always zip. + writer = aarWriter; + } + else + { + // Only zip up aars. + writer = new FilteredDataEntryWriter(new DataEntryParentFilter( + new DataEntryNameFilter( + new ExtensionMatcher(".aar"))), + aarWriter, + writer); + } + + // Zip up any jars, if necessary. + DataEntryWriter jarWriter = new JarWriter(writer); + if (outputIsJar) + { + // Always zip. + writer = jarWriter; + } + else + { + // Only zip up jars. + writer = new FilteredDataEntryWriter(new DataEntryParentFilter( + new DataEntryNameFilter( + new ExtensionMatcher(".jar"))), + jarWriter, + writer); + } + + // Zip up any apks, if necessary. + DataEntryWriter apkWriter = new JarWriter(writer); + if (outputIsApk) + { + // Always zip. + writer = apkWriter; + } + else + { + // Only zip up apks. + writer = new FilteredDataEntryWriter(new DataEntryParentFilter( + new DataEntryNameFilter( + new ExtensionMatcher(".apk"))), + apkWriter, + writer); + } // Create the copying DataEntryReader. DataEntryReader reader = new DataEntryCopier(writer); - + boolean inputIsApk = input.endsWith(".apk") || + input.endsWith(".ap_"); boolean inputIsJar = input.endsWith(".jar"); + boolean inputIsAar = input.endsWith(".aar"); boolean inputIsWar = input.endsWith(".war"); + boolean inputIsEar = input.endsWith(".ear"); boolean inputIsZip = input.endsWith(".zip"); - // Unzip any jars, if necessary. - DataEntryReader jarReader = new JarReader(reader); - if (inputIsJar) + // Unzip any apks, if necessary. + DataEntryReader apkReader = new JarReader(reader); + if (inputIsApk) { // Always unzip. - reader = jarReader; + reader = apkReader; } else { - // Only unzip jar entries. + // Only unzip apk entries. reader = new FilteredDataEntryReader(new DataEntryNameFilter( - new ExtensionMatcher(".jar")), - jarReader, + new ExtensionMatcher(".apk")), + apkReader, reader); - // Unzip any wars, if necessary. - DataEntryReader warReader = new JarReader(reader); - if (inputIsWar) + // Unzip any jars, if necessary. + DataEntryReader jarReader = new JarReader(reader); + if (inputIsJar) { // Always unzip. - reader = warReader; + reader = jarReader; } else { - // Only unzip war entries. + // Only unzip jar entries. reader = new FilteredDataEntryReader(new DataEntryNameFilter( - new ExtensionMatcher(".war")), - warReader, + new ExtensionMatcher(".jar")), + jarReader, reader); - } - // Unzip any zips, if necessary. - DataEntryReader zipReader = new JarReader(reader); - if (inputIsZip) - { - // Always unzip. - reader = zipReader; - } - else - { - // Only unzip zip entries. - reader = new FilteredDataEntryReader(new DataEntryNameFilter( - new ExtensionMatcher(".zip")), - zipReader, - reader); + // Unzip any aars, if necessary. + DataEntryReader aarReader = new JarReader(reader); + if (inputIsAar) + { + // Always unzip. + reader = aarReader; + } + else + { + // Only unzip aar entries. + reader = new FilteredDataEntryReader(new DataEntryNameFilter( + new ExtensionMatcher(".aar")), + aarReader, + reader); + + // Unzip any wars, if necessary. + DataEntryReader warReader = new JarReader(reader); + if (inputIsWar) + { + // Always unzip. + reader = warReader; + } + else + { + // Only unzip war entries. + reader = new FilteredDataEntryReader(new DataEntryNameFilter( + new ExtensionMatcher(".war")), + warReader, + reader); + + // Unzip any ears, if necessary. + DataEntryReader earReader = new JarReader(reader); + if (inputIsEar) + { + // Always unzip. + reader = earReader; + } + else + { + // Only unzip ear entries. + reader = new FilteredDataEntryReader(new DataEntryNameFilter( + new ExtensionMatcher(".ear")), + earReader, + reader); + + // Unzip any zips, if necessary. + DataEntryReader zipReader = new JarReader(reader); + if (inputIsZip) + { + // Always unzip. + reader = zipReader; + } + else + { + // Only unzip zip entries. + reader = new FilteredDataEntryReader(new DataEntryNameFilter( + new ExtensionMatcher(".zip")), + zipReader, + reader); + } + } + } + } } } |