web-dev-qa-db-ja.com

proguard-rules.proファイルのFileNotFoundException

私は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を試しました-同じ結果

9

私は自分の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

特定のProGuard構成が必要ない場合:

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

(警告が発生する可能性があります)

または、「ルール」を指定してここに配置します。

.../app/proguard-rules.pro

たとえば、「バターナイフ」を使用すると、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を配置することもできます。

8
Andrey
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'

アプリモジュールのbuild.gradleファイルの次の行は、proguardのスクリプトをリリースビルドに適用する必要があることを示しています。 2つのファイルがあります。

  1. proguard-Android.txt:はデフォルトのAndroid proguardファイルで、SDKのD:\ SDK\tools\proguardディレクトリにあります。
  2. 'proguard-rules.pro':アプリケーション固有のproguardスクリプトが含まれています。このファイルは、アプリケーションのルートフォルダーに作成する必要があります。アプリケーション固有のプロガードはすべて、このファイル内にある必要があります。
4
Sagar Trehan

ルートプロジェクトフォルダ内の「proguard-rules.pro」を確認してください。プロジェクトをEclipseからエクスポートする場合は、ルートプロジェクトフォルダー内に「proguard-rules.pro」を作成する必要があります。

1
user3068659

回避策は、次のいずれかをダウンロードすることです。

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
0
cici

この回答が将来役立つことを願っています

GoTobuild.gradle(Module:app)

この部分をから削除buildTypes

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