web-dev-qa-db-ja.com

Gradleを使用してProguardを構成する方法は?

最近Android Studio/Gradleに切り替えましたが、build.gradleスクリプトでProGuardをどのように構成できるのか疑問に思っています。Gradleは初めてですが、Proguardタスクの構成は次のようになります。良いアイデアです(Proguardプロジェクトのドキュメントに記載されています)。

'printmapping'設定を使用して、さまざまな製品フレーバーのさまざまなファイルにマッピングを保存するようにProguardを構成したい

task myProguardTask(type: proguard.gradle.ProGuardTask) {
     printmapping file("test.txt")
}

しかし、タスクの実行時にクラッシュします

Gradle: Execution failed for task ':module:proguardFlavorVariant'.
    > proguard.ConfigurationParser.<init>(Ljava/io/File;Ljava/util/Properties;)V

Gradleの「Android」プラグインの新しいバージョンにはProguardが含まれているようで、これがProguardのドキュメントに記載されているProguardタスクの構成が機能しなかった理由かもしれないと思います。しかし、新しいAndroid-gradle-pluginでこれを行う方法についてのこのトピックに関するドキュメントは見つかりませんでした。

ご協力いただきありがとうございます!

11
max.mustermann

ProguardはAndroid-Gradleプラグインに組み込まれているため、個別のタスクとして構成する必要はありません。ドキュメントは次の場所にあります。

http://tools.Android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard

フレーバーが非常に異なるため、実際に異なるProGuard構成が必要ですか?ほとんどの場合、それらすべてをカバーできる1つの構成を持つことができると思います。

編集:

さまざまなフレーバーのProGuardルールを変更したい場合は、Android Gradle DSLを使用すると変更できます。ドキュメントのサンプルは、その方法を示しています。

Android {
    buildTypes {
        release {
            // in later versions of the Gradle plugin runProguard -> minifyEnabled
            minifyEnabled true
            proguardFile getDefaultProguardFile('proguard-Android.txt')
        }
    }

    productFlavors {
        flavor1 {
        }
        flavor2 {
            proguardFile 'some-other-rules.txt'
        }
    }
}

手動で設定しなくても、フレーバー名に基づいてproguardFile値を自動的に決定する方法を探しているのでない限り、これでユースケースを処理できます。カスタムのGroovyスクリプトを使用してこれを行うことができます。

19
Scott Barta