diff options
author | Paul Duffin <paulduffin@google.com> | 2017-11-10 14:20:59 +0000 |
---|---|---|
committer | Paul Duffin <paulduffin@google.com> | 2018-01-08 19:51:15 +0000 |
commit | 45e52b5ab37a26149ce031caa44bb167da217667 (patch) | |
tree | 61a3b7248024bbf31d1f180e9c2477696f042517 /src/proguard/InputReader.java | |
parent | e8bc3b2a283ea35317a8096dcf2c3d9959af40b2 (diff) | |
download | proguard-45e52b5ab37a26149ce031caa44bb167da217667.tar.gz |
Add -systemjars support to Proguardandroid-wear-9.0.0_r9android-wear-9.0.0_r8android-wear-9.0.0_r7android-wear-9.0.0_r6android-wear-9.0.0_r5android-wear-9.0.0_r4android-wear-9.0.0_r34android-wear-9.0.0_r33android-wear-9.0.0_r32android-wear-9.0.0_r31android-wear-9.0.0_r30android-wear-9.0.0_r3android-wear-9.0.0_r29android-wear-9.0.0_r28android-wear-9.0.0_r27android-wear-9.0.0_r26android-wear-9.0.0_r25android-wear-9.0.0_r24android-wear-9.0.0_r23android-wear-9.0.0_r22android-wear-9.0.0_r21android-wear-9.0.0_r20android-wear-9.0.0_r2android-wear-9.0.0_r19android-wear-9.0.0_r18android-wear-9.0.0_r17android-wear-9.0.0_r16android-wear-9.0.0_r15android-wear-9.0.0_r14android-wear-9.0.0_r13android-wear-9.0.0_r12android-wear-9.0.0_r11android-wear-9.0.0_r10android-p-preview-3android-p-preview-2android-9.0.0_r47android-9.0.0_r46android-9.0.0_r45android-9.0.0_r44android-9.0.0_r43android-9.0.0_r42android-9.0.0_r41android-9.0.0_r40android-9.0.0_r39android-9.0.0_r38android-9.0.0_r37android-9.0.0_r36android-9.0.0_r35android-9.0.0_r34android-9.0.0_r33android-9.0.0_r32android-9.0.0_r31android-9.0.0_r30android-9.0.0_r22android-9.0.0_r21android-9.0.0_r20android-9.0.0_r19android-9.0.0_r16android-9.0.0_r12android-9.0.0_r11pie-qpr3-s1-releasepie-qpr3-releasepie-qpr3-b-releasepie-qpr2-releasepie-qpr1-s3-releasepie-qpr1-s2-releasepie-qpr1-s1-releasepie-qpr1-releasepie-dr1-releasepie-dr1-devpie-devpie-b4s4-releasepie-b4s4-dev
Try and address the problem of using Proguard with applications that
duplicate some classes in android.jar, e.g. applications that
statically include junit.
See https://sourceforge.net/p/proguard/discussion/182455/thread/76430d9e/
for more information.
Rebuilt proguard with ant 1.10.1 and gradle 2.1
Bug: 30188076
Bug: 69156675
Test: make checkbuild
Change-Id: I574becf07ed4a247e966f2c023e4b95b5ffc4011
Diffstat (limited to 'src/proguard/InputReader.java')
-rw-r--r-- | src/proguard/InputReader.java | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/proguard/InputReader.java b/src/proguard/InputReader.java index 503ce7e..488b6ff 100644 --- a/src/proguard/InputReader.java +++ b/src/proguard/InputReader.java @@ -59,6 +59,28 @@ public class InputReader DuplicateClassPrinter duplicateClassPrinter = new DuplicateClassPrinter(notePrinter); + // Android-added: Read the classes from the systemjars. + // These are read into the library ClassPool before the programjars so that any duplicates + // between these are programjars will result in the classes in the programjars being + // ignored. + // Read the system class files, if any. + if (configuration.systemJars != null) + { + // Prepare a data entry reader to filter all classes, + // which are then decoded to classes by a class reader, + // which are then filtered by removing any that already exist in the libraryClassPool. + // which are then put in the class pool by a class pool filler. + readInput("Reading system ", + configuration.systemJars, + new ClassFilter( + new ClassReader(true /* isLibrary */, + configuration.skipNonPublicLibraryClasses, + configuration.skipNonPublicLibraryClassMembers, + warningPrinter, + new ClassPresenceFilter(libraryClassPool, duplicateClassPrinter, + new ClassPoolFiller(libraryClassPool))))); + } + // Read the program class files. // Prepare a data entry reader to filter all classes, // which are then decoded to classes by a class reader, @@ -71,7 +93,9 @@ public class InputReader configuration.skipNonPublicLibraryClassMembers, warningPrinter, new ClassPresenceFilter(programClassPool, duplicateClassPrinter, - new ClassPoolFiller(programClassPool))))); + // Android-changed: Filter out classes already read from systemjars. + new ClassPresenceFilter(libraryClassPool, duplicateClassPrinter, + new ClassPoolFiller(programClassPool)))))); // Check if we have at least some input classes. if (programClassPool.size() == 0) |