LoginSignup
9
3

More than 5 years have passed since last update.

OkBuckを使ってAndroidアプリを高速にビルドする

Last updated at Posted at 2017-02-07

こんにちは。ビルドしてますか?

最近は「Bazel」なんかが話題ですよね。

Bazelの記事は比較的あったのですが「Buck」についての記事をあまり見かけなかったので、書こうと思います。

Buckとは

Facebookが公開しているビルドシステムです。

コードやリソースから小さいモジュールを作成してそれを再利用することでビルドを高速化しているそうです。Android以外のプラットフォームでも利用可能です。

OkBuckとは

Uberが公開しているGradelのプラグインです。Buckのラッパーのようなものです。今回はこれを利用していきます。

OkBuckをインストールする

Buckに必要なものを予めインストールする

$ brew update
$ brew install android-ndk
$ brew install ant
$ brew install watchman
  • BuckはOkBuckが自動でインストールしてくれるため必要ありません

Rootのbuild.gradleファイルにokbuckを設定する

root.build.gradle
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.uber:okbuck:0.17.1'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

apply plugin: 'com.uber.okbuck'

OkBuckのバージョンによってgradeのバージョンを書き換える必要があります。0.17.1なら3.3を要求されるので gradle-wrapper.propertiesdistributionUrlを編集します。

$ vim gradle-wrapper.properties
gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
$ ./gradlew wrapper

どうしてもバージョンをアップデートしたくないけどOkBuckを使ってみたいという人はOkBuckのバージョンを変更してみましょう。

v0.10.2なら gradle-2.14.1を利用しています。

signingConfigsを設定する

いつも通りな感じに設定します。以下は最低限の設定なのでカスタマイズはもちろん自由です。

app.build.gradle
signingConfigs {
    release {
        storeFile file("RELEASE_KEY_STORE_FILE_PATH")
        storePassword "RELEASE_KEY_STORE_PASSWORD"
        keyAlias "RELEASE_KEY_ALIAS"
        keyPassword "RELEASE_KEY_PASSWORD"
    }
}
buildTypes {
    release {
        signingConfig signingConfigs.release
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

buckwコマンドでビルドする

ここまで設定できたら buckWrapper タスクを実行します。

$ ./gradlew :buckWrapper

これでbuckwコマンドが使用できるようになります。


# ビルドできるターゲットの一覧
./buckw targets

# ターゲットをビルド
./buckw build <target>

# ターゲットのAPKをインストール
./buckw install --run <apk-target>

.buckconfig.localにaliasを指定しておくとコマンド操作が楽です。

buckconfig.local
[alias]
    appDebug = //app:bin_debug
    appRelease = //app:bin_release
$ ./buckw install --run appDebug

個人的にはMakefileが好きなので以下のようにaliasはっておくと更に楽です。

installDebug:
    ./buckw install --run //app:bin_debug
$ make installDebug

OkBuckの各種設定は以下を参考にしてください。

実行結果

gradlew

スクリーンショット 2017-02-07 14.57.54.png

OkBuck

スクリーンショット 2017-02-07 14.58.27.png

単純なActivityしかない場合は少しだけ早い(体感的には)っていう感じでした。AndroidStudioにはInstantRunとかありますしね...。複雑に絡み合ったプロジェクトで計測してみたいです。

追記

9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3