Module and ModulePackages attributes are not obfuscated consistently
Java class file shrinker, optimizer, obfuscator, and preverifier
Brought to you by:
guardsquare
With ProGuard 6.1.1 and JDK 11, a proguard output jar has a module-info.class whose Module attribute is obfuscated but whose ModulePackages attribute is not. This causes a failure when trying to create a JMOD file from the obfuscated jar:
> jmod create --class-path=obfuscated-mlib/demo.jar obfuscated-mlib/demo.jmod
Error: Package com.a missing from ModulePackages class file attribute
java.lang.module.InvalidModuleDescriptorException: Package com.a missing from ModulePackages class file attribute
at java.base/jdk.internal.module.ModuleInfo.invalidModuleDescriptor(ModuleInfo.java:1092)
at java.base/jdk.internal.module.ModuleInfo.doRead(ModuleInfo.java:325)
at java.base/jdk.internal.module.ModuleInfo.read(ModuleInfo.java:132)
at java.base/java.lang.module.ModuleDescriptor.read(ModuleDescriptor.java:2508)
at jdk.jlink/jdk.tools.jmod.JmodTask$JmodFileWriter.writeModuleInfo(JmodTask.java:548)
at jdk.jlink/jdk.tools.jmod.JmodTask$JmodFileWriter.write(JmodTask.java:481)
at jdk.jlink/jdk.tools.jmod.JmodTask.create(JmodTask.java:438)
at jdk.jlink/jdk.tools.jmod.JmodTask.run(JmodTask.java:208)
at jdk.jlink/jdk.tools.jmod.Main.main(Main.java:34)
The above error message is from the small reproducer at https://github.com/dougxc/proguard-demo.
One workaround for this bug is to use
-keeppackagenames "**".