proguard-rules.pro 文件上的 FileNotFoundException

FileNotFoundException on proguard-rules.pro file

我正在使用 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'
    }
}

但是当我尝试制作发布版本时,出现错误: Error:Execution 任务“:app:proguardRelease”失败。

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

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

为什么 Android Studio 找不到它?

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

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

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

  1. proguard-android.txt:是默认的androidproguard文件,可以 在SDK的D:\SDK\tools\proguard目录下找到。
  2. 'proguard-rules.pro':它包含您的应用程序特定混淆器 脚本。您需要在您的根文件夹中创建此文件 应用。您所有特定于应用程序的混淆器都应该在里面 这个文件。

我已经创建了自己的 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.** { *; }

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

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

(警告可能发生)

或指定"rules"并放在这里:

.../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 放到那个位置。

请检查您的根项目文件夹中的 'proguard-rules.pro'。我从 Eclipse 导出的项目必须在根项目文件夹中创建 'proguard-rules.pro'。

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

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

希望这个回答对以后有帮助

转到build.gradle(Module:app)

中删除此部分buildTypes

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