Android Build con Gradle e ProGuard: "Il jar di output deve essere specificato dopo un jar di ingresso o sarà vuoto"

Sto creando una costruzione con gradi diversi con Gradle. Per ora era abbastanza buono, finché non volevo permettere a Proguard . Ho abilitato minifyEnabled per la mia Release Build ed ora sto avendo un'exception dicendo:

" 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. "

  • Carica file di grandi size con la barra di avanzamento e senza Errore OutOfMemory in Android
  • NullpointerException quando si avvia l'attività
  • Ordina l'elenco dei punti lon \ lat, inizia con il più vicino
  • Qual è la risoluzione dei miei schermi di schermaggio Android?
  • Ricevente di trasmissione all'interno di un servizio
  • URI di Android Studio 0.8.2 ha una componente di autorità
  • Qualcuno sa cosa sta causando questa exception? Vorrei principalmente abilitare ProGuard prima di rilasciare la mia applicazione. Ecco il mio file Gradle qui sotto.

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

    File ProGuard Rules.

     # 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.** 

    E qui è il file proguard-android. Questo è il predefinito di Android SDK.

     # This is a configuration file for ProGuard. # http://proguard.sourceforge.net/index.html#manual/usage.html -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasss -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 -keepclassswithmembernames class * { native <methods>; } # 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 classs, 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 <fields>; } # 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.** 

  • Google Maps non visualizza piastrelle, funziona bene nel dispositivo di sviluppo
  • camera phonegap android e caricamento delle immagini
  • Appoggio schermato diviso in Android N + solo sulle compresse
  • Stile personalizzato per Android TabWidget
  • Grande numero di errori durante la fase di Gradle dopo l'aggiornamento a Android Studio 2.0
  • Parametro di layout di Android InputType - come consentire decimali negativi?
  • One Solution collect form web for “Android Build con Gradle e ProGuard: "Il jar di output deve essere specificato dopo un jar di ingresso o sarà vuoto"”

    Ci sono voluti molto tempo per capirlo, ma, come avevo immaginato, era tutto sulla configuration Proguard.

    Ho iniziato a scavare attraverso gli avvisi nella console e ho capito che alcuni dei riferimenti non sono stati trovati da Proguard. Così aggiungendoli come -dontwarn a proguard file di configuration risolveva il problema.

    Nel mio caso, ho dovuto ignorare i pacchetti di seguito;

     -dontwarn java.lang.invoke** -dontwarn org.apache.lang.** -dontwarn org.apache.commons.** -dontwarn com.nhaarman.** -dontwarn se.emilsjolander.** 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.