proguard-rules.pro文件找不到异常

10

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

但是当我尝试制作发行版(build)时,出现了错误:

Error:Execution failed for task ':app:proguardRelease'.

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

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

为什么 Android Studio 找不到它呢?

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


你是否在项目目录的根目录中创建了 proguard-rules.pro 文件? - Sagar Trehan
我需要手动添加吗?能否请您分享如何正确操作的确切指令? - Rikki Tikki Tavi
如果您没有任何特殊规则,请尝试使用空文件或删除“,'proguard-rules.pro'”部分。 - zapl
我不想删除 'proguard-rules.pro' 文件 - 我想将 ProGuard 实现到构建中。 - Rikki Tikki Tavi
如果下面的答案对您有帮助,请查看。 - Sagar Trehan
6个回答

10

如果您不需要任何特定的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文件。


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

您的应用程序模块中build.gradle文件中的以下行表明了proguard脚本需要应用于您的发布版本构建。它包含两个文件:

  1. proguard-android.txt:是默认的Android proguard文件,可以在SDK的D:\SDK\tools\proguard目录下找到。
  2. 'proguard-rules.pro':它包含了您的应用程序特定的proguard脚本。您需要在应用程序的根文件夹中创建此文件。所有与应用程序相关的proguard都应在此文件中。

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

1
请检查位于您的根项目文件夹内的 'proguard-rules.pro' 文件。如果您的项目是从 Eclipse 导出的,则必须在根项目文件夹内创建 'proguard-rules.pro' 文件。

0
希望这个答案对未来有所帮助。

GoTobuild.gradle(Module:app)

删除buildTypes中的这部分内容

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接