//
// This Gradle build file illustrates how to process J2ME midlets.
// Usage:
//     gradle -b midlets.gradle proguard
//

// Tell Gradle where to find the ProGuard task.

buildscript {
    repositories {
        flatDir dirs: '../../lib'
    }
    dependencies {
        classpath ':proguard'
    }
}

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

    // Specify the input jars, output jars, and library jars.

    injars  'in.jar'
    outjars 'out.jar'

    libraryjars '/usr/local/java/wtk2.5.2/lib/midpapi20.jar'
    libraryjars '/usr/local/java/wtk2.5.2/lib/cldcapi11.jar'

    // Preverify the code suitably for Java Micro Edition.

    microedition

    // Allow methods with the same signature, except for the return type,
    // to get the same obfuscation name.

    overloadaggressively

    // Put all obfuscated classes into the nameless root package.

    repackageclasses ''

    // Allow classes and class members to be made public.

    allowaccessmodification

    // On Windows, you can't use mixed case class names,
    // should you still want to use the preverify tool.
    //
    // dontusemixedcaseclassnames

    // Save the obfuscation mapping to a file, so you can de-obfuscate any stack
    // traces later on.

    printmapping 'out.map'

    // You can keep a fixed source file attribute and all line number tables to
    // get stack traces with line numbers.

    //renamesourcefileattribute 'SourceFile'
    //keepattributes 'SourceFile,LineNumberTable'

    // You can print out the seeds that are matching the keep options below.

    //printseeds 'out.seeds'

    // Preserve all public midlets.

    keep 'public class * extends javax.microedition.midlet.MIDlet'

    // Preserve all native method names and the names of their classes.

    keepclasseswithmembernames includedescriptorclasses:true, 'class * { \
        native <methods>; \
    }'

    // Your midlet may contain more items that need to be preserved; 
    // typically classes that are dynamically created using Class.forName:

    // keep 'public class mypackage.MyClass'
    // keep 'public interface mypackage.MyInterface'
    // keep 'public class * implements mypackage.MyInterface'
}
