futabooo blog

色々手をつけすぎてすぐに忘れるので備忘録

Freelineとはなにものか

これはAndroidその2 Advent Calendar 2016の23日目の記事です。

はじめに

昨今Androidのbuildまわりの話は結構盛り上がっているなーと感じます。 Androidのbuildをしてるとマシンリソースをもっていかれて他の作業に支障がでたりすので、自分のマシン以外に誰も使ってないマシンをbuildサーバ的に使ったり、GCPなどのクラウドリソースを使ったりすることで解消する方法が様々出てきています。 それ自体は最高だな!自分も職場では使っていくぞ!という気持ちで実際空いてるiMacを使ってbuildしたりしています。

一方でbuild自体が高速で終わればbuild中に何分間も他のことができない!みたいな状況はないのではないかとも思います。 また個人開発として考えた時に、札束で叩く選択肢はなかなか取りづらいよなーと思ったりもします。 そこでひとつの解決策として良さそうなのが今回紹介するalibaba/freelineです。

Freelineとは

概要

githubのREADEMEの導入部分を引用すると下記のように紹介されています。

Freeline is a fast build and deployment tool for Android. Caching reusable class files and resource indices, it enables incrementally building Android apps, and optionally deploying the update to your device with hot swap.

Developed and used by Ant Fortune (about us) Android Team, Freeline has been significantly saving time in daily work. Inspiring by Buck and Instant Run but faster than ever, Freeline can finish an incremental build in just a few seconds. No more recompile and reinstall again and again before seeing your modifications, Freeline brings life-changing development experience for Android.

要点だけまとめるとこんな感じです。

  • ホットスワップを可能にするぜ!
  • BuckInstant Runにインスパイアされているが、それらよりもより早く動作するぜ!
  • FreeLineはAndroid開発生活に変革をもたらすぜ!

完全に意訳ですが、ノリとしてはこれぐらいハッピーな感じで書かれてるんじゃないかと勝手に理解しました。

詳細

特徴

  • マルチモジュール構成のAndroidプロジェクト開発の高速化が可能
  • 並列でのインクリメンタルビルドが可能
  • メインプロセスがクラッシュした場合でもホットデプロイが可能
  • etc

また下記の項目の変更に対応しているようです。

Java drawable, layout, etc. res/values native so
add
change
remove x -

他にもたくさんあるようですが、RADEMEに記載されているので興味がある方はご覧ください。

まだまだな点

  • 初回だけちょっと遅い
  • res/values の削除には対応できていない
  • 抽象クラスのインクリメンタルビルドはできない
  • Kotlinはサポートしていない

最近の国内でのKotlin熱を考えるとサポートしてないのはちょっとつらいかもしれないですね。

Freelineの使い方

githubにsampleプロジェクトがあるので、それを使ってみます。 手順はこれだけ。

git clone git@github.com:alibaba/freeline.git
cd freeline/sample
./gradlew initFreeline
python freeline.py

実際にコマンドの実行をしているところを動画に収めたのでご覧ください。 (本当はttyrecとttygifを使ってgif化したかったのですが、謎のエラーでttyrecが使えず今回の記事では諦めましたorz)

なんかtaskが並行実行されてる雰囲気がわかっていただければ幸いです。 既存の自分のプロジェクトに導入する場合はbuild.gradleへの記述などありますが、READEMEに書いてあるので簡単に導入可能です。

おわりに

手元にある大きめのプロジェクトはkotlinが入っていたりしてうまく動かなかったので、Freelineでどれだけ早くなるのか比較を書くことができずに終わってしまいました。 この記事をみてFreelineを試した方にぜひ比較結果をコメントもらえたらなーと思っています。

またほとんどFreelineのREADMEを紹介するだけになってしまいましたが、今回本当に紹介したかったのは下記の記事です。 中国語で書かれており、内容の把握に骨が折れますがFreelineがどのように実装されているのか詳細な紹介がされています。 Androidフレームワークの知識が必要なため僕自身グーグル先生とともに解読中です。

参考