2013年8月30日金曜日

Android StudioでProGuard

Android StudioでProGuardを使ってみたのでメモ。

環境

・Mac OS X 10.8.4
・Android Studio (I/O Preview) 0.2.6

build.gradle

1. runProguard trueでProGuardを有効化

2. proguardFile file('proguard-project.txt')でプロジェクト固有のProGuard設定ファイルを指定
(proguard-project.txtをルートプロジェクトのルートディレクトリに作成)

3. proguardFile getDefaultProguardFile('proguard-android.txt')でプロジェクト共通のProGuard設定ファイルを指定
(<sdk-root>/tools/proguard/proguard-android.txtが参照される)
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }

    signingConfigs {
        releaseConfig {
            storeFile=file(project.properties.storeFile)
            storePassword=project.properties.storePassword
            keyAlias=project.properties.keyAlias
            keyPassword=project.properties.keyPassword
        }
    }

    buildTypes {
        release {
            runProguard true
            proguardFile file('../proguard-project.txt')
            proguardFile getDefaultProguardFile('proguard-android.txt')
            signingConfig signingConfigs.releaseConfig
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
}

ビルド

ルートプロジェクトのルートディレクトリに移動。
下記のコマンドを実行して暫し待つ。
./gradlew assembleRelease
ビルドが成功すると、サブプロジェクトの
build/apk/の下に<プロジェクト名>-release.apkのファイル名でAPKファイルが
build/proguard/release/の下にmapping.txt等のProGuardのファイルが作成される。

確認

ProGuardの有効化を下記のコードで確認。(かなり無理矢理ですが... )
package com.example.app;

import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        checkProGuard();
    }

    private void checkProGuard(){
        throw new RuntimeException("Check ProGuard");
    }

}
デバッグビルドとリリースビルドで実行してstack traceを確認したところ、mapping.txtの設定に従ってメソッド名がcheckProGuard() -> a()に変更されていた。

※proguard-project.txtについては、Eclipseでプロジェクトを作成した時に自動生成されるファイル(設定は空)を持ってきただけなので、こちらに設定した内容が正常に反映されるかは未確認。

Android Studioでのリリースビルドについてはこちらの記事を参照。
Androidアプリをコマンドラインからリリースビルド(Android Studio/Gradle編)
http://neta-abc.blogspot.jp/2013/08/androidandroid-studiogradle.html

0 件のコメント:

コメントを投稿