サーチ…


前書き

Proguardは、無料のJavaクラスファイル圧縮ツール、オプティマイザ、難読化ツール、および事前検証ツールです。未使用のクラス、フィールド、メソッド、および属性を検出して削除します。バイトコードを最適化し、未使用の命令を削除します。短い無意味な名前を使用して、残りのクラス、フィールド、およびメソッドの名前を変更します。

プロガードでコードとリソースを縮小する

APKファイルを可能な限り小さくするには、縮小ビルドを有効にして、リリースビルドで未使用のコードとリソースを削除する必要があります。このページでは、その方法と、ビルド中に保持または破棄するコードとリソースを指定する方法について説明します。

Code Shrinkingは、パッケージされたアプリケーションから未使用のクラス、フィールド、メソッド、および属性を検出して削除するProGuardで利用できます(64KBの参照制限を回避するための貴重なツールになります)。 ProGuardは、バイトコードを最適化し、未使用のコード命令を削除し、短い名前の残りのクラス、フィールド、メソッドを難読化します。難読化されたコードはAPKをリバースエンジニアリングするのを困難にします。これは、アプリでライセンス確認などの機密性の高い機能を使用する場合に特に役立ちます。

リソースの縮小は、GradleのAndroidプラグインで利用できます.Gradleは、コードライブラリの未使用リソースを含め、パッケージ化されたアプリケーションから未使用のリソースを削除します。未使用のコードが削除されると、もはや参照されていないリソースも安全に削除できるように、コード縮小と連動して動作します。

あなたのコードを縮小する

ProGuard使用してコードを縮小するには、 build.gradleファイルの適切なビルドタイプにminifyEnabled追加します。

コードを縮小するとビルド時間が遅くなるので、可能であれば、デバッグビルドで使用しないでください。ただし、テスト用の最終的なAPKでコードを縮小できるようにすることが重要です。これは、保持するコードを十分にカスタマイズしていないとバグが発生する可能性があるためです。

たとえば、 build.gradleファイルの次のスニペットでは、リリースビルドのコードを縮小できます。

android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
    }
    ...
}

加えminifyEnabled性、 proguardFilesプロパティが定義ProGuard rules

getDefaultProguardFile( 'proguard-android.txt')メソッドは、デフォルトのProGuard設定をAndroid SDK tools/proguard/ folderから取得しtools/proguard/ folder 。ヒント:さらにコードを縮小するには、同じ場所にあるproguard-android-optimize.txtファイルを試してみてください。これには同じProGuardルールが含まれていますが、バイトコードレベル(メソッド内およびメソッド間)で分析を実行するその他の最適化機能を使用することで、APKサイズをさらに削減し、より速く実行できます。 proguard-rules.proファイルでは、カスタムProGuardルールを追加できます。デフォルトでは、このファイルはモジュールのルート(build.gradleファイルの横)にあります。各ビルドバリアントに固有のProGuardルールを追加するには、対応するproductFlavorブロックに別のproguardFilesプロパティを追加します。たとえば、次のGradleファイルは、flavor2-rules.proをflavor2製品のフレーバに追加します。 flavor2は、リリースブロックのルールも適用されるため、3つのProGuardルールをすべて使用します。

android {
    ...
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                   'proguard-rules.pro'
        }
    }
    productFlavors {
        flavor1 {
        }
        flavor2 {
            proguardFile 'flavor2-rules.pro'
        }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow