Created
December 28, 2022 03:04
-
-
Save mageddo/03c48c315e5b2c2316ca1995bc039590 to your computer and use it in GitHub Desktop.
Proguard
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
buildscript { | |
repositories { | |
mavenLocal() | |
mavenCentral() | |
} | |
dependencies { | |
classpath 'com.guardsquare:proguard-gradle:7.3.0' | |
} | |
} | |
// Define a ProGuard task. | |
task ('proguard', type: proguard.gradle.ProGuardTask) { | |
// You should probably import a more compact ProGuard-style configuration | |
// file for all static settings, but we're specifying them all here, for | |
// the sake of the example. | |
//configuration 'configuration.pro' | |
verbose | |
// Specify the input jars, output jars, and library jars. | |
injars "${buildDir}/libs/cross-os-core-0.3.0.jar" | |
outjars "${buildDir}/libs/obfuscated.jar" | |
// Automatically handle the Java version of this build. | |
if (System.getProperty('java.version').startsWith('1.')) { | |
// Before Java 9, the runtime classes were packaged in a single jar file. | |
libraryjars "${System.getProperty('java.home')}/lib/rt.jar" | |
} else { | |
// As of Java 9, the runtime classes are packaged in modular jmod files. | |
libraryjars "${System.getProperty('java.home')}/jmods/java.base.jmod", jarfilter: '!**.jar', filter: '!module-info.class' | |
//libraryjars "${System.getProperty('java.home')}/jmods/....." | |
} | |
//libraryjars 'junit.jar' | |
//libraryjars 'servlet.jar' | |
//libraryjars 'jai_core.jar' | |
//... | |
// Save the obfuscation mapping to a file, so you can de-obfuscate any stack | |
// traces later on. Keep a fixed source file attribute and all line number | |
// tables to get line numbers in the stack traces. | |
// You can comment this out if you're not interested in stack traces. | |
printmapping 'out.map' | |
renamesourcefileattribute 'SourceFile' | |
keepattributes 'SourceFile,LineNumberTable' | |
// Preserve all annotations. | |
keepattributes '*Annotation*' | |
// You can print out the seeds that are matching the keep options below. | |
//printseeds 'out.seeds' | |
// Preserve all public applications. | |
keepclasseswithmembers 'public class * { \ | |
public static void main(java.lang.String[]); \ | |
}' | |
// Preserve all native method names and the names of their classes. | |
keepclasseswithmembernames includedescriptorclasses: true, 'class * { \ | |
native <methods>; \ | |
}' | |
// Preserve the special static methods that are required in all enumeration | |
// classes. | |
keepclassmembers allowoptimization: true, 'enum * { \ | |
public static **[] values(); \ | |
public static ** valueOf(java.lang.String); \ | |
}' | |
// Explicitly preserve all serialization members. The Serializable interface | |
// is only a marker interface, so it wouldn't save them. | |
// You can comment this out if your application doesn't use serialization. | |
// If your code contains serializable classes that have to be backward | |
// compatible, please refer to the manual. | |
keepclassmembers 'class * implements java.io.Serializable { \ | |
static final long serialVersionUID; \ | |
static final java.io.ObjectStreamField[] serialPersistentFields; \ | |
private void writeObject(java.io.ObjectOutputStream); \ | |
private void readObject(java.io.ObjectInputStream); \ | |
java.lang.Object writeReplace(); \ | |
java.lang.Object readResolve(); \ | |
}' | |
// Your application may contain more items that need to be preserved; | |
// typically classes that are dynamically created using Class.forName: | |
// keep 'public class com.example.MyClass' | |
// keep 'public interface com.example.MyInterface' | |
// keep 'public class * implements com.example.MyInterface' | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment