EDIT MODE

モバイルアプリ開発に関することを書いています

DroidKaigiで発表してきたこと+ちょっと追記

4/25(土)にDroidKaigiという、Androidエンジニア向けのカンファレンスに参加しました。 今回は久しぶりに運営側として参加したり、発表もさせて頂きました。

運営側視点では、圧倒的当事者意識の体現者である @hotchemi さんが、素晴らしいまとめを書いてくださっているので、ここでは発表した内容の補足や追記をしたいと思います。

DroidKaigiの運営進め方共有(ギークに憧れて)

発表したこと

DroidKaigi当日は、会場Bの方で「JellyBeanとKitkatで実現するマテリアルデザイン」というタイトルで発表しました。 3日前にアップデートされたSupportLibrary-v22.1の中で、主にAppCompat-v7の変更点に触れながら、SupportLibraryを使ったマテリアルデザインの実現方法を解説しました。

4/22日の時点で既に7割ほど出来ていた資料でしたが、SupporLibraryが22日朝に大きくアップデートされたため、急遽一から資料を作り直すことにしたという貴重な体験が出来ました。

結果、「最新情報をキャッチアップした内容が聞けて良かった」という感想を頂く事が出来たので、書きなおしてみて良かったです。 ただ、何を資料に載せるか悩みながら書いたので、今振り返るといろいろと不足していたなと感じる部分が多々あります。

また、発表中にv22.1.1というマイナーアップデートが観測されるというミラクルも起きたので、その部分についても補足したい欲が出てきました。ということで、ここからは上記資料で書ききれなかったことを追記していきます。

1. 新しいInterporatorについて

資料の中で実際にアニメーションさせた動画を載せたのは良かったものの、新しいInterporatorはどういう良さがあるのかきちんと説明出来てないなと思いました。

公式ではAnimation > Authentic motionにて

To draw attention to an object for a specific purpose, or to add character to an animation, vary its change in speed when starting and stopping.

とあります。

また日本語でもこちらに

ゆっくりと始まり、ゆっくりと終わる典型的な遷移とは異なり、マテリアル デザインにおけるオブジェクトは素早く動き始め、ゆっくりと最終位置につきます。(中略)結果としてユーザーは遷移動作が終わるのを待つ必要がなくなり、モーション化によるマイナス効果は最小限に抑えられます。

とあります。

つまりは、アニメーションを見せつつ、ユーザーがその変化から受けるネガティブな面を、極力小さくするということのようです。微妙な違いではあるけど、Lollipop端末を触ってみるとその違いは大きいのが良く分かります。

とても理にかなっているなと思うので、Kitkat以下でも同様の表現が出来るようになったのは嬉しいですね。

2. v22.1.1について

DroidKaigiでの発表が終わる(16:30くらい)頃、数名の方から「v22.1.1が出たみたいだよ!」と声を掛けられました。会場設営のため朝早く脳が活動低下してきていたので、最初意味が分かりませんでした。

しばらくして調べてみたら、主にbug fixesがメインっぽかったのでホッとしました。主にRenderScriptまわりのbug fixesのようでした。

差分について、最初に書いた内容が誤りだったため訂正します。(4/29追記)

指摘くださったのは、DroidconMontrealでJake神にどら焼きを届けるという偉業を成し遂げた zaki50 さんです。ありがとうございました!

ソースのDiffを取ると分かるとのことだったので、取ってみました。

$ diff support-v4-22.1.0-sources.src/android/support/v4 support-v4-22.1.1-sources.src/android/support/v4
diff --git a/support-v4-22.1.0-sources.src/android/support/v4/view/LayoutInflaterCompatHC.java b/support-v4-22.1.1-sources.src/android/support/v4/view/LayoutInflaterCompatHC.java
index ee1a413..06e72f4 100755
--- a/support-v4-22.1.0-sources.src/android/support/v4/view/LayoutInflaterCompatHC.java
+++ b/support-v4-22.1.1-sources.src/android/support/v4/view/LayoutInflaterCompatHC.java
@@ -49,7 +49,16 @@ class LayoutInflaterCompatHC {
         final LayoutInflater.Factory2 factory2 = factory != null
                 ? new FactoryWrapperHC(factory) : null;
         inflater.setFactory2(factory2);
-        forceSetFactory2(inflater, factory2);
+
+        final LayoutInflater.Factory f = inflater.getFactory();
+        if (f instanceof LayoutInflater.Factory2) {
+            // The merged factory is now set to getFactory(), but not getFactory2() (pre-v21).
+            // We will now try and force set the merged factory to mFactory2
+            forceSetFactory2(inflater, (LayoutInflater.Factory2) f);
+        } else {
+            // Else, we will force set the original wrapped Factory2
+            forceSetFactory2(inflater, factory2);
+        }
     }

     /**

発表でもリンクを貼ったGoogle+の投稿のコメント(4/25 IanLake氏)に、

FYI, 22.1.1 is available now with the fix for widget tinting inflated from fragments. Thanks for the reports everyone!

ともありました。(確認不足でした。すみません。)

3. support.design.widgetパッケージ?

すみません、これは完全に脱線した内容ですが、2について調べている過程でSupportLibraryのリポジトリを見ていたら、support.design.widgetという見慣れないパッケージがありました。 中を見るとFloatingActionButton.javaが存在してました。他にも、NavigationDrawerView.javaやTabLayout.javaがあります。

f:id:androhi:20150428012534p:plain

気付かなかっただけかなと思い、ローカルにDLしたSupportLibrary-v22.1.1を見たけど、やっぱりありませんでした。もしかしたら、ついに公式のFloatingActionButtonなどがリリースが近いのかも。

4. AppCompatDelegateについて

Google@yuichi_arakiさんの、SupportLibraryでもPreferenceActivityが使えるようになった、というツイートを見かけたので確認してみました。

AppCompatではv22.1でAppCompatDelegateという抽象クラスが追加されてます。このクラスを使えば、どんなActivityクラスにもAppCompatの機能を継承することが出来るようです。

この仕組みを使って、PreferenceActivityにAppCompat(ActionBar的な機能)を追加できるということでした。詳細はAppCompatPreferenceActivity.javaというサンプルコードがあるので、それを見れば一目瞭然でした。便利ですね、AppCompatDelegate。

SupportLibrayのサンプルコードは、Platformのサンプルと同様に、SDK Manager経由で取得します。Extrasの中にあるAndroid Support RepositoryAndroid Support Libraryを最新にすると、以下の手順でサンプルプロジェクトを見ることが出来ます。

今回見たいAppCompatPreferenceActivityは、Support-v7のサンプルなのでSupport7Demosというプロジェクトに入っています。

  1. SDK ManagerでSupportLibraryのv22.1.1をDLする
  2. AndroidStudioでFile > New > ImportProject...を選択する
  3. [sdk]/extras/android/support/samples/Support7Demosを選択する
  4. ライブラリの依存関係が未設定なのでapp/build.gradleに以下を追加する
dependencies {
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.android.support:cardview-v7:22.1.1'
    compile 'com.android.support:gridlayout-v7:22.1.1'
    compile 'com.android.support:palette-v7:22.1.1'
    compile 'com.android.support:mediarouter-v7:22.1.1'
    compile 'com.android.support:recyclerview-v7:22.1.1'
}

f:id:androhi:20150428012625p:plain

まとめ

発表のまとめの最後に、今年のGoogle I/OがMaterialDesign発表後の最初のI/Oなので、今後に関する何かしらの発表があったらいいなと言いましたが、今回新たなパッケージを見つけたり、SupportLibraryは今後も進化していきそうなので、楽しみな流れになってきたと思います。

日本の通信キャリアから発売されてるAndroid端末は、いまだにLollipopへのアップデートが全くの未定です。SupportLibraryによってKitKatでも、少ない労力で適切にMaterialDsignのメリットを活かすことが出来るようになればいいなと思いました。

Androidアプリ開発にRxJavaを導入したいと思って参考にしたサイト

まとめが欲しかったのでまとめました。

RxJavaの存在は知っていたけど、学習コストの高さから尻込みしている方も多いと思います。僕もそうでした。正直ドヤ顔するためのライブラリだろうと思ってた時期さえありました。

ところがAndroidアプリ開発にRxJavaを導入することで得られる、さまざまなメリットを知るようになって考えが変わっていきました。とはいえ学習コストが高いのは事実です。 そもそもReactiveXの世界が理解できないと、サンプルコードを見ても全くしっくりきませんでした。そんな中で以下のサイトのおかげでようやく自分でも手を動かせるようになってきました。

他にも素晴らしいサイトがあると思います。ご存知の方は教えていただけると嬉しいです。

概要とかプログラミング・パラダイムとか

サンプルコードから学ぶ

多言語だけど雰囲気をつかめる

本家

DroidKaigiで発表してみませんか!

DroidKaigiというAndroid技術者のためのカンファレンスが、2015年4月25日(土)に開催されます。

先日、実行委員会の中で(微力ながら僕もこのカンファレンスの実行委員をしています)、「もっとたくさんのエンジニアの方に発表の応募をしてもらおう!」 という話しになり、実行委員会でブログを書くことにしました。

この記事はその中の一つです。

DroidKaigiですが、カンファレンスの主旨としては以下の2点に尽きるかと思います。(サイトからの引用です。)

  • エンジニアが主役のAndroidカンファレンスです
  • Android技術情報の共有とコミュニケーションを目的に

普段からアプリ開発に関連する勉強会は多々ありますが、人気のテーマだとすぐ定員になってしまいますし、時間も限られているので割と特定の分野であったり、別のプラットフォームの話しが混ざっていたりもすると思います。

そんな中でDroidKaigiではAndroidというプラットフォームに絞りつつ、いろいろなテーマのセッションを1日の中で聞くことが出来るカンファレンスになる予定です。

2月25日(水) までは、発表してくれる方の応募を受け付けています。

最新技術や人気の技術に関するものは人目を引くのかもしれませんが、エンジニアのみなさんが毎日の中で経験したことや調べたこと、自らの手で書いたコードが何より重要な技術情報だと思っています。

それらをぜひDroidKaigiで他のエンジニアに共有して頂けると、とても有意義なカンファレンスなる気がします。というか、実行委員のメンバーはそれを楽しみに開催に向けて頑張っています。

もし興味を持たれた方は、こちらから詳細を確認できますので応募してみて下さい。 DroidKaigi Call For Papers

Google I/O 2014 の What's new in Android development tools のセッション感想

今回見たのは、What's new in Android development tools というセッションです。


Google I/O 2014 - What's new in Android ...

まだあまりAndroidStudioをよく知らないという方は、とにかく一度 19:30 くらいから始まるデモは見た方がいいと思います。 きっとAndroidStudioの素晴らしさが、垣間見えるはずです。

全体でおよそ45分のセッションなのですが、主に3つのパートに分かれていました。

  1. Android Dev Tools (00:00)
  2. Android Studio (19:30)
  3. What's Next (33:56)

要点や感想などを、まとめてみました。

続きを読む

Google I/O 2014 の Subscriptions Made Easy with Google Play のセッション感想

Google I/O 2014 はいろいろ盛りだくさんだったので、セッションビデオをちゃんと見ようと思い、せっかくなので感想などを書いていきます。

今回は、Subscriptions Made Easy with Google Play を見た感想です。

定期購読機能を実装したことは無いのですが、今後必要になりそうなので興味があって最初の視聴に選びました。(時間も短かったし。)

スピーカーは、GooglePlay Teamのプロダクト・マネージャーの方らしい。

要点

  • 定期購読はサービス提供者と購入者の双方にメリットがあり、収益化の方法としてとても優れている
  • In-App Biilingサービスに組み込まれているので簡単に実装でき、様々な処理を自動化してくれる
  • デベロッパーコンソールから、お金や期間などを完全にコントロールすることができる

アプリ例

いろいろなカテゴリーのアプリで使われているとのこと。

例えば、"The New York Times"のようなニュースアプリ、"MLB At Bat"のようなスポーツアプリ、"SmartEducation"が開発する教育向けゲームアプリなど。

デベロッパーコンソールで設定できること

定期として設定できるのは、月単位と年単位から選択できる。また近いうちに、週単位や四半期単位も選択可能になる。

さらにユーザーにそのサービスを試してもらう方法として、無料試用の期間を設定できる。もちろん、この間にはユーザーに請求はいかない。

このセッションでの重要だと思った点

"if your app can offer great value to your users via subscriptions, in-app billing is as easy to use for subscription-based payments as it is for one-time payments."

参考となるドキュメント

感想

デベロッパーコンソールで細かく設定できるようになっていたのは、注力してる感じがすごい伝わってきた。今は無料アプリ+アイテム課金な組み合わせがうまくいっているみたいだけど、ゲーム以外では定期購読の方が相性良さそうだと思うので、In-app billingが多機能になるのはうれしい。

# Android Casual Talks #1 に参加してきた

概要など

イベントページは、ここ。 イベントの概要としては、募集ページから抜粋すると

"Androidのチーム体制や開発プロセス、アプリやパッケージの設計、モダンAPIやライブラリ、テストと品質、ビルド環境とCI、ログ解析や効果測定など、Androidアプリ開発に関することを深く浅く、広く狭く話しましょうという趣旨の会です。"

とのこと。当日のツイートは、ここにまとめられている。
とても勉強になった1日だったので、忘れないよう記事に残す。(備忘録的な目的なので、メモ程度の内容です。)

クックパッドの開発環境について

発表者:@rejasupotaro

  • コーディング規約をGitHub Enterpriseで管理
  • サーバーサイドでそうしてたから
  • 7月からAndroidStudio+Gradle環境に移行した
  • 社内にNexusサーバでmavenリポジトリ立ててライブラリ管理
  • サーバサイドでは新しい技術を取り入れる流れがあった
  • Androidでも
  • Debug -> Beta -> Release
  • Beta -> DeployGateでテスト配信
  • Release -> crashlyticsレポート収集
  • PAPA -> ユーザー意見を収集

品質を保つための組織的な取り組みと人に依存しないテスト

発表者:@mhidaka

  • メーカーの開発品質って視点
    • マインド:組織の目標を統一する
    • 反復:小さな目標に分割する
    • 計測と評価:メトリクス超大事
  • Android2.2, iOS6.0以上全部
  • 開発プロセスの決定
    • 目標をチーム内で共有
  • 反復(イテレーション
  • 単体テストの自動化:途中からやると難しいので必ず最初から
  • テスト設計
    • 必要最小限のものを
  • 開発環境の最適化
    • Redmine、ビルド環境、単相者への権限移譲
  • テストの重要性を理解する
    • テストをスキップする誘惑

グリーにJenkinsを導入して2年半で起こったこと

発表者:@watermint
公開資料:http://www.slideshare.net/okazaki/2013-0829-jenkins-for-cookpad-android

  • Jenkins使ってる人多い
  • Hudsonの時から使ってた
  • INND -> Jenkins -> iPhoneアプリにしたり
  • @ITに記事を書いた
  • 変えないことは大きなリスク
  • 技術負債の増大
  • 導入のポイント
  • ツールではなく、ワークフローをカエル
  • じっくり慎重に:無理強いしない
  • 許容する:拡張や改善の余地を残す
  • みまもる:ゆっくり成熟をまつ
  • 導入前の問題点
    • 作業の属人化
    • 成果物の管理
    • 残課題の管理
  • ツールの導入で解決 < 仕組みの改善で解決
  • 指標とリリース基準が結びつかないと無視される
  • 確認のために指標を利用する
  • 徐々にワークフローに組み入れる
  • 仕事の方向がそろうと多いな力になる(職種をまたいで)

Injectionの基礎(android編)

発表者:@WillOnWheels
公開資料:http://prezi.com/ehfdkvl9ps-1/inject-presentation/

  • Dependency Injection
  • Inversion of control - MartinFowler
  • ユーザーが信号を制御する
  • それを逆にする
  • 例:あるデータを取得する処理を複数箇所で行う場合、あちこちで処理をするより、クラスで持たせる。
  • 1.クエリ発行
  • 2.インスタンス
  • 3.Factoryパターン
  • 4.injector
//injector setting
//Lister<Person> を NetPersonLister で実装する

//injector usage
@Inject Lister<Person> contactLister;
  • maps interface to implementation
  • construct and inject objects
  • construct and inject parameters
  • メリット:only change injector setting!
  • Method injection
  • Member injection
  • まとめ
  • clarify dependencies
  • easy refactor
  • perfect for testing
  • Injection frameworks
    • Pico:minimal, efficient
    • Guice:fulll-featured, runtime
    • Spring
    • Roboguice:based on guice, Android specific features
    • Proton:small footprint
    • Dagger:Android, static injection
  • Androidでの注意点
  • Systemがつくるインスタンスがある -> Activity, Context…
  • RoboguiceではRoboActivityで解決してる

意外と役立つ?Android Open Source Projectすすめ

発表者:橋本 泰

  • OHAの話し
  • ブラウザのデフォルトでの起動設定を取得したいが難しかった
  • イルカのブラウザは撮れてる
  • OHAのコードリーディングした
  • 事前準備として言語設定を英語にしてターゲットのキーワードを確認した
  • OpenGrokでコード検索

アプリのリニューアルとその効果測定について

発表者;@consomme72

  • 終電のため聞けず(資料だけでも見たかった…)

JAG茨城 第6回勉強会を開催しました

先日、第6回目となる日本Androidの会(Japan Android Group)茨城支部の勉強会を、開催しました。
諸々の事情で、約2ヶ月ぶりの開催でした。

当日の流れは、こんな感じです。

  • 日時:9月8日(土)10:00 - 17:00
  • 場所:水戸市国際交流センター 和室
  • 参加人数:5名
時間 内容 担当者
10:00 - 12:00 情報交換など 各自
12:00 - 13:00 お昼ご飯 各自
13:00 - 14:00 Androidのテスト&NFCについて 下川
14:00 - 17:00 今後の支部の活動など 各自

午前

午前中は、のんびりと雑談したりしつつ、最近の話題などについて情報交換をしていました。普段は発表とか、ハンズオンとかを詰めているので、新鮮な感じがしました。たまには、こういう感じもアリかなと思います。
前日まで、新たに初参加の方がエントリーしていたので、とても楽しみにしていたのですが、都合がつかず今回は参加出来ないとのことでした。
いつかお会い出来るといいなと思います。

お昼

お昼ご飯は、最近定番となりつつある会場近くのデパートへ、全員で行きました。
「な嘉屋」というお店で、「辛子大根 蕎麦」を食べました。美味しかったんですけど、しょっちゅうは行けないお値段かなと。

午後

午後は、始めに僕が発表をしました。
Androidのテスト環境について、概要的なものをまとめた内容です。
当日の資料は、こんな感じです。

資料にはありませんが、最後にJenkinsを使ったテスト自動化のデモとかも、ちょっとだけしました。次回はJenkins導入あたりを、発表出来ればいいなと思っています。

おまけで、NFCについても少し発表しました。資料は、NFCLabの定例会で発表したときのものでしたが。
(資料の中で紹介している自作アプリは、GooglePlayに公開したので、対応端末をお持ちの方は、遊んでみて下さい。⇒GooglePlayへ

その後は、けっこういろいろな事をみんなで話していました。

  • Monkeyテスト
  • 最近使ってるMacソフト
  • 支部の今後の活動
  • ROVIO(angry birdの)
  • iPhone5
  • 僕の勤めてる会社のこと
  • などなど

今のところ、第7回勉強会は10月20日(土)の予定です。
会場の空きが少なくて、他に選択肢が無かったのですが、めっちゃABC東北と被ってます。どうするか考え中です。