2015年9月18日金曜日

Androidアプリ開発の準備をテンプレート化した - その4 開発ビルドと本番ビルドの設定 apkの自動生成 -

  • 公開日:2015年09月18日
  • 最終更新日:2016年01月31日

記事概要

androidのアプリ開発をする前の準備の手順をまとめました。その3の続きです。

環境

  • Android Studio1.3.0
  • OS X Yosemite

プロジェクトビルド

続いてアプリのビルド設定を行います。
途中参加のプロジェクトとかでよく見かけるビルドパターンに、

Android StudioやEclipseでapkファイルを出力する

というものがあります。
この手法は

ビルドのアンチパターン

です。今後はやめましょう。この手法を採用している現場に限って、keystoreを無くしただの、パスワードが分からないだのと無用なトラブルを巻き起こしている確率が高いと思います。

Android Studioから取り入れられたgradleを使ったビルド手法は、先人のノウハウが詰まっています。
gradleを使えば、簡単にandroidアプリのビルドを自動化できます。この作業を後回しにすると、設定をやらなくなるので、

最初に自動化してください

build.gradleの設定

では、まずapp/build.gradleの設定を行ないます。
Android Studio1.3.0のデフォルトで作成されたapp/build.gradleは以下のように記述されています。

build.gradle

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

apkファイルの作成を自動化するには、signingConfigsをbuildTypesの上に追記します。

build.gradle

    // 追加
    signingConfigs {
        debug {
        }
        release {
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

signingConfigsの中にdebugreleaseを追加しました。
debugは「開発」apkでreleaseは「公開」apkになります。
続いて、buildTypesにもdebugを追加します。

build.gradle

    signingConfigs {
        debug {
        }
        release {
        }
    }
    buildTypes {
        // 追加
        debug {
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

これで準備OKです。では、signingConfigsでapkファイル自動出力の設定をしていきましょう。

signingConfigs

signingConfigsを利用すると、証明書の設定がおこなえます。この設定により、gradleコマンドを実行するだけで様々な種類のapkを作成、出力できるようになります。
adnroidアプリの開発でよくありがちなのが、
「keystoreのパスワードがわかない」
「keystoreファイルが見つからない」
等のヒューマンミス(管理不備)です。

最悪のケースだと、
「keystoreを作成した外注先のエンジニアが辞めていた」
なんてこともあります(経験済)。

そういったケースを防ぐためにも、gradleでビルドの設定をしておくべきです。

keystoreの設定

apk作成時に利用するkeystoreを設定しましょう。以下のように記載します。

build.gradle

    signingConfigs {
        debug {
            // 追加
            storeFile file("debug.keystore")
        }
        release {
            // 追加
            storeFile file("release.keystore")
        }
    }
    buildTypes {
        debug {
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

debug(開発)用のdebug.keystoreはandroid導入時にインストールされたkeystoreを利用しましょう。では、debug.keystoreファイルをプロジェクトフォルダ配下に移してみましょう。

build.gradle

// macの場合、debug.keystoreファイルはここの配下にある
cd ~/.android/

// ファイルリストの確認
ls -l

// debug用のkeystore
debug.keystore

// debug.keystoreをコピー
cp -a debug.keystore {プロジェクトフォルダ}

debug(開発)用のkeystoreの準備は完了です。続いて、公開(release)用のkeystoreをプロジェクトフォルダ配下に配置します。当然ゼロベースで作るアプリに本番keystoreはないので、Android Studioで作成します。

【Generate Signed APK】を選択します。

【Create new ...】を選択します。

keystoreの出力場所を選択します。プロジェクトフォルダの配下を指定します。
File name:はrelease.keystoreにしておきます。(どんな名称でも平気です)

keystoreに必要なデータを入力していきます。入力したpasswordは忘れないようにメモするか、キャプチャを撮っておきます。
入力したら、先へ進みます。全ての手続きが終わりrelease.apkが作成されるとPOPで知らせてくれます。

これで本番用のkeystoreが完成しました。
では、今入力した情報をapp/build.gradleのreleaseに記載します。
まずは、app/build.gradleにパスワードを設定します。

build.gradle

    signingConfigs {
        debug {
            storeFile file("debug.keystore")
            // 追加
            storePassword "android"
        }
        release {
            storeFile file("release.keystore")
            // 追加
            storePassword "xxxxxxx"
        }
    }
    buildTypes {
        debug {
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

storePasswordにパスワードを記述します。debug.keystoreはデフォルトのままで問題ないと思います。
keyAliasの設定をします。

build.gradle

    signingConfigs {
        debug {
            storeFile file("debug.keystore")
            storePassword "android"
            // 追加
            keyAlias "androiddebugkey"
        }
        release {
            storeFile file("release.keystore")
            storePassword "xxxxxxx"
            // 追加
            keyAlias "xxxxxxx"
        }
    }
    buildTypes {
        debug {
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


Aliasで入力したAliasを設定します。
最後にkeyPasswordの設定をします。

build.gradle

    signingConfigs {
        debug {
            storeFile file("debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            // 追加
            keyPassword "android"
        }
        release {
            storeFile file("release.keystore")
            storePassword "xxxxxxx"
            keyAlias "xxxxxxx"
            // 追加
            keyPassword "android"
        }
    }
    buildTypes {
        debug {
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

証明書の設定は完了です。最後に上記で設定した証明を利用する設定をbuildTypesに記述します。

build.gradle

    signingConfigs {
        debug {
            storeFile file("debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
        release {
            storeFile file("release.keystore")
            storePassword "xxxxxxx"
            keyAlias "xxxxxxx"
            keyPassword "android"
        }
    }
    buildTypes {
        debug {
            // 追加
            signingConfig signingConfigs.debug
        }
        release {
            // 追加
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

signingConfigsで設定した証明書の内容が反映されるようになりました。
最後にapkを出力できるようにzipAlignEnabledをtrueにして記載します。

build.gradle

    signingConfigs {
        debug {
            storeFile file("debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
        release {
            storeFile file("release.keystore")
            storePassword "xxxxxxx"
            keyAlias "xxxxxxx"
            keyPassword "android"
        }
    }
    buildTypes {
        debug {
            signingConfig signingConfigs.debug
            // 追加
            zipAlignEnabled true
        }
        release {
            signingConfig signingConfigs.release
            // 追加
            zipAlignEnabled true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

apkファイルを出力

コマンドプロンプトを開いてコマンドを叩きます。

build.gradle

// プロジェクトフォルダに移動
cd {projecrFolder}

// gradleを実行
./gradlew clean build

apkファイルが出力されたことを確認します。出力場所は、{プロジェクトフォルダ}/app/build/outputs/apkです。

apkが作成されていることが確認できました。 これでターミナルのコマンドからや、jenkins等のツールを利用してapkが作成できるようになりました。
gitで管理すればkeystoreやパスワード等の紛失も心配もありません。

でも、これだけではまだ不十分です。はgradleで環境ごとのパッケージ設定をします。
続きます。

PICK UP
関連記事 参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...