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 文件中的以下行表示混淆脚本需要应用于您的发布版本。它有两个文件:
proguard-android.txt
:是默认的androidproguard文件,可以
在SDK的D:\SDK\tools\proguard目录下找到。
- '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'
}
我正在使用 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 文件中的以下行表示混淆脚本需要应用于您的发布版本。它有两个文件:
proguard-android.txt
:是默认的androidproguard文件,可以 在SDK的D:\SDK\tools\proguard目录下找到。- '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'
}