web-dev-qa-db-ja.com

Android Gradle用プラグインの「minifyEnabled」と「useProguard」の違いは何ですか?

Android Gradleのプラグインには、次のようにminifyEnabledプロパティとuseProguardプロパティがあります。

Android {
    buildTypes {
        debug {
            minifyEnabled true
            useProguard false
        }
        release {
            minifyEnabled true
            useProguard true
        }
    }
}

これら2つのプロパティの違いは何ですか?または、むしろ、それぞれの意味は何ですか?

48
Adil Hussain

tools.Android.com からの引用:

内蔵シュリンク

Android Plugin for Gradleのバージョン2.0には、ProGuardの代わりに使用できる実験的な組み込みのコードシュリンクが付属しています。次のコードスニペットを使用して有効にできます。

Android {
    buildTypes {
        debug {
            minifyEnabled true
            useProguard false
            proguardFiles getDefaultProguardFile('proguard-Android.txt')
        }
    }
}

組み込みのシュリンクはデッドコードのみを削除でき、難読化も最適化も行いません。 ProGuardと同じファイルを使用して構成できますが、難読化または最適化に関連するすべてのフラグを無視します。

ProGuardとは異なり、Instant Runと共に組み込みのシュリンクの使用をサポートしています。プロジェクトによっては、初期ビルドとインストール時間が大幅に短縮される場合があります。コードの変更後に到達可能になったメソッドは、プログラムに新たに追加されたように表示され、インスタントランホットスワップを防ぎます。

48

minifyEnabledを有効にすると、コードが最適化され、難読化されます。それの訳は useProguard trueはデフォルトであるため、明示的に設定する必要はありません。

参照: Obfuscation in Android Studio

3
user8100646

useProguard trueはもう必要ありません。

minifyEnabledプロパティをtrueに設定すると、R8によるコードの縮小がデフォルトで有効になります。

Android Gradleプラグイン3.4.0以降)を使用してプロジェクトをビルドすると、プラグインはProGuardを使用して実行しなくなりますコンパイル時のコード最適化:代わりに、プラグインはR8コンパイラーと連携して、 公式ドキュメント に従ってタスクを処理します。

R8の代わりにProGuardを使用する場合。この行をgradle.propertiesファイルに追加します

 Android.enableR8=false
2
Allen