Я пытаюсь запутать некоторые классы, которые содержат ряд внутренних перечислений, которые, как я понимаю, скомпилированы для разделения отдельных классов с разделителем "$" с помощью javac во время компиляции.
Однако проблема, с которой я сталкиваюсь, заключается в том, что, хотя содержимое перечислений запутано, родительский / внешний класс, а также сами имена классов перечислений и их имена пакетов не запутываются, поскольку сами классы не быть запутанным.
Мы указали ProGuard для хранения различных других классов в наших проприетарных пакетах (которые обрабатываются правильно), но они не должны влиять на вышеупомянутые классы.
Вот наш config.pro
файл:
-injars .\build\libs\plugin.jar
-outjars .\build\libs\plugin_obfuscated.jar
-libraryjars .\jre\lib\rt.jar
-libraryjars .\jre\lib\jce.jar
-libraryjars .\jre\lib\ext\jfxrt.jar
## Mapping
-classobfuscationdictionary .\config_classnames.pro
-packageobfuscationdictionary .\config_packagenames.pro
-printmapping .\build\libs\proguard_obfuscation_map.txt
-printseeds .\build\libs\proguard_seeds_map.txt
-printusage .\build\libs\proguard_deadusage_map.txt
## Shrinking
-dontshrink
## Optimizations
#-dontoptimize
-optimizations method/removal/parameter,method/inlining/short,
method/inlining/unique
-optimizations code/removal/advanced,code/simplification/string,
code/removal/exception,code/removal/variable,code/merging
-optimizations class/unboxing/enum
-allowaccessmodification
-mergeinterfacesaggressively
#-optimizationpasses 5
#-repackageclasses ''
-flattenpackagehierarchy 'software'
## Obfuscation
-dontusemixedcaseclassnames
-overloadaggressively
## Keep attributes
-keepattributes !InnerClasses,Signature,Deprecated,*Annotation*,Synthetic
-adaptresourcefilecontents **.fxml
# ProGuard doesn't print notes about classes with matching names
-dontnote com.google.**
-dontnote com.sun.**
-dontnote org.apache.log4j.**
-dontnote org.apache.logging.**
-dontnote com.itextpdf.**
-dontnote org.apache.commons.io.**
-dontnote org.apache.commons.codec.**
-dontnote org.apache.commons.lang3.**
-dontnote org.hibernate.**
-dontnote **
-dontwarn **
# Keep specific proprietary classes
-keep class com.mycompany.product.framework.logging.** {
}
-keep class com.mycompany.product.plugin.persistence.** {
<fields>;
<methods>;
}
-keep class com.mycompany.product.plugin.networking.** {
<fields>;
<methods>;
}
-keep class com.mycompany.product.framework.automation.events.** {
<fields>;
<methods>;
}
-keep class com.mycompany.product.plugin.events.** {
<fields>;
<methods>;
}
-keep class com.mycompany.product.plugin.remote.** {
<fields>;
<methods>;
}
-keepnames class com.mycompany.product.plugin.providers.* {
}
-keepclassmembers class com.mycompany.product.framework.events.TestCase
{
<fields>;
<methods>;
}
# Keep class members with @FXML annotations
-keepclassmembers,allowshrinking class * {
@javafx.fxml.FXML
<fields>;
@javafx.fxml.FXML
<methods>;
}
# Keep - Antlr library
-keep class antlr.** {
<fields>;
<methods>;
}
# Keep fasterxml
-keep class com.fasterxml.** {
<fields>;
<methods>;
}
# Keep - Google classes
-keep class com.google.** {
<fields>;
<methods>;
}
... remaining other classes not to be included / sanitized
... followed by standard Proguard template configuration (truncated)
# Keep classes that implement Serializable
-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient <fields>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# Keep - Applications. Keep all application classes, along with their
'main' methods.
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
# Also keep - Enumerations. Keep the special static methods that are
required in enumeration classes.
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# Keep - Native method names. Keep all native class/method names.
-keepclasseswithmembers,includedescriptorclasses,allowshrinking class * {
native <methods>;
}
Классы, которые мы пытаемся запутать, которые включают внутренние / вложенные классы enum, находятся в пакете:
com.mycompany.packageContainingEnum1.enumOuterClass1
com.mycompany.packageContainingEnum1.enumOuterClass1$enum1ClassName
и
com.mycompany.packageContainingEnum2.enumouterClass2
com.mycompany.packageContainingEnum2.enumOuterClass2$enum2ClassName
Как вы видите, пакеты, которые вызывают проблемы, находятся ниже пакета "product" и, следовательно, не должны затрагиваться вышеуказанными правилами?
Есть идеи, почему имена enumouterClass2
и enumOuterClass2$enum2ClassName
(enum) сохраняются? Это кажется странным, поскольку по умолчанию у большинства людей возникают проблемы с предотвращением запутывания внутренних классов.
Большое спасибо за вашу помощь.