proguard-rules.pro文件中的FileNotFoundException

时间:2015-01-27 10:24:55

标签: java android proguard

我正在使用Android Studio v.1.0 我的构建文件:

  buildTypes {

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

    }

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

但是当我尝试发布版本时,我收到一个错误: 错误:任务':app:proguardRelease'执行失败。

  

java.io.FileNotFoundException:F:.... \ app \ proguard-rules.pro(找不到文件)

我认为,proguard-android.txt是Android SDK的一部分,对吗?

为什么Android Studio找不到它?

我也试过proguard-android.pro - 结果相同

6 个答案:

答案 0 :(得分:8)

如果您不需要任何特定的ProGuard配置:

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

(警告可能发生)

或指定"规则"并把它放在这里:

.../app/proguard-rules.pro

例如我使用" Butter Knife"和我的proguard-rules.pro看起来像:

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

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

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

或者,您可以保留build.gradle文件(如果您不喜欢警告)),并将空的proguard-rules.pro放到该位置。

答案 1 :(得分:4)

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

app模块的build.gradle文件中的以下行表示proguard的脚本需要应用于您的发布版本。它有两个文件:

  1. proguard-android.txt:是默认的android proguard文件,可以 在SDK的D:\ SDK \ tools \ proguard目录中找到。
  2. &#39; proguard-rules.pro&#39;:它包含您的应用程序特定的程序 脚本。您需要在您的根文件夹中创建此文件 应用。你所有的应用程序特定的proguard应该在里面 这个档案。

答案 2 :(得分:3)

我已经创建了自己的proguard-android.pro文件,这对我来说很合适:

-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.** { *; }

答案 3 :(得分:1)

请检查您的&#39; proguard-rules.pro&#39;在根项目文件夹中。我的项目是从eclipse导出的,你必须创建&#39; proguard-rules.pro&#39;在根项目文件夹中。

答案 4 :(得分:0)

解决方法是下载以下内容之一:

http://dl.google.com/android/android-sdk_r22.6.2-linux.tgz
http://dl.google.com/android/android-sdk_r22.6.2-windows.zip
http://dl.google.com/android/android-sdk_r22.6.2-macosx.zip

复制以下文件:

tools/hprof-conv
tools/support/annotations.jar
tools/proguard

答案 5 :(得分:0)

希望这个答案对将来有所帮助

转到 build.gradle(Module:app)

buildTypes

中删除此部分
debug {
    minifyEnabled false
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}