title: Android Build with Gradle and ProGuard : "The output jar must be specified after an input jar, or it will be empty"
body: <p>I'm creating a build with different flavors with Gradle. It used to run quite good until now, until I wanted to enable <code>Proguard</code>. I enabled <code>minifyEnabled</code> for my Release Build and now I'm having an exception saying : </p>
  
  <p>"<code>Caused by: org.gradle.internal.UncheckedException: java.io.IOException: The output jar [.../app/build/intermediates/multi-dex/dev/release/componentClasses.jar] must be specified after an input jar, or it will be empty.</code>"</p>
  
  <p>Does anybody know what is causing this exception ? I basically want to enable ProGuard before I release my application. Here is my Gradle file below.</p>
  
  <pre><code>lintOptions {
      abortOnError false
  }
  
  dexOptions{
      incremental true
      javaMaxHeapSize "4g"
  }
  
  defaultConfig {
          applicationId "..."
          minSdkVersion 14
          targetSdkVersion 22
          versionCode 1
          versionName "1.0"
          multiDexEnabled true
      }
  
  buildTypes {
  
      release {
          minifyEnabled true
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
          signingConfig signingConfigs.release
      }
  
      debug {
          minifyEnabled false
          shrinkResources false
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
          signingConfig signingConfigs.debug
      }
  }
  </code></pre>
  
  <p>ProGuard Rules file.</p>
  
  <pre><code># Add project specific ProGuard rules here.
  # By default, the flags in this file are appended to flags specified
  # in /Users/osayilgan/Development/Android/sdk/tools/proguard/proguard-android.txt
  # You can edit the include path and order by changing the proguardFiles
  # directive in build.gradle.
  #
  # For more details, see
  #   http://developer.android.com/guide/developing/tools/proguard.html
  
  # Add any project specific keep options here:
  
  # If your project uses WebView with JS, uncomment the following
  # and specify the fully qualified class name to the JavaScript interface
  # class:
  #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
  #   public *;
  #}
  
  -keepnames public class * extends io.realm.RealmObject
  -keep class io.realm.** { *; }
  -dontwarn javax.**
  -dontwarn io.realm.**
  </code></pre>
  
  <p>And Here is the proguard-android file. This is the default one from Android SDK.</p>
  
  <pre><code># This is a configuration file for ProGuard.
  # http://proguard.sourceforge.net/index.html#manual/usage.html
  
  -dontusemixedcaseclassnames
  -dontskipnonpubliclibraryclasses
  -verbose
  
  # Optimization is turned off by default. Dex does not like code run
  # through the ProGuard optimize and preverify steps (and performs some
  # of these optimizations on its own).
  -dontoptimize
  -dontpreverify
  # Note that if you want to enable optimization, you cannot just
  # include optimization flags in your own project configuration file;
  # instead you will need to point to the
  # "proguard-android-optimize.txt" file instead of this one from your
  # project.properties file.
  
  -keepattributes *Annotation*
  -keep public class com.google.vending.licensing.ILicensingService
  -keep public class com.android.vending.licensing.ILicensingService
  
  # For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
  -keepclasseswithmembernames class * {
      native &lt;methods&gt;;
  }
  
  # keep setters in Views so that animations can still work.
  # see http://proguard.sourceforge.net/manual/examples.html#beans
  -keepclassmembers public class * extends android.view.View {
     void set*(***);
     *** get*();
  }
  
  # We want to keep methods in Activity that could be used in the XML attribute onClick
  -keepclassmembers class * extends android.app.Activity {
     public void *(android.view.View);
  }
  
  # For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
  -keepclassmembers enum * {
      public static **[] values();
      public static ** valueOf(java.lang.String);
  }
  
  -keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
  }
  
  -keepclassmembers class **.R$* {
      public static &lt;fields&gt;;
  }
  
  # The support library contains references to newer platform versions.
  # Don't warn about those in case this app is linking against an older
  # platform version.  We know about them, and they are safe.
  -dontwarn android.support.**
  </code></pre>