Bazelのrules_kotlinについてのメモ

Bazelのrules_kotlinにkotlin_android_library rule 追加され、Kotlinで書かれたAndroidアプリがビルド可能になったので調べたメモ。

  • BazelでのAndroidアプリのビルド方法の復習
    • Bazelのインストール
    • サンプルプロジェクトの用意
    • workspaceのセットアップ
    • WORKSPACEファイルの作成
    • WORKSPACEファイルの更新
    • BUILDファイルの作成
    • android_library ruleの追加
    • アプリのビルド
    • 成果物の確認
  • rules_kotlin
    • rules_kotlinで使用できるrule
    • WORKSPACEの設定
    • BUILD rules
      • kotlin_library
        • kotlin_libraryの属性一覧
      • kotlin_binary
        • kotlin_binaryの属性一覧
      • kotlin_android_library
        • kotlin_android_libraryの属性一覧
      • kotlin_test
      • kotlin_compile
    • Annotation Processing
  • サンプルコードの実行
  • 参考
続きを読む

Reproでプッシュ通知を受け取る際にSmall Iconが表示されない場合の対処方法

概要

Reproでプッシュ通知を受け取る際に、NotificationCompat.BuildersetSmallIconでiconのリソースを指定していても通知に表示されない場合の対処方法について。

対処方法

AndroidManifestのapplicationタグに以下のようなmeta-dataを追加します。

<meta-data
    android:name="io.repro.android.PushNotification.SmallIcon"
    android:resource="@drawable/YOUR_ICON_ID">
</meta-data>

これで表示されるはずです。

ドキュメントはちゃんと読もう

30分ぐらい悩んでたんですが、Reproのドキュメントを読んだらあっさり解決しました。ドキュメントはちゃんと読もう・・。

参考

プッシュ通知(Android) — Repro ドキュメント

既存のURL文字列にUri.Builderでクエリを追加する方法

既存のURLにUri.Builderを使ってクエリを追加する場合こうする。parse後にbuildUpon()で繋ぐのがミソ。

val url = Uri.parse("既存のURL")
             .buildUpon()
             .appendQueryParameter("key", "value")

Kotlinで1から99までの整数を含むListを簡単に作成する

KotlinではlistOf関数を使う事で簡単にListを作成できる。

val list = listOf(1, 2, 3) // [1, 2, 3]

ここで1から99までのListを作る場合はRangeを使うと簡単に作成できる。toList()でListに変換してやるのがポイント。

val list = (1..99).toList() // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18...

Kotlin楽しい!

参考

KotlinでListをイテレーションする際にindexが欲しい場合の書き方

withIndex()を指定すればOK。

val list = listOf(1, 2, 3, 4, 5)
for ((index, element) in list.withIndex()) {
    print("$index, $element\n")
}

英語でKotlinを勉強するためのリソース

Android DevelopersのKotlinのページにはResources to Learn Kotlinというページがあります。

Resources to Learn Kotlin | Android Developers

このページにはタイトル通りKotlinを学ぶためのリソースのリストが載っていて、以下のカテゴリに別れています。

  • Documentation
  • Videos
  • Books
  • Social channels

各カテゴリで紹介されているリソースは以下のようになっています。

Documentation

Videos

  • YouTube

    “Kotlin on Android"で検索するとKotlinとAndroidに関する様々なビデオを探すことができます。

  • O'Reilly course

    JetBrainsのHadi Haririさんによる"Introduction to Kotlin Programming,“という講座がO'Reillyから公開されています。8時間ほどで学べるようです。有料となっていて、講座単体で購入するかSafari Books Onlineを契約する必要があります(10日間のフリートライアル有り)。

  • Treehouse course

    “Kotlin for Java Developers"Androidに重点置いてKotlinを学べる講座で、オンライン学習サイトtreehouseが提供しています。こちらも有料となっていて、フリートライアは7日間です。

  • Udemy course

    Udemyが提供している講座、"Kotlin for Beginners"では、Kotlinをゼロから学べます。こちらも有料ですがUdemyは割引を良くやってるのでタイミングによっては安く購入できるはずです(この記事を書いている時点(2017/06/21)で84%オフの1,800円でした)。

Videosで紹介されているリソースは以上ですが、UdacityにはGoogle公式のAndroid講座があるのでKotlinに対応したAndroid講座をGoogleが開いてくれないかと個人的に期待しています。

Books

  • Kotlin in Action

    JetBrainsのDmitry JemerovさんとSvetlana Isakovaさんによって書かれてた本です。ManningのサイトからChapter6と11が無料で読めます。

  • Kotlin for Android Developers

    Antonio Leivaさんによって書かれてた"Kotlin for Android Developers"はKotlinについて書かれた最初の本の1つと紹介されています。この本では、実際に天気予報アプリを開発しながらKotlinを学ぶことができ、APIリクエストとレスポンスのデータクラスへのマッピングとキャッシュ、SQLiteの操作、そしてテストコードの書き方まで紹介されています。購入して読みましたが、とても読みやすい本でした。購入後2度更新があり、Android Studio 3.0対応や、コルーチンに関する章の追加、クローズドなクラスをどうモックするか?といった内容が追加されています。

Social channels

参考

BuckでのAndroidプロジェクトのビルドについて

概要

Facebook製ビルドツールBuckをインストールし、サンプルとして公開されているAndroidプロジェクトをビルドしてみます。

Buck?

BuckはFacebookが開発しているビルドツールです。

buckbuild.com

公式サイトでは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」で検索すると以下のような記事がみつかります。

Buckのインストール

Getting Startedを参考に進めます。最初にPlatformに「Android」、Development OSに「macOS」を選択します。

f:id:horie1024:20170205142025p:plain

事前準備

Command Line ToolsJava Runtimeがインストールされていないならインストールしておきます。

  • Command Line Tools
xcode-select --install

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に似ている

次はokbuckAndroidプロジェクトをビルドしてみます。

参考