2014-09-24 4 views
9

Così sto facendo funzionare ProGuard per la prima volta e sto ottenendo un errore strano:Android Studio - ProGuard "java.io.IOException ... bin Classes (Nessun file o directory)"

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':app:proguardRelease'. 
> java.io.IOException: Can't read [C:\Users\Some\workspace\MyApp\app\bin\classes] (No such file or directory) 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

Ecco il mio Gradle:

apply plugin: 'android' 

android { 
    compileSdkVersion 19 
    buildToolsVersion '19.1.0' 

    defaultConfig { 
     minSdkVersion 16 
     targetSdkVersion 19 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      runProguard true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 
} 

dependencies { 
    compile 'com.android.support:support-v4:19.0.+' 
    compile 'com.google.android.gms:play-services:4.3.23' 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.viewpagerindicator:library:[email protected]' 
    compile group:'com.android.support', name:'appcompat-v7', version:'18.0.+' 
    compile 'com.squareup.picasso:picasso:2.3+' 
    compile 'com.github.castorflex.smoothprogressbar:library:0.4.0' 
} 

allprojects { 
    gradle.projectsEvaluated { 
     tasks.withType(JavaCompile) { 
      options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" 
     } 
    } 
} 

mia Proguard-rules.txt:

-injars  bin/classes 
-injars  libs 
-outjars  bin/classes-processed.jar 
-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar 

-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 

-keep public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers class * extends android.content.Context { 
    public void *(android.view.View); 
    public void *(android.view.MenuItem); 
} 

-keepclassmembers class * implements android.os.Parcelable { 
    static ** CREATOR; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

-keepclassmembers class * { 
    @android.webkit.JavascriptInterface <methods>; 
} 
+2

tua build.gradle non [definire le impostazioni di firma per build di rilascio] (http://developer.android.com/sdk/installing/studio-build.html#configureSigning). Puoi provare a correre dalla riga di comando 'gradlew.bat assembleRelease' se la sua finestra (o un comando simile per un'altra piattaforma) – ashoke

+0

Ciò ha sicuramente aiutato. Grazie. –

risposta

21

Il plugin Gradle Android specifica già tutti gli input e outp ut per te, quindi è necessario non specificare -injars, -outjars o -libraryjars.

Inoltre, il file proguard-android.txt in Android SDK specifica tutte le impostazioni Android generiche per te, quindi non dovresti specificarle di nuovo.

In sostanza, il file proguard-rules.txt può essere vuoto, fatta eccezione per qualsiasi impostazione specifica dell'applicazione per assicurarsi che qualsiasi riflesso continui a funzionare.

0

non hai bisogno di queste linee, perché queste sono già definite.

-injars  bin/classes 
-injars  libs 
-outjars  bin/classes-processed.jar 
-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar