Skip to content

Instantly share code, notes, and snippets.

@mageddo
Created December 28, 2022 03:04
Show Gist options
  • Select an option

  • Save mageddo/03c48c315e5b2c2316ca1995bc039590 to your computer and use it in GitHub Desktop.

Select an option

Save mageddo/03c48c315e5b2c2316ca1995bc039590 to your computer and use it in GitHub Desktop.

Revisions

  1. mageddo created this gist Dec 28, 2022.
    103 changes: 103 additions & 0 deletions build.gradle
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,103 @@

    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'
    }