Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

FileNotFoundException on proguard-rules.pro file

I'm using Android Studio v.1.0 My build file :

  buildTypes {

    debug {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

    }

    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

but when I try to make a release build, I get an error : Error:Execution failed for task ':app:proguardRelease'.

java.io.FileNotFoundException: F:....\app\proguard-rules.pro (File not found)

I think, that proguard-android.txt is a part of Android SDK, am I right ?

And why Android Studio can't find it ?

I also tried proguard-android.pro - the same result

like image 253
Rikki Tikki Tavi Avatar asked Jan 27 '15 10:01

Rikki Tikki Tavi


4 Answers

If you don't need any specific ProGuard configuration:

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt')
    }
}

(The warning might happened)

Or specify "rules" and put it here:

.../app/proguard-rules.pro

For example I use "Butter Knife" and my proguard-rules.pro looks like:

-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewInjector { *; }

-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}

Or, possibly you can leave build.gradle file as it is (if you don't like warnings )), And just put an empty proguard-rules.pro to that location.

like image 129
Andrew Avatar answered Oct 23 '22 10:10

Andrew


proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

Following line in build.gradle file of your app module indicates the script of proguard needs to apply to your release build. It has two files:

  1. proguard-android.txt: is the default android proguard file, can be found in D:\SDK\tools\proguard directory of SDK.
  2. 'proguard-rules.pro': It contains your application specific proguard script. You need to create this file in the root folder of your application. All your application specific proguard should be inside this file.
like image 42
Sagar Trehan Avatar answered Oct 23 '22 12:10

Sagar Trehan


I've created my own proguard-android.pro file and that works properly for me :

-dontwarn org.apache.commons.**
-dontwarn com.google.**
-dontwarn com.j256.ormlite**
-dontwarn org.apache.http**

-keepattributes SourceFile,LineNumberTable
-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }

-keepattributes Signature
# GSON Library
# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }

# Google Map
-keep class com.google.android.gms.maps.** { *; }
-keep interface com.google.android.gms.maps.** { *; }
like image 36
Rikki Tikki Tavi Avatar answered Oct 23 '22 12:10

Rikki Tikki Tavi


please check your 'proguard-rules.pro' inside your root project folder. I your project exported from eclipse you must create 'proguard-rules.pro' inside root project folder.

like image 39
user3068659 Avatar answered Oct 23 '22 12:10

user3068659