ラベル Google I/O 2014 の投稿を表示しています。 すべての投稿を表示
ラベル Google I/O 2014 の投稿を表示しています。 すべての投稿を表示

2014年7月18日金曜日

Google I/O 2014 Polymer セッションまとめ

Google I/O 2014 - Polymer and the Web Components revolution



Topeka というサンプルアプリを作った。
Polymer と Material Design をテストするため。
http://polymer-project.org/apps/topeka
トリビアアプリ
Leaderboardがある

PCのChromeブラウザ上でのデモ。画面サイズを変えても動く。
Nexus5のChrome Betaでも動く。

"Polymer is a library that makes building applications easier"

"Polymer is different than what has come before"

"Polymer was built differently"

Polymer チームは Chrome チームの一部。2年前の今日(I/Oの日)プロジェクトを始めた。

Polymer は Web Components で作られている。
Web Components はすべてを変える。
Custom elements を作ることができる。Shadow DOM を使っている。
HTML の再利用ができる。

Chrome 36 からネイティブ対応。(I/Oのときは)beta channel。2、3週間で stable に入る。
Chrome だけ?そんなことない。 polyfills のおかげで思っているよりも多くのブラウザで動く。

Polymer は boilerplate を減らす。
Polymer は宣言的なシンタックス。

どうやって Poymer を使うのか?
1. エレメントを使う
2. エレメントを作る

エレメントを使う
1. 使いたいエレメントを見つける
2. Import する
<link rel="import" href="my-button.html">
3. 使う
<my-button label="Press Me!"></my-button>

Polymer のエレメントはただのHTML

エレメントを作る
1. 新しいタグとプロトタイプを登録
2. ビューを定義
3. イベントを処理
4. データとビューを紐づける
5. 属性の変更に対応する

Polymer Core Elements
ベーシックなエレメント。あまりスタイリングされていない。
<core-icon>
<core-ajax>
<core-localstorage>
<core-style>
<core-tooltip>

ajax や localstorage のタグもある


Polyme Paper Elements
Material Design っぽいエレメント
Button, Input, Tab, Card, Panel など...

mozilla は というのを出しているが、Polymer と対立するものではない。

デザイナーツールを用意した。
Polymer Designer

最適化
Polymer Vulcanizer
すべての import をまとめて CSS, JS, HTML にする

テストには Karma, Chai, Mocha を使っている。


QA

Q : Window を縮めたとき、エレメントがリサイズされませんでした。これは、いつ Window のリサイズに応じるかという Polymer paper のビジョンのよるものですか? media queries を行き来するよりも、エレメントはその場に残りますか?
(あんまり質問の意味がわからない)

A : 見ているスクリーンによると思います。つまり、どのようにセットアップされているかによると思います。ほとんどのウィジェットはコンテナーの幅に依存します。


Q : Polymer はとても cool ですが、まだまだプロトタイプですよね。Angular とかのライブラリを使う必要がある場合、Polymer paper とかを取り入れることはできますか? それとも Polymer で最初からやり直さないといけない?

A : custom elements はただの HTML エレメントです。どのように HTML を扱うか知っていれば、Polymer elements も使うことができます。element の外側と内側の世界があります。外側の世界では Polymer は他の HTML エレメントと同じようなものです。プロパティ、メソッド、属性があります。内側の世界では Polymer が提供する利点があります。Polymer の内側をフレームワークで作ろうとした場合にトラブルが起きることがあるかもしれません。なぜなら、それらは Shadow DOM などの扱い方を知らないからです。


Q : Polymer components と x-tagas components 両方含むような component directory はありますか?

A : customelements.io のような Polymer かどうかによらないレジストリがあります。Polymer かどうかによらず、書く web component を使うことができます。


Q : Safari と他のブラウザのサポートはどうですか?

A : native support のことですよね? Mozilla はかなり進んでいます。custom elements はリリースされています。Shadow DOM はまだです。でも活発に進んでいます。Safari は正直わかりません。彼らは計画を公開していないので。Salesforce.com のような polyfill を使っている人たちによると、mobile Safari では、かなり許容できるパフォーマンスがあるようです。


Q : IE については?

A : IE は最近少しだけ計画について公開するようになってきました。web components について興味があるようです。計画について誰にも言わないので、正直わかりませんが。ときどき私たちのMLにでできます。WinJS と Polymer を合わせた実験を内部では完了しているようです。Polymer と web components に興味がありそうですが、様子を見る必要があります。


Q : Chromeでの実行パフォーマンスは素晴らしかったです。どのくらいが Polymer の影響で、どのくらいが Chrome のパフォーマンス改善によるものですか?

A : 実際、それらは混在しています。我々は Chrome チームの一部ですし。両方のコンビネーションです。


Q : long-term のパフォーマンスについて。DOM elements + DOM 操作と、DOM を最小化しようとする React(これでよい?)のようなフレームワークとを比較するとどうですか?

A : それは別の世界ですよね? polyfills を使った現状から考えると、Polymer は基本的に他の JavaScript フレームワークと同じくらいよいです。Chrome ならなおよいです。native support がありますから。
その他のこととして、数年前 Polymer チームは webOS の Enyo(これでよい?)と呼ばれるフレームワークに関わっていました。哲学的に React、Polymer、Enyo は component のマインドセットが似ています。ただ、アイディアとして、DOM にタッチしません。DOM は遅い、DOM にさわりたくないでしょう。そこで、大きい HTML を吐いていました。それが速かったですから。Chrome チームに移ったとき、Chrome の人たちはそれはよくないと言いました。そこから時間をかけていろいろ変えていきました。DOM APIs はすごく速くなりました。なので、その領域は改善の余地があるということです。Chrome がそうできたように。





Google I/O 2014 - Polymer and Web Components change everything you know about Web development



(現状、字幕のタイミングがスピーチとずれています。。。)

1. State of the union
2. Problems solved by web components
3. "Thinking in components"

2010年に Web Components の旅は始まった。

2014年のサポート状況



platform.js を使ったときの polyfills のサポート状況



みんな IE のこと質問するよね。希望はあるよ!



・Chrome OS の Keyboard は Polymer を使ってる。
・Chrome OS の Media Player は Polymer を使ってる。

Web Components はどんな問題を解決するのか。
・Gmail は div soup
・tab strip を作ろうとしたら、標準的な構成やパターンもないし、APIはいろんなフレームワークで違うし。。。



Custom elements を使うと、宣言的で読みやすいHTMLになる。



タグの継承もできる



HTML Template と比較してどうか





Polymer 内でデータをバインディングしたりできる



Polymer はデフォルトで Shadow DOM を使う



Polymer のエレメントは HTML imports で使う



Polymer の Core elements



Material Design elements



<google-map> タグを用意したよ!便利!
他のタグもチェック!

googlewebcomponents.github.io







Google I/O 2014 - Unlock the next era of UI development with Polymer



HTML は document-centric model なので、アプリっぽいものを作るのは苦手。
Polymer はアプリの作成に適している。


core-elements : ベースになるブロックにようなもの。あまりスタイル化されていない。

Visual
・<core-toolbar>
・<core-header-panel>
・<core-drawer-panel>
・<core-menu>
・<core-icon>
・<core-overlay>
...

Non-visual
・<core-ajax>
・<core-localstorage>
・<core-range>
・<core-shared-lib>
・<core-media-query>
・<core-iconset>



paper-elements : よりスタイル化されている。Material Design システムの一部

・<core-toolbar>

タブやボタン、タイトルを置くためのコンテナ
Android の ActionBar みたいなもの
core-icon-button でハンバーガーアイコンを表示したり、class="tall" で高さをかえたり




・<core-header-panel>

header セクション用のコンテナ
core-toolbar を上に pin させたり、一緒にスクロールさせたり




・<core-scroll-header-panel>

スクロール時のエフェクトができる




・<core-drawer-panel>

Navigation Drawer みたいなの





flexbox CSS

Polymer 定義の中でも外(=Polymerを使っているページ)でも使える。

Android の layout_weight みたいなことができる。










中央揃えも楽々。








Material controls

<paper-checkbox> : Material Design にそった、アニメーション付きのチェックボックス

<paper-toggle-button> : Material Design にそった、アニメーション付きのスイッチ

<paper-input> : Material Design にそった、アニメーション付きの入力フォーム
validate="^[0-9]*$" のように正規表現でバリデーションを指定できる

<paper-tabs> & <paper-tab> : Material Design にそった、アニメーション付きのタブ

<paper-ripple> : タッチ&クリックしたときに ripple エフェクトがおこる

<paper-shadow> : z="5" のように elevation を指定することで影の量を変えられる



Theming

::shadow

エレメントの shadow dom 内部のノードのスタイルを指定できる



/deep/

shadow 境界に穴をあけ、shadow dom 内のすべてにスタイルを指定できる



<core-style>

(まだ experimental)
style をエレメント間で共有する



style binding





Transitions

<core-animated-pages>

あるビューから次のビューへのスムーズなアニメーションを作れる



QA

Q : attributes の順番に依存はありますか?

A : 順番は関係ないです。


Q : jQuery とかと一緒に使うのはどうですか?

A : 外側から利用する場合は、これまでと一緒です。custom element を作るだけです。内部で利用したい場合は、慎重になる必要があります。


Q : shadow dom の内部では JavaScript はサンドボックスになりますか?

A : いいえ、JavaScript はページの一部です。


Q : Angular JS と一緒に使うのはどうですか?

A : 一般的には、ちゃんと動きそうです。複雑なデータを binding するときに問題が起こるかもしれません。ただし、HTML と同じように扱う分においては、問題ないです。


Q : Accessibility はどうですか?チェックボックスは canvas を使っているようですが。タブをキーボードで移動しようとしてもできませんでした。なにかロードマップはありますか?

A : はい。Accessibility は我々にとっても大きな懸念事項です。Alice Boxhall が DevByte で詳しく説明しています。ロードマップがありますし、サポートする予定があります。


Q : レガシーな Android の WebView ではどうですか?

A : 私の理解では、KitKat の WebView は Polymer で動くようです。Chromium ベースではにものは動かないでしょう。


Q : IE ではどうですか?

A : 他のブラウザでも動きますよ。他のすべてのブラウザでテストしています。Firefox、Safari、IE。。。各ブラウザの最新の2バージョンはサポートしています。それがターゲットです。


Q : Bootstrap に比べてどうですか?

A : Bootstrap は素晴らしいです。でもたくさんマークアップが必要です。nav bar とか。将来的には Bootstrap はエレメントのコレクションになるかもしれません。



2014年7月7日月曜日

Android Wear のデザイン関係のセッション

いずれも Android Wear、Google Glass 両方取り上げられている。

■ Google I/O 2014 - Wearable computing with Google



最初の方は Wearable computing とはなんなのか、という話。
Android Wear: The developer's perspective でも見たような写真がでてくる。
MVC になぞらえた説明は正直よくわからなかった。
14分くらいから具体的なリマインダーアプリの作り方の説明になっている。構成はまぁ、想像つく感じ。リマインドのトリガーに Geofencing を使うという例がいい。
Wearable はテスト時間しっかりとってね、とのこと。このテストとはドックフーディングのこと。
Wear になんでランチャーが無いのか、という話とか。22分で終るので、短い。半分くらいQ&A。



■ Google I/O 2014 - Designing for wearables



全体的にパラダイムというかビジョンの話。Wearable にどういう可能性があって、なにを解決しようとしているのかについての話。開発の話はでてこない。

Google Glass による実際の体験が紹介されている。日本では Google Glass になじみがないので、あんまりピンとこないけど、子供と両手をつないでくるくる回っているときの写真はなるほどなと思った。
Google Glass を付けて車を運転しているときのナビはこういうふうに見えるのかー。
Wear の画面に情報をつめこまないこと。情報が6個の画面と3個の画面を走ってるときに見たらどうなるか、というの面白かった。
ヘルメットにタブレットを付けたプロトタイプとか、腕に針金でスマホをくくりつけたプロトタイプとかでテストしたそうだ。


いつ情報を表示すればいいのか、どうやって知ればいいのだろう?
センサーを使う。それによりコンテキストを理解する。
Location
Time
Calendar
Identity
Activity
Nearby devices
Sensors

ランニングするときのコンテキストを例に説明。ランニングアプリを起動して、音楽アプリを起動して、、、というのをコンテキストから判断して、もっと簡単にしよう。
Voice & Context
Voice Action Interest Form
こういう音声コマンドがあるといいな、というのをぜひリクエストしよう!

実際のアプリの例が紹介されるので、どんなアプリがありえるのか、なにが出来るのか考えるのに参考になると思う。

Q&AでHTML+JavaScriptのようなプロトタイプできないの?という質問があったけど、HTMLのレンダリングできないので無理だねー。いまはプロトタイプ用の何かはないよ。でもスマホを腕にくくりつければできるよ(冗談)という回答でした。



2014年7月6日日曜日

Android fireside chat



意訳です。間違っているところもあるかもしれません。。。

何もマークがないのは司会者です。
Q: は質問者、名前付きはパネリストです。



---------------------------------------------------------------------

fireside chat の目的は、基本的には Android について知りたいことを君たちが質問することです。今日アナウンスしたことが、どのように行われてきたのか、どのように決まってきたのか。そういうこと全てです。

つまり、Q & A セッションです。部屋の前と真ん中にマイクがあります。質問がある人はそこに並んできいてください。質問がない場合はちょっとした短いセッションをします。

# 会場ちょっと笑い

ここ数週間でオンラインから集めた2、3の質問があります。この内のいくつかも聞きたいと思います。

質問をする準備ができるまで、パネリストは自己紹介してください。自分は誰で、Googleでは何をしているのかを簡単に。

Gabe : Gabe Cohen です。Android OS のプロダクトマネジャーです。Google Play services と他いくつかのことにも関わっています。

Xavier : こんにちは、Xavier Ducrohet です。Developer Tools と SDK のリーダーです。

Adam : Adap Powell です。UI Toolkit のフレームワークエンジニアです。

Rachel : Rachel Garb です。Android OS のインタラクションデザイナーです。

Jhilmil : Jhilmil Jain です。Android のユーザーリサーチのリーダーです。

Chet : Chet Hause です。UI Toolkit チームのエンジニアです。

Dianne : Dianne Hackborn です。Android Core Framework チームのエンジニアです。

Dave : Dave Burke です。エンジニアリングディレクターです。プラットフォームと Nexus デバイスを担当しています。

Kirkpatrick : Kirkpatrick です。Play Store アプリとゲームとハードウェアを担当しています。

Miles : Miles Bar です。Google Play の一部であるアプリのエンジニアリングマネジャーです。

ありがとうございます。では、始めましょう。後ろのほうに列ができています。最初の方どうぞ。



Q : 私の質問は Java 8 についてです。Java 8 は Android にきますか?もしそうならいつですか?すべてのバージョンに対してサポートされますか?

# マイクの渡し合いになり、会場笑い

これは、ちょっと hot potato question ですね。

# hot potato とは、物議をかもしそうな扱いにくい問題のこと

マイクは Xav(Xavier)にいくのかな。。。

Chet : 一般的に、望みが含まれている質問というのは、あなたがそれを考えたいということでしょう。でも、答えがあなたの望むものになるかはわからないですよ。我々は基本的なポリシーに沿って答えます。つまり、将来本当になるをするのかについては話せないのです。
知ってるでしょ。
まぁ、そこにある基礎を並べるだけです。
さぁ Xav 答えて。

じゃあ質問に答えましょうか。
Xav、何がいつ起こる?

# Xav への無茶振りに会場笑い

Xav : ノーコメントで。

# Chetとかパネリスト笑い
# その後、どうするの... 的な雰囲気にw

完璧ですw。
オーケー、これで全部ということですね。わかりました。次の質問に行きましょう。ちゃんと答えられる質問だといいのですが。



Q : Dianne への質問です。Binder についての仕事にとても感謝しています。 これは Android の心臓部を支えているものです。あなたは Binder の開発に関わってこられましたね。Android が Android になる前からも。Binder についての歴史とそこでのあなたの仕事を少し話してもらえませんか?

Dianne : オーケー、ありがとう。Binder は BeOS から始まり、そこから発展したのですが、私は Binder を作ったメインパーソンではありません。私は BE で、その後 Palm Source でエンジニアとしてそれについて働いていました。それで、Android の IPC としてそれを採択しました。でも実際のところ、それが Android のコアだとは思っていません。それは Android で IPC を行う便利な方法です。Binder のかつてのバージョンは確かにもっとプラットフォームデザインのコアでした。現状では、IPC に基づいた機能を実行するとてもいい方法だということです。


では、オンラインから事前に受け取った質問をききたいと思います。



Q : 今日キーノートで見たものでは、Material Design がもっとも興味深いものの一つだと思います。このようなアイディアをまとめあげるために、どのような種類のリサーチを行いましたか?

Jhilmil : Material Design のために、会社をまたいでリサーチャーが Google に集まった最初のときのことです。15の異なるグループ、4つの異なるGoogleオフィスがリサーチのために一緒になりました。私たちは4つのメインエリアでリサーチを実施しました。
1つ目はコンポーネントです。コンテナとエレメント、パターン、レイアウト、フローティングのようなアクションボタン、モーション、アクセシビリティ。私たちが行ったリサーチタイプの例としては、まず、キーとなるデザイン原則を見つけ有効なものにしたことです。適切なモーションカーブやスピードなどを見つけ出しました。
次に、デザイナーが留意するべきであるユーザービリティの主要な問題をハイライトしました。例えば、フローティングアクションボタンの色を選ぶとき、背景と混じり合わないようにしないといけない、ということは早い段階のモックで気づきました。また、フローティングアクションボタンのサイズがばらつくとユーザーが混乱するということもわかりました。
3番目は、数々のデザイン変更を行って、非常に多くのアクセシビリティの研究をしました。それらのデザイン変更の1つとして、より改善されたカラーパレットを得ることができました。背景との間で必要になる、色のコントラストが考慮されています。弱視のユーザーもよりよくテキストを読むことができます。

Dave : もしフローティングアクションボタンは何なんだろうと考えているなら、、、僕も1週間前まで何なのか知らなかったんだけど、、、実際はただのImageViewだよ。elevation がセットされているだけの。そう思ってるでしょ。でも格好いいよね、あと、丸いし。丸じゃないといけないんだっけ?電話アプリはフローティングアクションボタンあるよね。

# パネリスト間でがやがや

Dave : 君たちとエンジニアの間で翻訳が必要みたいだ。



Xav に質問です。質問を引用しましょう。

Q: パフォーマンスを考えるなら、なぜ Genymotion を Android のオフィシャルなエミュレータにオファーしないのですか?

# 会場から笑いと拍手

Xav : ええと、、、いい質問ですね。とてもいいプロダクトだと思います。でも、全部が無料なわけではないですよね?だから、デモバージョンがある。デモが実際にはなんなのか知りません。でも、何かを得るために支払いが必要だったと思います。なので、それを配布することはできません。
他のこととして、明らかに我々には改善しなければいけないことがたくさん残っています。本当にやりたいこととして、すでに利用できるすべてのエコシステムのエミュレートがあります。つまり、ARM、Mips、x86。彼らはパフォーマンスのために x86 に注力していますよね、理解できることです。でも我々はそうすることはできません。我々はより多くのハードウェアを長期間サポートしたいのです。Bluetooth、マルチタッチ、などなど。我々が自身のスタックをコントロールするほうがよいのです。そうするためのテクノロジーも保持したいですし。でも、すばらしいプロダクトなのは間違いないですし、必要に応じて使ってみるのがいいと思います。

ありがとう。では、会場からの質問に戻りましょう。



Q : Android L についてです。adaptive bit rate video と HLS のサポートについて何か新しいことはありますか?

Dave : うーん。オーケー。我々がやってきたことで最も興味深いのは、、、まだそれがローンチされたかわからないんだけど、でも差し迫ってることは、我々が ExoPlayer と呼んでいる何かがオープンソースになるってことです。これは YouTube と Play Movies と TV のプレイヤーです。MediaCodec、MediaDRM、MediaExtractor、MediaCrypto 上に構築されています。とてもいい adaptive bit rate プレイヤーです。Dash(MPEG DASHのこと?) を使っています。
それが知るべきことの1つ。それと、多分確かだと思うけど、我々は L で HLS の最新の internet draft へアップデートしました。覚えてるのでは、これで全部だと思います。



Q : L のリリース用に準備された新しい UI と UX を見ました。Action Bar で UP Navigation アフォーダンスを使ってきました。でも、新しいものでは、バックボタンのような見た目になっています。なにが起こったのですか?これは変更ですか?我々は App Navigation を諦めるのですか?

# 会場からすこし拍手

Adam : 短い答えとしては、構造的には Navigation には何も変更はありません。キーノート中に見せられたもののいくつかは、異なるドキュメントを開いた複数の Chrome のタブが Recents に表示されたデモだったと思います。それらのいくつかは、新しい機能の結果として、微妙に変わっていきます。Iconography の点では残念ながら、ここにはビジュアルデザインチームからの代表者がいないと思います。でも Rachel、何か言いたいことある?

Rachel : そうね、、、あれはただの矢印で、多くの人にとって言いたいことがはっきり伝わると私は信じています。以前からやりたかったことです。階層なのか、履歴なのか。

Q : バックボタンは画面に置くなと言われていますよね?

Adam : そう。つまり、我々が見つけたことは、繰り返しになるけど、リサーチの結果、ユーザーはシステムの面かアプリの面かどちらかで考える傾向があります。アプリ内に付加的なアォーダンスがあるとはっきりします。アプリの Action Bar にあるということは、あるアプリのコンテキスト内で操作を続けたいということと結びついています。
一方、システムのバックボタンはアプリ間で動作できる、一種メタアクションのようなものです。たとえ、多くのユーザーがこれら2つの違いをはっきり述べられなくても、アイコンがとても似ていても、多くのユーザーはどちらかをタップするとき、何を予測しているかの直感的な理解を作り出す、ということがリサーチでわかりました。
もちろん開発者にとってはとても興味あることだと思います。なぜなら、ちゃんと理解するには微妙なものが多くあります。我々が出した新しい機能のいくつか、例えば Recent でより多くのドキュメントを開くというようなのが、役に立つことを望みます。
(このあたりよく意味がわからない)
なので、どのように効果的にそれを使うかというガイドラインが公開されるのを待っていてください。



今朝のキーノートでは、Material Design によるすばらしい変更のすべてが見れたと思います。どのようにアプリの見た目をよくするのかなど。1つ質問があります。他の開発者も思ってることだと思います。


Q: Android design guideline に沿ってすでにいい見た目である既存のアプリを、Material Design を実装したすばらしい例に変更するのに、どのくらい作業が必要ですか?

Chet : ちょこっと。

# 笑い

ありがとう。Chet。

Adam : 明日話すつもりなんじゃないの?

Chet : そうだね。明日のトークを見に来てください。答えます。Material Design についてのトークが2つあります。開発者向けが Adam と 11時に。もう少し詳しい情報が欲しい人はそこに行ってください。それについて話します。あなたの Material Design アプリがどうあるべきかというビジョンと、それを達成するためにどのくらい取り入れたいかによって、作業量の勾配みたいなものがあります。
最初のステップは悪くないです。Material Theme を有効にします。もしシステムのカスタムビューを使いたいなら、いくつかを直さないといけないでしょう。他のテーマ用にアセットを作っていたりしたら、そこだけ変に見えるということを覚えておいてください。
基本的には、テーマを変更して、必要なところを直す。それが Material アプリを作る最小限の作業です。その後、アプリを実際の Material Design にしていきます。異なる余白、異なるレイアウト、必要な機能を満たすための変更も必要でしょう。それから、まぁ、どこまで行きたいか把握できます。
必要な多くの作業は既に存在する API を使うだけです。L には新しい API はありません。L のために使わなければいけない巨大な描画 API を出したわけではありません。我々は Real-Time Shadows などを行う新しい機能を持っただけです。適切なときに内部的に View の elevation を取る機能です。アプリにとってそれが適切だと思えば、アクセスすることができます。
パラダイムに沿った新しいデザインがあり、それが Material Design を通して我々が言いたいことです。あなたがたがしなければならないことは、これまでの Android 開発での、レイアウトや余白、アセットを Material Design にあわせることです。

Adam : いけてるものがたくさんあります。もし、多くの有名な Android アプリで起こってきた、ここ数年の Android のデザイン進化を知っているなら、それらの多くがこの方向に移動してきたことに気づくと思います。多くのものが表面に含まれています。横からでてくるナビゲーションがそうですね。
Material Design 用に洗練された同じようなパターンがたくさんあるでしょう。すでにそのような足跡をたくさんたどってきているなら、実際にかかる作業負荷が見た目ほど多くないこともわかると思います。

Gabe : Material Design は、今年 L Developer Preview を行った要因の大きなものの一つです。間違いなく、アプリに Material Design を適用することは、多少の努力が必要だと認識しています。我々は開発者にコンシューマーに先駆けて時間を与えたいのです。さらに、我々にフィードバックを送る機会も与えたいのです。どこで動いて、どこで動かないのか。このデザイン言語でどのようなパターンを表現したいのか。どのように頭の中のデザイン精神にフィットするのかを聞けたらと思います。

これはとても重要なことです。このような Developer Preview の大きなキーは、我々はあなたたちの意見をききたいということです。何が動いて、何が動かないのか、何がクールなのか。我々に言ってください。

次の質問にいきましょう。



Q : まず最初に、これまでにプラットフォーム対する貢献と Deveoper relations に感謝します。私の人生をとてもよくしてくれました。

# 会場から拍手

Q : 異なる開発者から、多くの異なる見方があることに気づきました。ある開発者は両手を投げ出して言いました。「混乱している。1つのActivityに1つのFragmentを使うのはいつで、1つのActivityに複数のFragmentを使うのはいつなのか、わからない。FragmentなしでActivityを使うのはいまでもありなの?」ニュアンスなのはわかっています。でもなにか話してくれると助かります。

# 会場から笑い

Dianne : 私から話すわ。基本的なことの1つは、少なくとも1つはActivityが必要ということ。また、複数 Activity を持つこともあるでしょう。そこで、アプリケーションへのエントリーポイントである Activity について考えます。Android は、メインのエントリーポイントが1つだけあるというわけではありません。Android のエントリーポイントは1つ以上です。Activity はものごとのトップです。もしユーザーがアプリに入っていこうと思ったら、Activity がその方法です。
一度 Activity の中に入ったら、ものごとを行う正しい方法は、、、私の視点からだと、、、Adam が付け加えてくれると思うけど、私の視点からは、システム管理に関する限り、それはアプリによります。
アプリにはこう言う自由があります。複数の Fragment を持つのが、1つだけFragment を持つのが、Fragment を持たないのが、理にかなっている。整理したくても具体的なルールがありません。

Adam : こう言いたいんだけど、、、ルールの一つは、、、

# 会場笑い

Dianne : 具体的じゃないことw

Adam : 具体的なルールじゃないw
経験則で、たぶん、API の名前みたいなものだよ。それは Fragment。ピースだよ。Activity のピース。もし Activity がとても大きくなって、扱いにくくなって、コードが大量になってきたら、それは Fragment を使うことを考えるいいタイミングだよ。
つまり、Activity と Fragment 両方とも、アプリの model view controller すべての役割を果たすことを覚えておくこと。 より小さくて理解可能なピース、つまり Fragment に落とし込むかぎり理にかなっている。

Dianne : さらに付け足すと、とても合理的な方法は、すべてを Fragment に実装してしまうこと。すべての UI エレメントは Fragment で、それを Activity に入れる。アプリを整理するにあたって、Fragment はとても柔軟性がある。そして、例えば、ここの UI エレメントを将来別のところで使いたい、ということがあった場合、Activity に実装されているより Fragment に実装されているほうがよいです。

Adam : うん。別の単位の抽象化として考えてみたらどうだろう。



Q : Android のパーミッションについて、ユーザーの経験が知りたいです。ユーザーリサーチではなにが得られましたか?動的なパーミッションはどうですか?そのほうがよりユーザーにパーミッションが使われるコンテキストを伝えられると思うのですが。

Jhilmil : まず、リサーチの視点から話しますね。その後 Dave か誰かがフレームワークの視点から話してくれるでしょう。 リサーチの視点からは、パーミッションについてもっと多くの透明性を提供できるということに気づいています。
アプリをインストールするためにこれらのパーミッションを許可したことは知っている。でもこのデータはどのように表示される?他のサードパーティに共有されるかもしれない。私のすべてのパーミッションを一カ所で管理できる場所はある?そういうことに気づいています。それについてとても深く考えています。なので、期待していてください。

Ficus(Kirkpatrick) : 質問で触れたことについて少しコメントしたいと思います。質問には多くのトピックがふくまれていたのであれですが、、、
Androidの互換性がないバージョンまわりでのコード守備をとっているのだと推測します。特にそれがなんなのか興味があります。なぜなら我々は Play Store を扱っています。聞いたことあると思いますがw
それは多くのデバイスで動いていて、一貫性のない利用可能なパーミッションを扱っています。
(このあたりよくわからない)

もしかして、インストール時に与えたパーミッションのいくつかを必要に応じてユーザーが無効にできることから発生していきた問題について話してます?

Q: そうです。

# Ficus が Dave に話す?と聞いて、断られたため、会場から笑い

Ficus : あー、フィードバックありがとう。それには、大きい洞察があったと思います。我々は長い間、パーミッションに対する開発者のアイディアと、ユーザーのアディアを一緒に結びつけてきました。ユーザーが気にするのはデータだと思います。
アクセスできるデータについて人々はどう思っているのか、我々は見つけることを始めたばかりだと思います。データコントロールについてキーノートでいくつか見たと思います。そうですね、、、最初のステップを見ているのだと思います。
Gabe, App Ops について何か言いたいことある?

Gabe : No...まぁ、でもフィードバックありがとう。僕も多くのユーザーと同じで、使いたいサービスがあり、確かにいくつかのパーミッションはそのサービスを得るために耐えるけど、会話の終わりのようなもので、ときどきだけそれが必要になる。よりコモディティな体験を探しているユーザーにとっては、アプリ間でのパーミッションの違いは、ユーザーが何を選ぶかで実際に違いが生まれると思う。
新しい UI が、アプリ間で何がそれらの違いなのかをよりクリアにしてくれることを望んでいる。新しい UI を出したあと、友達や家族からこれはなに?って聞かれたよ。一般的に、彼らはパーミッションにより気づくようになった。我々のゴールはアイコンとかを使って、よりゲシュタルトな(?)印象を与えることだと思っている。効果があることをね。人々はこんな感じ、おぉ、このアプリはこれをできるのか、ってね。確かにいつでもそれはできるけど、情報に埋もれてそれが言えない。我々がその信号を拾い上げる。
コンテキストと実行時の質問があったと思う。コンテキストがユーザーの決定に役立つことに我々は同意してると思う。 Jhilmil が言ったように、我々はそれについて考えています。まだ道半ばです。

Adam : 開発者としてのあなたの経験について述べると、それは我々が望まない経験のすごくいい例だと思います。この問題について引き続き考えたいと思います。ユーザーのニーズと開発者のニーズのバランスをどうとればいいのか、みなの同意が得る方法を見つけたいと思います。

オンラインから別の質問にいきましょう。



Q: Activity のライフサイクルスタックを改善する計画はありますか?開発者にとって、より複雑さが少なくなるような。

Dianne: そうね、、、少ない複雑性、、、この質問は実際なにが間違っているのかなにも言ってないから、私がまとめるけど。

# 会場笑い

Dianne: 一つの見方として、アプリケーションとは何かという点において、Android はこれまでのオペレーティングシステムとは非常に異なるアプローチをとっているということ。通常、アプリケーションにおけるオペレーティングシステムというのはメインです。プラットフォームはこう言う、OK、ユーザーはこのアプリケーションを実行したい、メインいけ。この時点で、アプリケーションが内部でなにが起こるかすべてコントロールする。そしてプラットフォームはなにもコントロールしない。
Android で行ったとき、我々がやりたかった基本的なことは、メインのエントリーポイントを持ちたくなかったということ。なぜなら、アプリケーションにまたがって、多くの興味深いインタラクションを持ちたかったから。だからこの Activit コンポーネントモデルにしたのです。Activity、Service、Receiver などはすべてアプリケーションへのエントリーポイントを作ります。
一度そうすると、ただのメインのブラックボックスアプリケーションとしては扱えなくなります。なぜなら、オペレーティングシステムはアプリケーションとより多くインタラクションする必要があるからです。
あぁ、これはこの Activity から作られた、でも今は他の人が共有したい。じゃあ、別の Activity を作る必要がある。そのことをアプリケーションに伝えなければならない。アプリケーションは常にそれができる状態じゃないといけない。なぜなら、それがいつ起こるかわからないから。なので、多くの複雑性がそこにはあります。これは、アプリ開発者がプラットフォームと調整してそのボックスをコントロールする必要性からきてると思います。
それと、それについての学習曲線があるのだと思います。
一度それを通ったら、本当に多くの利点があると思います。プラットフォームを開発するにあたっても。プラットフォームの新しい機能を既存のアプリで行うための多くの機会を与えてくれます。それなしでは得られないものです。
例えば L では、まったく新しい Recents を導入しました。ドキュメント指向の Recents です。アプリケーションが複数の Recent エントリーを持てるのです。Developer preview を実行してみれば、それが既存のアプリとも動くことがわかるでしょう。Share をして、標準の共有ダイアログを通ったら、共有ターゲットで終了したとき、それは Recents で別のエントリーになります。つまり、オリジナルのアプリとシェアしたアプリで行き来することができます。これができるというのは、プラットフォームとアプリでボックスを調整するように作ってきたからです。
確かに複雑性があります。学習曲線もあります。でも多くの恩恵も与えてくれるものです。

Dave : 君たち開発者が気づいているかどうかわからないけど、毎月これについて出会うよ。我々はこれを4年前にデザインした、なぜなら明日こういうふうに動かしたくなるって知ってたからね。



Q: Scala 言語をオフィシャルにサポートすることはありますか?4年間の仕事のあと、Apple は Swift をリリースしました。Swift は Java ではできないようなことを開発者に与えています。Swift のリリース前と後でなにか考えがありましたか?計画はありますか?

Dave : うーん。僕は Cocoa が好きだよ。でも Objective-C は C をベースにしていて、それはもう40歳だ。だから Apple はそれをアップデートしたんだと思うよ。
ええと、うん。わからない。Scala?知らないな。
誰か話す?

# 会場から笑い

Dianne : No!

# 会場からさらに笑い&拍手

Dianne : まじめに言うと、Java が Android 用のプログラミング言語です。知ってるでしょ。フレームワークはすべて Java で書かれています。他の言語をサポートすることに多くの恩恵があるとは思えません。

Dave : Swift についてはどう?

# 会場から笑い

Dianne : 考えるわ。

Dave : セミコロンいらないよw

Dianna : NDK があるので、やりたいならそこに何か投げることはできます。しかし NDK はフレームワークへのアクセスがありません。他の言語でやりたいなら、現状のフレームワークに相当する first class の言語として使いたいなら、全く新しいフレームワークかいくつかのバインディングを得ないといけないし、それはとてもよくない経験になると思います。

Q : いつも Scala を使っています。なぜなら Scala は JVM にコンパイルされます。そうですよね?だから Android では動かない。Scala で動く方法はないのですか?

Xav : ツールについては、多分、今年の終わりか、来年のはじめに、gradle 内部に変更があると思います。それだと、もともと Scala で書かれたモジュールを持つのが簡単になります。バイトコードにコンパイルして、アプリケーションにパッケージングします。
しかし、Scala コードから Activity API にアクセスするようなものについては助けになりません。ビジネスロジックのコードとか、なにか Scala で書きたいものがあって、それをバイトコードにして埋め込むことはできますが、Java で Android を書くのとは全然違います。フレームワークの API にはアクセスできません。



Q : Android L の新しい機能、たとえはホーム画面の Notification について、ユーザーはどのくらいのコントロールを持っていますか?この前の What's New in Android のセッションに出たのですが、プライバシーレベルのオプションがあると聞きました。でも考えると、サードパーティの開発者に、それがホームスクリーンに表示されていいかどうかわかるとは思えません。それを完全にオフにすることはできますか?

Gabe : できます。

Q : Play Store パーミッションの新しい App Ops はちょっとわかりにくいです。実際、わかりにくい(読むのが難しい、理解するのが難しい)ものがたくさんあります。そうすべきではないと思います。

# 会場から拍手



Q : L の新しい lush animation と 3D レンダリングシャドウ、その他すべて美しいです。新しいデバイスと古いデバイスはこの点についてフェアですか?

Adam : So when some of the engineers who are working on some of the flashier features that you've been seeing in here first started, this was something that we thought was really important. We didn't want to make a move like this in KitKat, only to just kind of toss it out as soon as we found some new, flashy effects we wanted to implements. So they'd actually found the absolute oldest devices they cound, sitting around in a desk that we still had drivers for. And they actually started on those devices to implement these effects. So this is the sort of thing where performance on low end devices is something that was really intrinsic to the initial design of the implementation. So there's definitely a few cases, a bunch of you're going to get the L preview and go run some of it. You'll probably run into some cases where you say, oh, wait, this is little bit slower than I thought. We know about them already. We're working on them. Many of them actually have already been addressed internally as we've continued along this. So performance is something that we think is really important. We can't really accomplish the goal of Material Design if everything is just janking across the screen the whole time. (Adamさんの英語難しいのでちょっとパス)

Dave : うん。我々はいまだに Svelte についてのミーティング、メモリーのモニタリングとか、を毎週しているということを付け加えたい。後方には行きたくないです。そして ART ランタイムは実際 Dalvik よりメモリ効率がいいです。我々は異なるタイプのガーベージコレクターを持っています。
アプリがバックグラウンドに移動したときに利用されるコレクターもあります。遅いのでフォアグラウンドでは使いたくない、でも簡単に数100KBを節約できます。

関連していることだけど、我々は Svelte や Volta というプロジェクト名がありますね。これらは名前が先ですか?考えが先ですか?

Dave : えーと。。。考えかな



Q : Google Play services についての質問です。Google Analytics や Drive, AdMob などのサービスを、Google Playのない文字通りすべての Android で使いたいのです。かつてこれらのサービスは個別の jar でした。でも今は Google Play services の一部です。すべての Android でこれらのサービスを使いたい場合、どういう提案をしますか?

# 会場から拍手

Gabe : この質問を Google Play services Rocks でもした?

Q : 私はしてませんが、他の人がしました。

Gabe : あー、OK。同じ質問を聞いたよ。残念だけど、そんなに付け加えることはないかな。ここにいる我々は Google Play に対応しているデバイスのエコシステムに対して働いている。我々の一番の関心事は、どのようにこのプラットフォームをそれらのデバイスに提供するかということ。実際、我々のエコシステム外のデバイスについて、Google が何かするかという見解はなにもありません。
なので、これは、Analytics や AdMob チームへの質問なんじゃないかな。私が答えられるとは思わないな。ごめんね。



Q : Cupcake ぐらいから SMS メッセージを受信する BroadcastReceiver を使っています。でも最近は、みんなはハングアウトを使います。あれはすばらしいです。でもハングアウトのメッセージと、アプリからインタラクトすることはあきらめないといけないのでしょうか?それとも、すべきことについてなにかコメントありますか?

Dianne : 人々は SMS を使わない。そうね。彼らが SMS を使わないなら、プラットフォームはそれについて知ることはないです。

Q : つまり、ハングアウトのメッセージに対して、API を介して返信することはできない?

残念だけど、これ以上はハングアウトチームの誰かに質問するべきだと思う。

Adam : フレームワーク側からみると、メッセージングアプリがインターネット上で独自のプロトコルでやりとりしているなら、自分たちのブロードキャストを発行することについては完全に自由です。



Q : Android の Wi-Fi peer to peer ツールの進捗についての質問です。このテクノロジーにはすばらしいポテンシャルがありますが、現状ではこれらのツールは非常に不完全でとてもバギーです。これらを置き換える、もしくは開発を続ける計画はありますか?

Dave : うーん。確かにちょっとバギーだよね。実際、チームを大きくしようと、今多くの人を雇用しています。より多くワイアレスに投資しようとしています。Bluetooth、Wi-Fi, cellular、Volke(これなに?)それらすべて。peer to peer Wi-Fi を複製する計画はないです。
新しい Wi-Fi 機能が来ます。つまり、Wi-Fi Alliance で標準化のいくつかを見ることができます。Network Neighborhood とか、そういうの。 他になにかあったかな。Wi-Fi について、内部的にたくさんリファクタリングしています。
以前のリリースでは WPA Supplicant は多くのロジックを持っていました。我々はそのロジックをいくつか取り除いて移動して書き直しました。Wi-Fi state machine の一部として。我々はWi-Fiの機能を抽象化するための新しい Wi-Fi How(この単語でいいのか?) を導入しています。例えば、デバイスがロケーションをスキャンするとき、現状ではすべてのチャネルをスキャンしますが、新しい Wi-Fi How では、選択的にスキャンをできます。
ともかく、我々はその領域に投資しているし、改善しようとしています。

オンラインからの質問です。



Q : アプリを作る上で最初にフォーカスすべきもっとも重要なことは、エンジニアリングですか?デザインですか?

Jhilmil : 間違った方法で考えますね。本当にフォーカスすべきはユーザーです。
今日話したプロダクト、Auto や TV でさえ、本当にはスタートしていません。まだデザインとかだけです。コーディングも始まったばかりですし、根本的な問題もいくつかあります。今も間違っていたり。ユーザーの問題を真に解決するプロダクトをどうすれば作れるのか、もっと賢くなろうとしています。



Q : 新しいリリースのデザインについて、ありがとうございます。とても興奮しています。多くの開発者が、新しい見た目と、そこでなにかする方法についてそれぞれのデザインチームと話すときに思うことについてです。
彼らは Galaxy S4 を取り出して、テキストメッセージアプリを見せて言うでしょう。
Android は一貫したデザイン言語を持っていると思う?これは私のテキストメッセージアプリだけど、我々は我々がデザインしたい方法でデザインするつもりです。
どんなステップをとりますか?Androidの世界に存在している、そういうクレイジーなデザインエコシステムにどう対処しますか?

# 会場から拍手

Rachel : これを助けるためにとれるステップの一つは、我々自身のアプリケーションでいい仕事をすることだと思っています。我々がきちんとガイドラインに従って。

# 会場からめっちゃ拍手
(みんな Google のアプリがガイドラインに従ってないのどうなのよって思ってたのね)

Rachel : それは我々がしばらくの間取り組んできたことです。我々は大きい会社ですし、Android アプリの開発を行っている 100 近いチームが会社中にあります。彼らはすべて異なるリリーススケジュールをもっています。なので、ある意味チャレンジでした。加えて、みなさん知っていると思いますが、デザインガイドラインも進化しました。通常はそれは内部で起こって次に外部にでます。
内部で先に開始する戦略をとると、ガイドラインが外部にでたとき、それについての具体的な例がすでにあるというのが重要なポイントす。



Q : 私の質問は開発者としての個人的な経験についてです。テスト周りについてつらいことがたくさんあると聞きます。特に Android でのユニットテストについて。Roblectricのようなソリューションがいいです。問題への適切なソリューションよりも bandaid のような。L プレビューについてなにかありますか?もしくはテストについての一般的な考えでも。

# 会場から拍手

Xav : うーん。まず、Robolectric を手助けしたいです。現状のわれわれのツールとよりよくインテグレートできるように。 それが bandaid なのは知っています。パーフェクトなソリューションではない。しかし、多くのチームが今それに頼っています。なのでソリューションを改善したいです。
あとは、Android デバイス上で動かないものはすべからく bandaid です。つまり、純粋に Android じゃないコードがあり、VM 上で動かせるなら、Java module を作ってそこでロジックをテストすることができます。
Android の API にアクセスするものについては、デバイスで実行しないといけません。現在の問題は、テストを走らせるには、デプロイに時間がかかって、ビルドにも時間がかかることです。ビルドについては状況を改善しようとしています。gradle はもっと速くビルドできるようにしようとしています。
デプロイについては、より複雑です。取り組みたいものはあります。しかし、実現するにはラインタイムに手を入れる必要がありそうです。なので、L では何もないです。既存の Android API でも他に方法はないです。テスト結果として信頼性のあるものを得るには、デバイスで実行する必要があります。



Q : 画像の周りにテキストを回り込ませる汎用的な方法がわかりません。そのとき調べたサードパーティのライブラリでは満足できませんでした。そこで一年前に自分たちで Canvas をオーバーライドして作りました。複雑でテストしにくいものです。Android チームはこの問題を見ていますか?

Adam : 短い答えは Yes です。間違いなく、いくつかのアプリで痛いポイントになっているなということを認識しています。どうやって解決したらいいのか質問がきたことがあります。
これはかなり複雑な問題です。TextView が Canvas とインタラクションする方法がたくさんあり、それはテキストやフォントなどいろいろなものを扱っていて、とっても複雑です。少なくとも複雑で、しかもとても強く結びついています。将来的にはその問題に取りかかりたいと思っていますし、我々ができることがあるか見ています。より自然な方法で達成できるように、いくつかのモジュールに分けるとか。

オンラインからの質問です。



Q : Chrome OS 内で、Android のフルビルドとテストができるようになる可能性はありますか?

# 会場から拍手

Dave : えー、、、しらないよ。Chrome OS 用の IDE ってことかな?

Ficus : Chrome OS の精神だと、IDE はクラウドみたいなもんでしょ? Chrome OS 用の IDE を作る意味があるかわからないよ。

クラウドチームへの質問かな。

Ficus : クラウドアプリ用の IDE (たぶん、Chrome Dev Editor のこと)を彼らから見せてもらったけど、Android をビルドできるようになるのかどうかは見てないよ。

Xav : デプロイのことも考えないといけないよね。多くの開発者はテストに実機をつかっているんじゃないかな。それをクラウドに持っていって、小さいハローワールドみたいなアプリじゃないなら、ビルドするたびにローカルに10Mとかの APK をダウンロードしてこないといけない。
現在の Web IDE の状態は始まったばかりで、IntelliJ みたいな本当によくできた Java IDE と比べると、、、比べないけど。つまり、まだまだテスト段階だと思うよ。



Q : L Developer Preview にとてもわくわくしています。factory image としてのみ提供されているので、開発者もしくは極端な愛好者向けだということがよくわかります。このような方法は将来にもあると思っていていいでしょうか?各メジャーリリースの初期バージョンを使っているより一般的な平均的なユーザーからの多くの文句があったのを見ています。

Dave : うん。みんなこれが自分の考えだって主張するんだ、おもしろいよね。だから僕の考えだって主張するよ。でも、みんなの考えだったんだ。
僕が注目していたものの一つはプラットフォーム。すごく大きくなっている。だよね。描画エリアは大きくなっているし。我々にはすばらしい QAチームがあるし、トップ1000のアプリもテストしてよくなるようにしてる。CTSもやってね。でもすべてをテストすることはできない。
もしアプリをリリースしたときに何かが起こって何かが壊れたら。。。KitKatでJBMR2トリアージバグポストを覚えています。あれは恥ずかしかった。
このモデルから移行しないといけないことは明白だった。だから Developer Preview を出して、みんなが自分のアプリをテストして、バグを投稿して、我々が直せるようにした。
約束はできないけど、我々がこれを行った理由は合理的で、エントロピーは増大して減ることはないから、これからも続ける可能性が高いと思います。約束はできないけど、イエスだよ。

# 会場から笑い

Preview リリースはどうですか?

# 会場から拍手

Dave : その他に望むこととして、OEM がもっと早くデバイスを作れるようになるということだね。だって、一度プレビューが利用可能になったら、もう秘密にする必要はないし、ビルドを共有できるし、ソースコードも共有できるし、ベンダーを見れるし。僕の望みとしては、L が秋に正式にリリースされたら、多くのデバイスがそれに追随してほしい。

Xav : エミュレータのシステムイメージが利用可能だから、必要ならそれが使えるよ。



Q: 新しい gradle build system が気に入っています。でもそこまでインテリジェントなユーザーではありません。ええと、Eclipse は Android の red-headed stepchild になっていくのですか?それともこれまでのようにサポートされ続けるのですか?

red-headed stepchild とは、無視されたり、望まれなかったり、不当な扱いをうける人やもののこと)

Xav : Reto(司会)、時間みた?

# 会場笑い

Dave : Eclipse で Java form を開く時間がないよー。

# 会場笑い&どよめき&拍手

Q : でも IntelliJ でアプリをビルドする時間もないでしょ。

Dave : そうだね。わかったよ。難しいと思う。
理想の世界ではすべての IDE をサポートするけど、pull down するものを選ばないといけない。我々は IntelliJ から pull down を始めることにしたんだと思う。Android とは別に、Eclipse と gradle のインテグレーションを改善しようとする動きはある。gradle 自身を改善しようという動きもある。我々のモデルもそれらでより互換性をもてるようになるかもしれない。全部の IDE に対応できるのが理想だけど、今は Android Studio にフォーカスしているよ。




2014年7月5日土曜日

Android Wear: The developer's perspective



■ 全体の感想

Android Wear でよく使うであろう、Notification と、Data API, Message API(Node API については簡単な紹介のみ)について実際のアプリを例に紹介している。
最初に出てきた画像が、他のセッションにも出てきてたのでなんか笑ってしまった。

■ 内容の要約

今年の初めに Developer Preview を開始し、ここでは Notification を Wear に表示することができ。
今回、これに加え、新しい機能が追加された。
新しい SDK では、データを送ったり、カスタムUIを作ったり、音声入力を処理したりできるようになった。



Wear に対応した runtastic アプリ、 PHILIPS の hue アプリ(ライトの色などをWearから変更するアプリ)、glympse(social location service)アプリが会場に展示されている。

1つのapk(Side control apk)が Phone 用の apk と Wear 用の apk を持つようにビルドする。



主に3つのAPIがある。

- Data API
- Message API
- Node API


Node API は Node がコネクションに接続されたり、接続が外れたりしたことを検知するのに便利。
Wearではこれを使って、Phone と接続がきれたときは Wear 上にアイコンを表示している。



Message API はローレイテンシーなメカニズムで、バイト配列を送受信できる。



Data API はデバイス間で同期するデータを store に置くことができる。
(例えば、Phoneから発行される通常のNotificationなど、これを使っている)




子犬のスライドショーアプリで解説:

GoogleApiClientの作成がエントリーポイント



■ 流れその1:Phoneでアプリを起動すると、Wearの通知がでる

スマホアプリ
1. DataApi.putDataItem() で Data Item を送る

Wearアプリ
2. WearableListenerService を継承した Service で Data Item を受信する
3. Notifiication を発行する(スマホには通知されない)


- Data Item を送る(Phone → Wearable)

PutDataMapRequest に / から始まるパスを指定しする(最終的には wear:///... になる)
送りたいデータは、Bundle のような key-value ペアとして DataMap にセットする

DataApi.putDataItem() で store に送る
接続されている全ての Node で同期される




- Data Item を受信する(Wearable)

WearableListenerService には次のコールバックリスナーインタフェースが実装されている。
- NodeListener
- MessageListener
- DataListener

WearableListenerService を継承した Service を使って、受信する。
Data Item を受信したときは、DataListener の onDataChanged() が呼ばれる。





■ 流れその2:Wearの通知で、Phoneのスライドの位置を変える

Wearアプリ
1. Message を Data Item を送ってきた Node に送る

スマホアプリ
2. Message を受信する


- Message を送る(Wearable → Phone)

通知から PendingIntent で WearableListenerService を継承したサービスを開始するコードになっている。
NodeId には流れその1 で受信した Data Item の持ち主を保持しておいて利用するようになっている。
Data Item から NodeId を取り出すには、パスを見ればよい。

MessageApi.sendMessage() を使う。
指定した NodeId にだけ送られる。




- Message を受信する(Phone)

Messag を受信すると、MessageListener の onMessageReceived() が呼ばれる。





■ 流れその3: Wearableでアプリを表示する

android:keepScreenOn="true" を指定すると、画面がタイムアウトしない。



ただし、これはバッテリーにとても影響するので、自分でタイムアウト期間を設けて、その時間ユーザーからのインタラクションがないときは、Activityを終了するようにする。
また、ユーザーの状況に応じて Activity を終了する。例えば、このアプリなら Phone 側でアプリが終了したら、Wearableの通知を削除したり、アプリも終了させるなど。

WakeLock も注意が必要。Wearable の小さいバッテリーには影響が大きい。

Wearableのアプリは左から右にスワイプして消すことができるが、ViewPager とは操作がかぶるので意図せずアプリを終了することがあるかもしれない。
Wearアプリのテーマで android:windowSwipeToDismiss="false" を指定すれば、スワイプで消せなくなる。



Wearの上に手のひらをかざせばホームスクリーンに変わるが、あまりエレガントではない。
画面を長押しすると、アプリを終了する画面を表示する DismissOverlayView が用意されている



画像などのデータは Asset を使って Data Item に入れて送る。
画像は小さい画面に適したサイズにしてから送ること。





■ Q and A

Q: Wearable との接続に Google Play Service を使っているということは、Kindle とかのデバイスでは使えない?
A: Play Store が入っている、Android 4.3 以上のデバイスが対応デバイスです。

Q: Custom Activity を画面に置いたままで自動的にデバイスをタイムアウトさせることができますか?また、wakelock がリリースされたときにホームスクリーンに戻ることはできますか?
A: 30秒でホーム画面にタイムアウトします。

Q: ということは、アプリを置いたままにする方法はない?(この後、質問者の意味がよくわからない)
A: そういうときには、Notification を使うべきでしょう。

Q: このプレゼンでは、Wearableをリモートコントロールとして使っていましたが、ジャイロスコープなどのセンサーはどうやって使いますか?
A: Wearable は Android で動いています。使いたいセンサーのセンサーリスナーを登録します。

Q: どうやって、アプリからアプリへ切り替えますか?どこでアプリの一覧を見ることができますか?
A: UI は post-grid 用にデザインされています。意図的にアプリケーションの一覧をなくしています。開発者には、適切なときに stream にカード(Wearableでの通知のこと)を出したり、音声アクションを登録することを推奨します。"OK Google, start app name"と言うこともできます。

Q: プレセットのボイスコマンドがあるのですか?それとも自分でボイスコマンドを定義できるのですか?
A: ボイスコマンドはプラットフォームの一部です。developer.android.com に方法が書いてあります。ボインスコマンドを拡張する提案もウェルカムです。

Q: Google Glass 向けのアプリを作るときは、別々に作らないといけないですか?
A: 今、Google Glass チームと Wear チームは一緒に活動しており、Google が出しているすべての Wearable で一貫した API がいずれ出せると思います。

Q: Android TV や Android Auto に Wearable が接続することはなにか考えていますか?
A: Glass と同じように通知は Android Auto にも機能します。他の Wearable チームと密接に活動しているので将来なにかあるかもしれません。

Q: 画面のオンオフと検知できますか?
A: できます。

Q: Wearで電話アプリをつくりたいのですが...
A: スピーカーがないので、話せますが、聞けません。

Q: Wear が近くにあるかどうかに応じて処理をすることはできますか?
A: Wear と Phone は Bluetooth で接続されているので、その状態でわかります。



2014年6月30日月曜日

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

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



■ 全体の感想

前半は、Android Studio Beta の特に Variant についての解説、後半はデモと個別の機能について。
CIツールのことをかなり意識している感じが伝わってきた。
1.0 が出たら本格的にEclipse + ADTがオワコンになりそうな感じ。
現在はぜんぜんドキュメントがないが、1.0 になったら Android Studio のドキュメントをもっと増やす予定だそうだ。


■ 内容のpickup

Android Studio Beta がリリースされた。
(セッション時は 0.8.0 だが、その後 0.8.1 がリリースされている)

Android Studioの戦略は、統一されたビルドシステムを提供すること。つまり、Android Studio でビルドしようが、CIでビルドしようが、同じビルドができるようにすること。
柔軟性が大事。コードの再利用、ビルドのカスタマイズ化などをIDEとGradleのコンビネーションをうまくやりたい。
前回のI/Oからこの一年でさまざまなバグを修正し、パフォーマンスを改善し、IDEとの統合もたくさんしてきた。


Varitants
- Build Type
Develop vs Product 開発バージョン
- Product Flavor
Paid vs Free など目的に応じて変える
- multiple apk (coming soon) x86 vs ARM など
ゲームによい

- Variant Filter
- Improved Dependencies
Freeには広告があり場合など、Free版だけ広告ライブラリに依存しているなど
denpendencies scope: コンパイル時にチェックして、必要なものだけパッケージに入れる
- New Manifest Merger
ビルドダイプやFlavorに応じてpermissionを変えたいときなど
tools:replace


Insertion android:authorities="${applicationId}.provider"
ContentProviderで便利!

Variant Publishing
Variants in Libraries
まだ作業中


Customization
- BuildConfig Injection
Variantごとのフラグを入れたいときとかに便利
- Res value Injection
- Per-Variant SourceSet



APIs
- Variant Manipulation
- Plugin API
- API to augment IDE model


Android Wear
- Build-in Support for Micro App
メインアプリケーション内にパッケージされる
- Generate XML resoure
- Inject Node in Manifest

dependencies { wearApp project(':wearProject') } or dependencies { wearApp files('/path/to/apk') }


IDE Integration
- Updated Model
- Improved Sync / Build
- Project Structure / Editor Support / Lint


Performance
- Critical Issue
- Full vs Incremental Builds
- Investigation : Known Bottlenecks
- Project Evaluation / Model Building
- Incremental Support in Tasks
- Tasks Parallelization


Road to 1.0
- Finalize IDE Model / DSL
- Variant Aware Dependency Management
- Compatibility with Gradle Model / Plugins


■ Android Studio の新しい機能

Eclipse プロジェクトをインポートしたときにサマリーができるようになった。
例えば、どの jar を gradle の設定に変更したかや、src や res フォルドの階層がどう変わったかなど。


Android Specific View
新しい Android Specific View では、全てのビルドスクリプトが一カ所にまとまるなど、みやすくなる。
マニフェストや同じ名前のリソースファイルもまとまって表示される。
# Eclipseっぽい階層表示だ
# 次のいくつかのCanary buildで入るらしい。


New Project ウィザードで minSdkVersion を選ぶために、現在のAPI Levelの分布をみれるようになった。

WearとAndroid TV用のテンプレートが選べるようになった。

Wearのレイアウトプレビュー(四角と丸)がでるようになった。


プロジェクト全体を RTL 対応する機能が用意された。

エディタプレビュー上でOverflowメニューをクリックすると、メニューが表示されるなど、Activityをひもづけておくと、表示が実装に応じて変わるようになった。


異なるバージョンのプレビューが一度にでるようになった。


新しい属性
android:colorPrimary
android:colorAccent
ActionBarやチェックボックスの色が変わる


android:tint
android:tintMode


テーマに指定されている属性の詳細がF1で出るようになった


@IdRes int id
@DrawableRes int icon
など、アノテーションでどのリソースIDが指定されるべきかを宣言できるようになった。
あわないリソースIDを渡しているコードはLintでエラーになる。