BuckでのAndroidプロジェクトのビルドについて
概要
Facebook製ビルドツールBuckをインストールし、サンプルとして公開されているAndroidプロジェクトをビルドしてみます。
Buck?
BuckはFacebookが開発しているビルドツールです。
公式サイトではBuckの特徴が解説されています。ビルドが高速なのが売りなようです。
- Speed up your builds.
- Buck builds independent artifacts in parallel to take advantage of multiple cores on your machine. Further, it reduces incremental build times by keeping track of unchanged modules so that the minimal set of modules is rebuilt.
- Add reproducibility to your builds
- Buck only uses the declared inputs, which means everybody gets the same results.
- Get correct incremental builds
- Buck looks at the contents of your inputs, not their timestamps to figure out what needs to be built. As a result, incremental builds should always be correct, so there’s no need to perform a clean build.
- Understand your dependencies
- With buck query, you can better understand your dependencies and what is required to build your product.
- Integrate with your IDE
- With buck project, your project can be better understood by your IDE, making you and your team more productive.
Buckの開発はCopyrightを見る限り2013年から行われているようですね。「buck facebook」で検索すると以下のような記事がみつかります。
- FacebookのBuckとxctool:オープンソースのAndroidおよびiOS用ビルドツール
- Facebook: BuckでAndroidビルドをスピードアップ - ワザノバ | wazanova
Buckのインストール
Getting Startedを参考に進めます。最初にPlatformに「Android」、Development OSに「macOS」を選択します。
事前準備
Command Line ToolsとJava Runtimeがインストールされていないならインストールしておきます。
- Command Line Tools
xcode-select --install
- Java Runtime
Homebrewを使う場合以下のようにします。
brew update brew tap caskroom/cask brew install java
Buckのインストール
Homebrewでインストールします。
brew update brew tap facebook/fb brew install buck
インストールできました。
buck --version buck version v2016.11.11.01
また、最新のコードを入手してローカルでビルドすることもできます。
brew update brew tap facebook/fb brew install --HEAD buck
ソースコードからのビルド
ソースコードからビルドする場合、Getting StartedのBuild from Sourceを参考にしてください。
BuckでAndroidプロジェクトをビルド
fbsamples/bucksamplesをcloneします。
git clone git@github.com:fbsamples/bucksamples.git cd bucksamples/cross-platform-scale-2015-demo/
サンプルAndroidプロジェクトでキーとなるファイル
サンプルにはBuckでAndroidプロジェクトをビルドするために必要な全てのファイルが含まれています。プロジェクトのrootからみて
android/java/com/facebook/buck/demo/
以下には必要なJavaファイルが含まれています。android/BUCK
はBuckのビルドに関するルールが書かれたファイルになります。コードに関する全てのビルドルールはこのファイルに記述します。ビルドルールには依存関係を含むことができ、サンプルでは他のビルドファイルへの依存を記述しています。.buckconfig
はBuckの設定ファイルです。プロジェクトのrootディレクトリに配置することでプロジェクト毎に異なる設定を有効にできます。
Androidプロジェクトのビルド
BuckでAndroidプロジェクトのビルドをビルドします。
buck build demo_app_android [-] PROCESSING BUCK FILES...FINISHED 0.2s [100%] 🐳 New buck daemon [-] DOWNLOADING... (0.00 B/S AVG, TOTAL: 0.00 B, 0 Artifacts) [-] BUILDING...FINISHED 0.8s [100%] (1/1 JOBS, 0 UPDATED, 0 [0.0%] CACHE MISS)
ビルド成果物はbuck-out/
ディレクトリに出力されます。
Androidプロジェクトのビルドと端末での実行
buck install --run
でAPKをビルドし端末にインストールします。
buck install --run demo_app_android Installing apk on 07fbdfee01298e26 (Nexus 5). [-] PROCESSING BUCK FILES...FINISHED 0.0s 🐇 [-] DOWNLOADING... (0.00 B/S AVG, TOTAL: 0.00 B, 0 Artifacts) [-] BUILDING...FINISHED 0.0s [100%] (1/1 JOBS, 0 UPDATED, 0 [0.0%] CACHE MISS) [+] INSTALLING...1.7s Successfully ran install apk //android:demo-app on 1 device(s) Starting activity com.facebook.buck.demo/.App... Successfully ran start activity on 1 device(s)
感想
- サンプロプロジェクトだけだとAndroidプロジェクトのビルドについてあまり理解できない
- Android用のビルドルールがいくつか用意されいているので見てみると良さそう
- ビルドルールの書き方がBazelに似ている
次はokbuckでAndroidプロジェクトをビルドしてみます。