ナカザンドットネット

Android Developer's memo

Android版ChatWorkアプリ内で使われているOSSを眺めてて見つけた15のライブラリ

12/10に、ビジネス用途向けのチャットサービス「ChatWork」のAndroidアプリが大幅リニューアルされました。

チャットワーク社といえば、国内有数のTitanium Mobileをガッツリ触っている会社としても有名ですが、今回のリニューアルではAndroid SDK + Javaによるネイティブ化を断行したようです。(ツール選びに関する感想は最後に書きました)

というわけで、Facebookアプリのときに続きまして、OSSライブラリのライセンス一覧を眺めていたら面白かったので、各ライブラリに感想を入れていきたいと思います。

ActiveAndroid

クックパッドAndroidアプリにおける最近のDB運用事情 - クックパッド開発者ブログ

クックパッドでも採用されて、苦しみの声が上がっているやつです。弊社では少し実用した後でContentProviderとの相性が死ぬほど悪い(検証当時)という理由でリプレイスしたことがある思い出深いライブラリでもあります。

現在ではContentProvider対応のPullReqがマージされたので、そのへんは解決されていると思われますが、作者が「5年以上ActiveAndroidやってきたけどさー、今の設計だとコレ以上パフォーマンス出ないんだよね。だから発想変えて別のO/Rマッパー作るわ!」とかぶっちゃけてて、今後の開発どうなるんだろう、と不安になるところです。ただ、当のOllieとやらも数ヶ月更新が無いので、pardomさんが何かの拍子に我に返ったという可能性もあります。

後述のRealmと用途が被ってる部分もあるので、何と使い分けてるのかなという気持ちもあります。

とりあえず、O/Rマッパーとしての使い勝手や、クエリの発行しやすさで言えばORMLiteよりも楽な気がするので、良いライブラリだと思います(こなみ)

Android Priority Job Queue (Job Manager)

今回初めて存在を知ったやつです。やたら動く(+)ボタンで一世を風靡したPathが公開しているライブラリなんですね。

順番に実行したいタスクをAsyncTaskとかLoaderとかServiceとかで実装するのは大変手間なので、良い感じに順次実行してくれる的なやつでしょうか。便利そうです。

Butter Knife

安定のJW。(広義で)Squareからの刺客その1。

アノテーションによるfindViewByIdsetOnClickListenerの簡素化といったどこか聞いたことのある機能を提供してくれるライブラリですが、他のライブラリに比べると責務を絞ってあり軽量であるという印象があります。

今度弊社でも採用しようかなと思っているところです。

というかAndroidAnnotationsは重厚すぎて全力でロックインする覚悟がないと採用しづらいし、RoboGuiceはスーパークラスを汚染するしで他に選択肢がない

Chunk Templates for Java

今回初めて知ったやつです。

Java向けのHTMLテンプレートエンジンらしいです。このへんを見ると分かりやすいでしょうか。WebViewに表示を任せている部分があるということだと思います。

EventBus

出た!死ぬほど便利なやつ!

従来はBroadcast Intent+BroadcastReceiverなどで実現していた「ある場所から別の場所へイベントを通知する」という目的を良い感じに果たしてくれるライブラリです。一説では、Fragment→Activityの通知や、Service⇔Activityの通信はもう全部これでいいんじゃないかという話もあります。

もちろん飛び道具の類なので、多用すると状態が増えすぎて死ぬ危険が増しますが、適切に使えば強い味方になってくれるはずです。

FloatingActionButton

チャットワークアプリの新UIの中で、一番おもしろかった部分です。

今回のリニューアルの目玉の1つがMaterial Designへの対応でしたが、その中でもFloating action buttonの実現にフォーカスしたライブラリがこちらになります。

他にも makovkastar/FloatingActionButton(★1024) や FaizMalkani/FloatingActionButton(★450) がある中で、このライブラリが選ばれたのは、ボタンが増えるアニメーションの面白さでしょうか。

image

実際、チャットワークアプリの新UIをひと通り触った時は、僕もこの(+)ボタンを連打してしまいました。楽しいです。

しかしこれ、近いうちにappcompat-v7でサポートされて、リプレイスするかどうかの選択に迫られそうだなあ。ActionBarSherlock(→ActionBar)やViewPagerIndicator(→PagerTabStrip)が通ってきた道ですね。

Icepick

SavedInstanceStateを扱うのをちょっと楽にしてくれるライブラリみたいです。Android 1.6くらいの時代に使われていたIcicleという言葉が使われていて、古参の琴線をフルスイングで殴ってくる感じのライブラリになっています。

AndroidAnnotationsにも@InstanceStateっていう似たようなアノテーションあるけど、たぶんIcepickのほうがいい。

Joda-Time

java.util.Calendarがアホみたいに使いづらいのを何とかしてくれる神ライブラリ。あまりにも神すぎて、JDK1.8ではJoda-Timeにインスパイアされた形で"Date and Time API"(JSR-310)というのが入ったりしました。

参考: http://acro-engineer.hatenablog.com/entry/20130213/1360691391

ちなみに内部のメソッド数が4611個とかある(当社調べ)ので、dexのメソッド数65536上限問題に立ち向かうときには少しお気をつけて。

jQuery

言わずと知れたJavaScriptライブラリ界の巨人ですね。Chunkと組み合わせてWebViewに使っていると予想されます。

json-simple

公式のorg.jsonをシンプルにしたやつらしい。

たまにorg.json.JSONObjectorg.json.simple.JSONObjectが紛らわしくてアレなイメージしかないんだけど、動作が速かったりするんだろうか。

OkHttp

Squareからの刺客その2。お手軽な使い勝手のHTTPライブラリ。

現状、AndroidSPDYプロトコルが使える、数少ないネットワークライブラリなので、近年いろいろなところで重宝されているようです。

Picasso

Squareからの刺客その3。素晴らしい画像読み込みライブラリです。

URL, Drawableリソース, java.util.Fileオブジェクトなど、様々な形で画像を指定すると、とりあえずロードしてきてImageViewに放り込んでくれる素敵なライブラリです。画像表示はこれがないとやっていられません。

内部でOkHttpを全力で使って、画像のキャッシュにも対応しています。

Realm (realm-java)

iOSのCoreDataやSQLiteを置き換えるために生み出されたという、C++RDBMSライブラリですね。

@さんがたまに 言及しておられるような印象があります。

ActiveAndroid的なクエリ発行の使い勝手の良さも感じますし、速度が凄いとのことなのでちょっと興味はあるんですが、流石にプロダクトに使っていい品質ではないだろうなあと邪推して、今のところは手を出していません。

流石チャットワークアプリさん、チャレンジャーだぜ!

と思っていたんですが、チャットワークアプリver3.0.3ベースで本記事を書き始めた後、ver3.0.4でRealmがライセンス一覧から消えました。どうやらRealmを使うのをやめたようです。

やはり人類にはまだ早すぎたのでしょうか。

Secure-preferences

SharedPreferenceに保存するKey, Valueそれぞれを256-bit AESで暗号化してくれるやつだそうです。自分でやるよりは楽そうですね。

TimesSquare for Android

Square最後の刺客。カレンダーライブラリです。

おしゃれ感ありますよね(小並感)

まとめ

ちょいちょい攻めてる感じのライブラリ選定をしていてアツいなと思いました(既に1件思い直されていますが)。ただJSON周りはJsonPullParserとか使うと型安全にマッピングできていいんじゃないかなと思ったり(ステマ

あとやっぱりSquare社とJWに足を向けて寝られないことになっているアプリって多そうだなと再認識したところであります。

その他、RoboGuiceやAndroidAnnotations重すぎてつらいということを再認識できました。

チャットワークさんは社内チャットとして大変お世話になっておりますので、今後とものご繁栄をお祈り申し上げます。改めまして、リニューアルおめでとうございました。

余談:発足初期の技術選択について

やっぱりクロスプラットフォームツールは保守が大変だったのかなあ、と邪推してはいるものの、「だったら最初からJavaで作ればよかったのに」とは思っていません。

恐らく、初期のメンバーのスキルセットの範囲で、最も早く顧客に価値を届けうる選択肢がTitanium Mobileだったのでしょう。

サービス発足初期は、迅速にプロダクト(≒価値)をユーザーに届け、使ってもらいながらサービスのどの部分の価値を最大限に高めていくのか見極めるのも、また1つの戦術です。

「顧客に本来届けたいもの」が出来上がるまで顧客に価値を全く届けないことより、80%くらいの中核となる価値を真っ先に届けた上で、フィードバックを得ながら時間をかけて「本来届けたかったもの」を届ける。外部から見て、チャットワーク社はこれを実践したように思います。

というわけで、現代のサービスの立ち上げ方、育ち方として、良い事例が1つ生まれたなあと思う次第でございます。

12/15 9:20追記

チャットワークCTOの山本さんも、似たようなお話を講演されていました。既に公知の話題だったことを改めて書いた形になって恥ずかしい(´・ω・`)

自分がいなくてもうまくいく仕組み

自分がいなくてもうまくいく仕組み

自分がいなくてもうまくいく仕組み

自分がいなくてもうまくいく仕組み

TypeScriptの型定義が思ったより柔軟だった楽しい

TypeScript 1.0のリリースを機に、ちょっとJavaScript方面にも手を出してみようかということで、最近はわかめ本を読みながらチマチマとコードを書いております。

TypeScriptリファレンス Ver.1.0対応

TypeScriptリファレンス Ver.1.0対応

今日は技評さんのjQuery記事をTypeScriptで写経しながら読み進めていました。

もちろんjquery.d.tsを使って型チェックを利かせながらの写経です。メソッドがサジェストされるのもなかなか気持ちが良いですが、 ajax(settings: JQueryAjaxSettings) への渡し値であるJQueryAjaxSettingsがしっかり定義されているため、キーがサジェスト&プロパティ存在チェックされるわ、値に型チェックが入るわで、超気持ちいい感じです。

しかし、こうも型で守られた中で写経していると、むしろ型が付いていないところが気になってしまいます。特に今回の写経では、ジェネリクスが利いている each<T>(collection: T[], callback: (indexInArray: number, valueOfElement: T) => any): any; にany型のcollectionを渡してしまうのは、型の確定を心待ちにしているであろう valueOfElement さんにあまりにも申し訳が立たないと感じました。

というわけで、自前でインターフェースによる型定義を行ってみることにしました。YouTubeAPIから返ってくるJSONは、本来ならばそれなりに複雑ですが、今回の例に使う部分だけならば、下記のようなJSONを想定すれば充分でした。

{
  "feed": {
    "entry": [
      {
        "media$group": {
          "media$player": [{"url": "http://hogehoge"}],
          "media$thumbnail": [{"url": "http://fugafuga"}]
        }
      },
      ...
    ]
  }
}

で、実際に写経してみたのが以下になります。

YouTubeResponseFeedまでは真面目に書いていたのですが、途中から面倒くさくなってEntryインターフェースではエイヤッと超適当に書いてみたら通って逆にびっくり。構造的部分型の真骨頂を垣間見たような気がします。

そんなわけで、successに定義した関数は、JavaScript版と変わりなく書かれているように見えますが、

  • ジェネリクスによる型の確定(data.feed.entryEntry[]型であり、itemEntry型である)
  • 型チェック(group.media$playerは配列である)
  • パラメータ存在チェック(group.media$player[0]urlというパラメータを持つ)

のようなことがコンパイル時に行われています。タイポしたり、存在しないメソッドやパラメータを勝手に生やすと速攻で叱られるので、私のようなゆとりプログラマーでも安心してコードを書くことができますね。

まとめ

構造的部分型を活用してインターフェースを定義すると大変捗る!!!

おまけ

むりやり1つのインターフェースにまとめてみた。可読性はクソ悪い*1けど、TypeScriptの型システムとしては、これでもOK。

interface YouTubeResponse {
  feed: {
    entry: Array<{
      media$group: {
        media$player: Array<{url: string;}>;
        media$thumbnail: Array<{url: string;}>;
      };
    }>;
  };
}

*1:慣れるとそこまででもない?

僕がEclipseをやめてAndroid Studioを使っている10の理由

どうも、nkzn.netの更新を忘れてて転売屋に取られた人です。

今日はAndroid Bazaar and Conference 2014 Springですね。僕は業務都合的なアレで今回のABCに参加できないため、夜の裏会だけ行きます。

ただ、全くなにもしないのも寂しいので、景気付けに1本記事を書かせてもらいました。Effective Androidトラックの発表内容とネタ被りしたらごめんな!!

たぶん@とか@さんがこの記事より良いこと喋ってくれると思うので、みなさん秋葉原UDXで著者たちと握手!!(宣伝)

Effective Android

Effective Android

  • 作者: TechBooster,小太刀御禄,出村成和,重田大助,西岡靖代,宮川大輔,柏本和俊,あんざいゆき,八木俊広,木村尭海,小林慎治,有山圭二,中西良明,わかめまさひろ,新井祐一,桝井草介,久郷達也,寺園聖文,shige0501,山下智樹,前田章博,秋葉ちひろ,末広尚義,中澤慧,日高正博,塚田翔也,井形圭介,中川幸哉,山崎誠,山下武志,なまそで,橋爪香織,さとうかずのり,l_b__,ゼロハチネット,長汐祐哉
  • 出版社/メーカー: インプレスジャパン
  • 発売日: 2014/01/17
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (7件) を見る

はじめに

さて、ここ何ヶ月かで、「実際Android Studioどうなん」という質問を受ける機会が増えてきたので、ここらで一度、僕がAndroid Studioを常用していて嬉しいと感じていることを書きなぐってみました。

昨年11月から、業務で約4ヶ月使ってみての感想です。新人研修にも1ヶ月ほど使ってみています。

前半はどちらかというとAndroid Studioを使うことで利用可能になるGradleがいいよね的な話、後半はAndroid StudioというIDE自体の話です。

IntelliJ IDEA + Android Pluginでも同じようなことできると思うので、「IntelliJ IDEAを使うべき〜」に読み替えてもいいです。Android StudioをやめてIntelliJ IDEAを使うべき10の理由を書きたい人は是非お願いします!!!

※ここ4ヶ月、ほとんどEclipse+ADTの環境を触っていないので、「それEclipseでもできるよ!!!!」なことがあったらごめんなさい&お知らせください

1. Gradleが標準ビルドツールとして採用されている

この記事を書き始めたモチベーションはこれが8割です。でも書き終えてみたら愚痴ばかりであんまり面白くなかったので、読み飛ばして次へ行ったほうがいい気がします。

読み飛ばす方のための1行まとめ:Android Studioが標準対応しているGradleは、Androidアプリ向けのビルドツールとしてAntやMavenより柔軟で使いやすいので良いよ!!

原初の時代:Ant

Eclipse(というよりは、旧来のAndroid App Projectの構造)では、コマンドライン向けの標準ビルドツールがAntでした。で、Eclipseからならサクッとできる方法が、コマンドラインからだとクソ面倒くさかった印象があります。

模索の時代:Maven

ビルドプロセスやライブラリ依存性をもっと柔軟に管理したかった人々が次に手を出したのがMavenでした。MavenにはMaven Central Repositoryというライブラリ置き場があり、設定ファイルにライブラリ名とバージョンを記述することで、ライブラリをダウンロードしてきてプロジェクト内で利用できるという、バージョン管理システムに優しい感じの仕組みもあり、有望かと思われました。少なくとも、コマンドラインからビルドやテストが実行できるという点で、CIのしやすさという条件は満たしていました。

が、そもそもMavenの設定ファイルであるpom.xmlはちょっと闇が深い系のアレであったことや、公式ツールではないことによる不安定さ(環境を安定させるために熟練の業を要した)、環境構築の度にmaven-android-sdk-deployerを実行するのがダルい、などの理由により、使いやすいかと言われるととても頷けるものではなかったと思います。

新たなる息吹:Gradle

そこにGoogleが公式にぶっ込んできたのがGroovyベースのDSLであるGradleとなります。手続き型な感じのスクリプトで、個人的にはMavenXMLよりも何が書いてあるのか読みやすいと思いました。また、Maven Central Repositoryも利用できるため、ライブラリの取得も容易です。Groovyがそのまま書けるため、いざとなれば柔軟な処理も書けるのも、ポイントが高いところです。

Gradle Wrapper(gradlew, gradlew.bat)の仕組みにより、デベロッパーの手元にシェルやbatの実行環境(と、Android SDKへのパス)があれば、それだけでプロジェクトのビルドができてしまう点も、チーム開発やオープンソース開発を行う上では嬉しい点です。

そして、Android Studio側でビルドなボタンを押した時の挙動は、コマンドラインから ./gradlew assembleDebug をしたときと同じ。もう「IDEからは動くのに、コマンドラインからだと動かない」なんて謎現象に悩まされる必要はありません。*1

何を言いたかったかというと

Mavenでプロジェクト管理するの凄く苦しかったからGradleで管理できるようになって嬉しかった。(私怨 && 小並感)

2. dependencies設定でライブラリ取り放題

さて、Eclipse+Mavenだとpom力(ぽむりょく)を磨かないといけなくてマジファックでしたが、Android Studio + Gradleでは、↓のようなコードをbuild.gradleの中に書くだけでライブラリのダウンロードを行い、Androidアプリの中で使えるようにしてくれます。

dependencies {
    compile "com.nineoldandroids:library:2.4.0"
}

compile "group_id:artifact_id:version" な感じですね。Mavenの枠組みで配布されているライブラリはこれで取ってこれます。DaggerだってPicassoだってすぐに使えるようになります。

GradleやAndroid Studioはまだまだ浸透してきたとは言いがたいですが、Maven Central RepositoryでJARライブラリを公開するのはJava界隈で既に広く浸透している文化ですので、この仕組みによって得られる恩恵は計り知れないと言ってもいいでしょう。

ライブラリ導入のコストが滅茶苦茶下がりました。やったね!!!

3. AARなライブラリプロジェクトもdependenciesで取ってこれる

AARはAndroid ARchiveの略らしいです。JARのAndroid版だという認識ですけどよくしらない。どうやらライブラリプロジェクトをビルドしたときに生まれる、ファイルとしての実体みたいですね。(そういう意味では、APKファイルに類する存在なのかも)

さて、この形式のライブラリプロジェクトは、作者が頑張ってくれている場合、gradleのdependenciesで取ってこれます。

詳しくはゆーいち先生の記事を御覧ください。

実際にこの形式で配布されているライブラリとしては、@さんのIndirectInjectorなどがあります。

4. ビルドの種類を定義してソースフォルダ単位で切り替えられる

社内向けデバッグ用、モニターユーザー向けリリース用、Playストア向け無料版リリース用、Playストア向け有料版リリース用、などの切り替えを、ビルド時にコマンドによって切り替えられる機能があります。Build TypeはDebugとReleaseの2種類ですが、Product Flavorは任意の数だけ用意できるので、色んなパターンのアプリを作らないといけない場合には便利な機能ですね。

下記の記事が詳しいです。

Build Variants によって別バージョンの Android アプリを同じプロジェクトからビルドする (Gradle 使用) - ひだまりソケットは壊れない

5. Android Studioのプロジェクト設定がGradle依存

f:id:Nkzn:20140320232131p:plain

プロジェクトフォルダの構造が少し複雑になってきたりすると、ソースが入ったフォルダをビルドパスに追加し忘れる凡ミスにより、上手くビルドできなかったりした経験はないでしょうか。

Android Studio + Gradleの環境では、settings.gradleやbuild.gradleに記述した内容がAndroid Studioのプロジェクト設定に直接反映されるため、そういったミスが起きづらくなっています。

また、チーム開発時にも、IDEの初期設定に割く時間を減らせそうです。

Intellij IDEAみたいに Mark Directory As > Test Source Root みたいな感じでIDEからソースフォルダを指定したくなるときもありますけどねー。

6. 画像リソースの小さいプレビューがXMLJavaから見える

f:id:Nkzn:20140321001504p:plain

JavaXMLで、drawableリソースの中身がエディタの左端に出てきます。

f:id:Nkzn:20140321001540p:plain

Javaのほうは式として成り立っていなくても出てきたので、判断基準が結構適当みたいです。

7. colorリソースの色がXMLJavaから見える

f:id:Nkzn:20140321000328p:plain

JavaXMLで、colorリソースの色がエディタの左端に出てきます。

color.xmlはなかなか壮観ですね。

f:id:Nkzn:20140321000713p:plain

いまどんな色が画面に出ているのかコードを書きながらイメージしやすいのは、嬉しい時もあるのではないでしょうか。(実はあんまり嬉しい場面が思いついていないけど綺麗なので挙げた)

8. 各種リソースの参照が文字として見える

f:id:Nkzn:20140320234612p:plain

XMLファイルやJavaファイルの中で、dimenやstringで定義した要素の値が、一時的に置き換えて表示されます。実際のファイル上で指定した値が書き換わるわけではなく、あくまでも見た目だけで、マウスオーバーすると元の値を見ることができたりします。

実際には↓のようになっているファイルも・・・

f:id:Nkzn:20140320235104p:plain

こんなふうに見えます。

f:id:Nkzn:20140320235151p:plain

Javaの中でgetString(resId: int)で呼ばれている値も同様に置き換えられます。

f:id:Nkzn:20140320235839p:plain

↑これが↓こうなる

f:id:Nkzn:20140320235854p:plain

これで、「あれ、このstringリソース、中に書いた日本語なんだったっけ?」とか「このdimen、実際には何dpだっけ?」なんて悩まずに済みますね!

9. レイアウトXMLテキストエディタモードでもリアルタイムプレビューできる

f:id:Nkzn:20140320233553p:plain

レイアウトのXMLを編集すると、ほぼリアルタイムでプレビューに反映されます。Android Studio登場以前から、IntelliJ IDEAでAndroid開発をする際の魅力的な機能として挙げられていました。

何を置くとどんなふうに見えるのか、トライアンドエラーが大変捗るので、デザイナーさんやAndroid初心者なプログラマーの人にレイアウトXMLを勉強してもらう際にも、効果バツグンです。

10. Kotlin言語が使える

Android StudioJetBrains製のIDEであるIntelliJ IDEAをベースにしているので、ちゃんと設定すればKotlin言語を利用することができます。Androidで使えるベターJava言語を探している方にオススメです。

Null-safety機能すっげえいいよ!!!!

まとめ

現状、僕がEclipseを使う理由は(業務上やむを得ないアレが無い限り)どこにもありません。*2

でも僕が魅力を感じているのはどちらかというとGradleのほうなので、ADTがGradleに対応したらそれはそれで触ってみたい気がします。

今回は「IntelliJ IDEAが元々持ってた良さ」みたいなものは基本的に挙げなかったので、他にもAndroid StudioやIDEAを敢えて使う利点はありそうです。そのへんは他の方が記事書いてくれてると思うので、探してみてください。

それでは、良いAndroidアプリ開発ライフを。

あわせて読みたい

Android StudioでEclipseのアレをやるには? - _development,

*1:もちろん動かない時はどっちでも動かない

*2:フォーマッターの取り回しでいうとEclipseのほうが良いけど

第36回 長岡IT開発者勉強会 #nds36 に行ってきました

第36回勉強会(2014/03/15) - 長岡 IT開発者 勉強会(NDS)
http://nagaoka.techtalk.jp/no36

今回のNDSは盛り沢山でしたね。2回発表した人が3人いたので輪をかけてボリュームが凄いことに。

というわけで、スライドが公開されているものはスライドも込みでレポしていきます。

メインセッション:Go言語入門

@さんによるGo言語についての入門セッションでした。

Go Playgroundというサイトを知れたのが個人的には一番の収穫でした。コードをその場で実行して試せるのもさることながら、Gistみたいに書いたコードに固有のURLを付けて、他の人に動作可能な状態で見せることができる。すごく便利。Gistにこういう機能付いたら面白いんだけどなあ。

全体を通して、golangへの見方が僕の中でガラッと変わったと思います。モダンなプログラミング言語なので、高級寄りの言語なのだろうと思ってました。が、実際に蓋を開けてみると、確保するbit数が違うintNNなプリミティブ型があるし、スライスなんてもろにポインタを意識してるし、かなり低級寄りでした。

正直ポインタが学生のときに習ったときのふわっとした理解のままで止まっているので、ガッツリとポインタが出てくる言語は使える気が全然しないですが、@hayajoさん的には「ベターCというよりもミニマルC」という印象らしく、実際に仕様もかなり小さいみたいです。

あ、golangのinterfaceの考え方がTypeScriptのinterfaceとかなり近い感じがしたんだけど、この辺なにか言語作った人たちの間でのシンパシーがあったのだろうか。興味深かったです。

サブセッション:いろんな言語たち

いちおう公式からのレギュレーションとしては

1言語につき何人話してOKです!
レガシーでも最新でも、初級から上級まで「言語」をテーマに含めてくれればなんでもOKです。(ただなにもその知識がない人向けにも、さわりだけでも話してもらえると助かります)

とのことでした。

続きを読む

Android Studio 0.4.4でKotlinを使う設定の覚え書き

最近のAndroid Studioでも動くのかどうかよくわからんかったので、調べてみました。

対象読者

Android StudioでHelloWorld作ったりエミュレータデバッグをするくらいならできる人。

Kotlinプラグインを入れる

Preferences(MacならCommand+,)から、設定画面を開きます。

f:id:Nkzn:20140211145725p:plain

Pluginsの画面で、Browse Repositories...を押してウィンドウを開きます。

f:id:Nkzn:20140211145840p:plain

出てきたプラグイン群を右上のテキストボックスで絞り込んで、Kotlin関連のものだけにしましょう。

Kotlinプラグインを右クリックすると出てくるDownload and Installを押してしばらく待てば、Kotlin環境の導入は完了です。PreferencesのOKを押すと再起動を求められるので、再起動しておきましょう。

動かしてみる

JetBrains / kotlin-examples https://github.com/JetBrains/kotlin-examples

公式サンプルである↑の /gradle/android-mixed-java-kotlin-project/Android Studioにインポートしましょう。

たぶん動くと思います。

設定内容が気になる人は、↓のページを見ながらAndroidSample/build.gradleを眺めてみてね。

http://blog.jetbrains.com/kotlin/2013/08/working-with-kotlin-in-android-studio/

まとめ

公式のサンプルコードが古すぎて動かなかったので、修正してPull Request送ったんだけど、余計なコミットを入れすぎて指摘の手間をかけてしまい、JetBrains社のNatalia氏には大変ご迷惑をおかけいたしました(´・ω・`)

Android Studioのレイアウトプレビューが全角の<>を><として認識する問題

Android Studioにちょっと不思議なバグがあったので備忘録として残しておきます。

バージョン

Android Studio (Preview) 0.4.4 (Mac版)

f:id:Nkzn:20140211132818p:plain

現象

レイアウトXMLandroid:textに大なり記号(>)を書くと、プレビューで小なり記号(<)として表示される。

コード

f:id:Nkzn:20140211132655p:plain

プレビュー

f:id:Nkzn:20140211133345p:plain

小なり記号は?

逆もまた然りです。コード内にを書くと、プレビューでになります。

ビルドすると?

アプリを実行すると、普通にコードに書いたままの表示になりますので、ぶっちゃけ気にしなければ問題ない感じです。

プレビュー単体の問題っぽいですね。

半角の場合は?

XMLなので、大なり記号は&gt;、小なり記号は&lt;と書くことになりますが、どちらもプレビュー上で普通に表示されました。

さて、なんだろう、これ。後でバグ報告送っとこう。

Android版Facebookアプリ内で使われているOSSを眺めてて見つけた43のライブラリ

メニュー>概要>ライセンス の中にあるアレですね。

なんか良いUIライブラリ見つからないかなーと思って探し始めたら、案外と色々入ってて心折れそうになった。

どこで使ってんだよそれ感高い奴もかなりありますし、明日からでも使ってみたいJoda-Timeのようなライブラリもありました。コピーレフトで仕方なく書いてあるんだろうなあ的な、内部ライブラリっぽいものは省いてあります。

さあ、頑張ってみていきましょう。

AChartEngine

https://code.google.com/p/achartengine/

グラフとか書ける系のアレ。

Application Crash Reporting for Android

http://acra.ch/

通称ACRA。クラッシュレポートをPlayストアとは別に収集する系のアレ。 某秋田の地ビールとは関係ありません。

ActionBarSherlock

http://actionbarsherlock.com/

元祖・Android 2.xでもActionBarが使えるライブラリ。 そのうちActionBarCompatに書き換わったりするのかなあ。

続きを読む