SlideShare una empresa de Scribd logo
1 de 66
Descargar para leer sin conexión
#DroidKaigi #room2
/66
シームレスに遷移可能な画面を
他のアプリに提供する方法
2019/2/7 DroidKaigi 2019
エムスリー株式会社 星川 貴樹
1
#DroidKaigi #room2
/66
プロフィール
- 星川貴樹 (@oboenikui)
- エムスリー株式会社所属 (2017〜)
- Android & セキュリティエンジニア
- 初めてのAndroidはIS01
2
#DroidKaigi #room2
/66
エムスリー株式会社
- 医師向けプラットフォームサービスなど医療系Webサービスの会社
- ブースも出しているので遊びに来てね!
- We Are Hiring!!
3
#DroidKaigi #room2
/66
本セッションについて
ゴール
- Chrome Custom Tabsや
Google Now Launcherをヒン
トに、シームレスな遷移の実装
を理解する
- 関連技術としてプロセス間通信
(IPC) の方法を理解する
話さないこと
- Fragment間をスムーズに遷移
する方法など
- アニメーションの付け方
- ConstraintLayout,
MotionLayout
...
4
#DroidKaigi #room2
/66
注意事項
- 実用的な話よりニッチな話多めです
- 本セッションで紹介された内容をプロダクトに活かす場合、危険性を
含めて十分議論の上ご活用ください
5
#DroidKaigi #room2
/66
本当に実用的な話だけを聞きたい方へ
6
#DroidKaigi #room2
/66
アプリを跨いだ
Activity遷移でも
Shared Elementが使えます
https://developer.android.com/training/transitions/start-activity#start-with-element 7
#DroidKaigi #room2
/66
ご清聴ありがとうございました
8
#DroidKaigi #room2
/66
ここから先はニッチな話です
9
#DroidKaigi #room2
/66
本セッションのきっかけ
数年前、自分には動作原理がよくわからない
Androidアプリが3つあった
10
#DroidKaigi #room2
/66
1つめ:マルチアカウントアプリ
- 他のapkをアプリ内で起動するアプリ
- リフレクションでシステムのapkロードの仕組
みを使う
- 自分のActivityThreadを他のものであるか
のように改竄して対象アプリを騙す
※ DroidKaigi 2018で発表済みなので詳しくはスライド参照
https://www.slideshare.net/TakakiHoshikawa/how-multiaccount-app-works 11
#DroidKaigi #room2
/66
2つめ:Chrome Custom Tabs
- アプリが提供するWebViewのようにChromeを
開く機能
- Chromeで開いたり、WebViewを使うより高速
に切り替わる
- Custom TabからChromeを開く際、Activity
が切り替わっているのにウェブページの状態が
引き継がれている
12
#DroidKaigi #room2
/66
3つめ:Google Now Launcher
- 2013年のNexus 5向けランチャーが初出
- ランチャーの左からGoogle Nowが出てくる
- ランチャーアプリ内にはGoogle Nowのコード
が入っていない!
(Googleアプリの画面が表示されている)
13
#DroidKaigi #room2
/66
Agenda
- アプリ間の遷移をスムーズにする技術
- Chrome Custom Tabsで使われているプロセス間通信の仕組みを知る
- (Custom Tabから通常のChromeへの遷移の仕方を知る)
- 動的なコンポーネントを提供する技術
- GoogleアプリはどのようにしてGoogle Nowを表示しているか
14
#DroidKaigi #room2
/66
アプリ間の遷移をスムーズにする技術
15
#DroidKaigi #room2
/66
Chrome Custom Tabs
- Chrome Custom Tabsは、Chromeのタブをア
プリのWebViewのように表示する機能
- アプリ内WebViewやIntentによるブラウザ起
動より高速
- Custom TabからChromeの画面にシームレスに
遷移する
アプリ間の遷移をスムーズにする技術
16
#DroidKaigi #room2
/66
参考リポジトリの話
- Google Chromeはオープンソースではないので、代わりに
Chromiumのソースを参考に話をします
https://github.com/chromium/chromium
https://github.com/kuoruan/Chromium-Android (NDKビルド済み)
アプリ間の遷移をスムーズにする技術
17
#DroidKaigi #room2
/66
Chrome Custom Tabsの動作を知る
CustomTabActivity ChromeTabbedActivity任意のアプリ
アプリ間の遷移をスムーズにする技術
18
#DroidKaigi #room2
/66
Chrome Custom Tabsの動作を知る
CustomTabActivity ChromeTabbedActivity任意のアプリ
遷移前に事前処理を行う
アプリ間の遷移をスムーズにする技術
19
#DroidKaigi #room2
/66
遷移前後の処理
任意のアプリ
アプリ間の遷移をスムーズにする技術
20
#DroidKaigi #room2
/66
遷移前後の処理
任意のアプリ
CustomTabsService
IPCで開くURLを事前に通知
アプリ間の遷移をスムーズにする技術
21
#DroidKaigi #room2
/66
遷移前後の処理
任意のアプリ
渡されたURLを基にコネクショ
ンを張るなど事前処理を行う
アプリ間の遷移をスムーズにする技術
CustomTabsService
22
#DroidKaigi #room2
/66
遷移前後の処理
CustomTabActivity任意のアプリ
ユーザーアクションにより
Custom Tabを起動
アプリ間の遷移をスムーズにする技術
CustomTabsService
23
#DroidKaigi #room2
/66
遷移前後の処理
CustomTabActivity任意のアプリ
CustomTabsService
事前に張ったコネクションを
利用して高速にページを表示
アプリ間の遷移をスムーズにする技術
24
#DroidKaigi #room2
/66
ポイント
- サードパーティアプリからChromeのServiceにバインドする
- プロセス間通信 (IPC) を行う必要がある
- 実装はAIDLを用いている
アプリ間の遷移をスムーズにする技術
25
#DroidKaigi #room2
/66
AndroidのIPC
- Binderと呼ばれる仕組みでデータのやりとりを行う
- Parcelという仕組みでデータの読み書きを行う
- Parcelに読み書きできるのはプリミティブ型、Parcelable、
Serializable、Listのような一部のデータ構造型
アプリ間の遷移をスムーズにする技術
26
#DroidKaigi #room2
/66
Serviceにバインドする
- ActivityとServiceがやりとりするにはバインドする必要がある
- バインドする方法は以下の3通り
バインド方法 プロセスの制約 スレッドの制約
Binderクラスを拡張する 同一プロセス内のみ -
メッセンジャーを使用する -
すべてのリクエストが1つの
スレッドにキューイングされる
AIDLを使用する - -
アプリ間の遷移をスムーズにする技術
27
#DroidKaigi #room2
/66
AIDLの紹介
- Android インターフェース定義言語 (AIDL)
- 文法はJavaのinterfaceの記法に近い
- プロセス間通信 (IPC) を行うために用いる手法の1つ
- そのままではスレッドセーフではないのでAndroidのドキュメント
でも基本的には使わないことを推奨
- とはいえ別プロセス & マルチスレッドでメッセージングを行うため
には用いられる
https://developer.android.com/guide/components/bound-services
アプリ間の遷移をスムーズにする技術
28
#DroidKaigi #room2
/66
AIDLの仕組み
アプリ間の遷移をスムーズにする技術
.aidlファイル
Stubクラス
(abstract)
Proxyクラス interface
クライアント側用
リモート側用
クラス自動生成
実装 継承
実装クラス
実装
29
#DroidKaigi #room2
/66
AIDLの仕組み
アプリ間の遷移をスムーズにする技術
.aidlファイル
Stubクラス
(abstract)
Proxyクラス interface
クライアント側用
リモート側用
クラス自動生成
実装 継承
実装クラス
実装
インターフェースを定義
mayLaunchUrl()
30
#DroidKaigi #room2
/66
AIDLの仕組み
アプリ間の遷移をスムーズにする技術
.aidlファイル
Stubクラス
(abstract)
Proxyクラス interface
クライアント側用
リモート側用
クラス自動生成
実装 継承
実装クラス
実装
mayLaunchUrl()メソッドの
実処理を開発者が実装
31
#DroidKaigi #room2
/66
AIDLの仕組み
アプリ間の遷移をスムーズにする技術
.aidlファイル
Stubクラス
(abstract)
Proxyクラス interface
クライアント側用
リモート側用
クラス自動生成
実装 継承
実装クラス
継承・実装
mayLaunchUrl()メソッドには
プロセス間通信用の処理が実装
32
#DroidKaigi #room2
/66
AIDLの仕組み
メソッド呼び出し
Parcelに
格納
クライアント側 (例:Activity) リモート側 (例:Service)
Proxyクラス
binder binder
Parcelから
取り出し
Stubクラス
実装メソッド呼び出し
プロセス間通信
参考:スキルアップのための分散オブジェクト入門 第2回
http://www.atmarkit.co.jp/fjava/rensai2/objetry02/objetry02.html
アプリ間の遷移をスムーズにする技術
33
#DroidKaigi #room2
/66
AIDLの仕組み
メソッド呼び出し
Parcelに
格納
クライアント側 (例:Activity) リモート側 (例:Service)
Proxyクラス
binder binder
Parcelから
取り出し
Stubクラス
実装メソッド呼び出し
プロセス間通信
アプリ間の遷移をスムーズにする技術
34
#DroidKaigi #room2
/66
AIDLの仕組み
メソッド呼び出し
Parcelに
格納
クライアント側 (例:Activity) リモート側 (例:Service)
Proxyクラス
binder binder
Parcelから
取り出し
Stubクラス
実装メソッド呼び出し
プロセス間通信
アプリ間の遷移をスムーズにする技術
mayLaunchUrl()
呼び出し
35
#DroidKaigi #room2
/66
AIDLの仕組み
メソッド呼び出し
Parcelに
格納
クライアント側 (例:Activity) リモート側 (例:Service)
Proxyクラス
binder binder
Parcelから
取り出し
Stubクラス
実装メソッド呼び出し
プロセス間通信
アプリ間の遷移をスムーズにする技術
mayLaunchUrl()
の実処理を実行
36
#DroidKaigi #room2
/66
余談:シームレスなActivity間の遷移
CustomTabActivity ChromeTabbedActivity任意のアプリ
Activityが切り替わっているが
JavaScriptの状態などは維持
アプリ間の遷移をスムーズにする技術
37
#DroidKaigi #room2
/66
余談:シームレスなActivity間の遷移
- Custom Tabから通常のChromeの画面への遷移
があまりに自然すぎる
- SharedElementは単に新たなViewをアニメー
ションさせるだけだが、この遷移ではViewの状
態が完全に引き継がれている
アプリ間の遷移をスムーズにする技術
38
#DroidKaigi #room2
/66
状態が保存される遷移の実装
- Viewを含むWebページの状態を保持するオブジェクトをActivity間
で共有
- 生成時のContextは、Application Contextを
ContextThemeWrapperに包んだものを使用
- Viewにはほとんど実装を載せず、他のクラスに委譲している
アプリ間の遷移をスムーズにする技術
Activity間共有用処理をしている箇所
https://github.com/chromium/chromium/blob/master/chrome/android/java/src
/org/chromium/chrome/browser/tab/Tab.java#L1267 39
#DroidKaigi #room2
/66
動的なコンポーネントを提供する技術
40
#DroidKaigi #room2
/66
使い道
- Google Nowのような汎用の情報画面を表示する
(端末メーカー向き)
- アプリAの一部機能をアプリBでも使いたいが、アプリB側には実装を
持たせたくない場合
動的なコンポーネントを提供する技術
41
#DroidKaigi #room2
/66
Google Nowランチャーの動作を知る
- 右の動きは全てランチャーアプリ上での挙動
- 連携のためのコードを除き、ランチャー側に
Google Nowの実装は存在しない
- ランチャーのコンテンツが右に追い出される動
きはランチャーの実装
動的なコンポーネントを提供する技術
42
#DroidKaigi #room2
/66
Google Nowランチャーの動作を知る
- 動作原理さえ知っていればランチャーである必
要もない
- ただしGoogle Nowの場合、システムアプリで
しか利用できないように制限されている
動的なコンポーネントを提供する技術
43
#DroidKaigi #room2
/66
参考リポジトリの話
- GoogleアプリはOSSではなく、規約上リバースエンジニアリングで
得た情報を発表するわけにはいかないので、同じ動きをするOSSを参
考に話します
https://github.com/FabianTerhorst/DrawerOverlayService
動的なコンポーネントを提供する技術
44
#DroidKaigi #room2
/66
Google Nowランチャーの4つのポイント
1. ServiceによってWindowManager#addViewで追加されたViewである
2. 表示するActivityのWindowManager.LayoutParamsを使ってアプリケー
ションレイヤに表示させる
3. キーイベントなどに対応するためにWindowクラスのインスタンスを頑張っ
て生成している
4. IPCによりランチャー側から指示された位置にViewを表示
動的なコンポーネントを提供する技術
45
#DroidKaigi #room2
/66
WindowManagerについて
右:Facebook Messengerの例
- 一般アプリがWindowManagerを直接使う機会
は多くない
- 最も利用するケースは他のアプリの上に常に表
示するとき
- 実際にはActivityで表示されるViewなども
全てWindowManagerに追加されることで表示
される
動的なコンポーネントを提供する技術
46
#DroidKaigi #room2
/66
WindowManagerについて
- 一般アプリがWindowManagerを直接使う機会
は多くない
- 最も利用するケースは他のアプリの上に常に表
示するとき
- 実際にはActivityで表示されるViewなども
全てWindowManagerに追加されることで表示
される
WindowManager
Activity
Window
setContentView
addView
動的なコンポーネントを提供する技術
Windowクラス
最上位のウィンドウの外観と動作ポリシーを定めたクラスで、背景、タイト
ル領域、デフォルトのキー処理などの標準的な UIポリシーを提供する 47
#DroidKaigi #room2
/66
WindowManagerについて
WindowManager
Service
- 一般アプリがWindowManagerを直接使う機会
は多くない
- 最も利用するケースは他のアプリの上に常に表
示するとき
- 実際にはActivityで表示されるViewなども
全てWindowManagerに追加されることで表示
される
addView
動的なコンポーネントを提供する技術
48
#DroidKaigi #room2
/6649
Androidの表示レイヤー
WALLPAPER
表示内容に合わせて現在33層
のレイヤーに分けられている
アプリケーションレイヤ
PHONE
SYSTEM_ALERT
バッテリー不足などの
システムアラート
APPLICATION_OVERLAY
Messengerなどは
このレイヤー
電話アプリは通常の
アプリより手前に描画
通常のアプリ
壁紙
動的なコンポーネントを提供する技術
#DroidKaigi #room2
/6650
オーバーレイコンテンツの場合
WALLPAPER
他の重要でないアラートなど
よりも上に表示される
Activityに紐付かない画面の
提供が可能なので、常に画面
上に表示しておくことが可能
アプリケーションレイヤ
PHONE
SYSTEM_ALERT
バッテリー不足などの
システムアラート
電話アプリは通常の
アプリより手前に描画
通常のアプリ
壁紙
APPLICATION_OVERLAY
Messengerなどは
このレイヤー
※ このような通知が出てくる
動的なコンポーネントを提供する技術
#DroidKaigi #room2
/6651
Google Nowの場合
WALLPAPER
アプリケーションレイヤに表
示する
表示がActivityと紐づくた
め、他のアプリの上に表示さ
れることはない
PHONE
SYSTEM_ALERT
バッテリー不足などの
システムアラート
電話アプリは通常の
アプリより手前に描画
壁紙
APPLICATION_OVERLAY
Messengerなどは
このレイヤー
通常のアプリ アプリケーションレイヤ
動的なコンポーネントを提供する技術
#DroidKaigi #room2
/66
アプリケーションレイヤの制限
- セキュリティ上、任意のServiceが勝手にアプリケーションレイヤ
にViewを追加できるべきではない
- 対策として、WindowManagerが各ウィンドウごとにtokenを管理し
ている
- tokenはParcelに書き込める形式になっているので、アプリケー
ション側からServiceに渡して制限を回避する
動的なコンポーネントを提供する技術
52
#DroidKaigi #room2
/66
画面の状態変更やボタン操作に対応する
Activityではレイアウトに係る処理をWindowクラスで行っているが、
ServiceにはWindowクラスを使う基本的な手段が存在しない
WindowManager
Activity
Window
setContentView
addView
Service
addView
動的なコンポーネントを提供する技術
53
#DroidKaigi #room2
/66
System Process
Process BProcess A
Activity
画面の状態変更やボタン操作に対応する
またこれらはそれぞれ別プロセスで動くため、Windowインスタンスを
Serviceに渡すなどは不可能
Window Service
WindowManager
動的なコンポーネントを提供する技術
54
#DroidKaigi #room2
/66
ServiceでWindowクラスのインスタンス生成
- Windowはabstractクラスで、実装はPhoneWindowクラス
- PhoneWindowクラスはinternalクラスなので、直接生成するのは
困難だが頑張って生成する
動的なコンポーネントを提供する技術
55
#DroidKaigi #room2
/66
PhoneWindowのインスタンスを生成できる箇所
動的なコンポーネントを提供する技術
https://search.siprop.org/android-9.0.0_r1.0/search?q=%22new+PhoneWindow%22&def
s=&refs=&path=frameworks%2Fbase%2Fcore%2Fjava&hist=&sort=lastmodtime
56
#DroidKaigi #room2
/66
PhoneWindowのインスタンスを生成できる箇所
https://search.siprop.org/android-9.0.0_r1.0/search?q=%22new+PhoneWindow%22&def
s=&refs=&path=frameworks%2Fbase%2Fcore%2Fjava&hist=&sort=lastmodtime
コンストラクタで生成しており、
getWindow()メソッドで取り出すことも可能
動的なコンポーネントを提供する技術
57
#DroidKaigi #room2
/66
ServiceでWindowクラスのインスタンス生成
- Windowはabstractクラスで、実装はPhoneWindowクラス
- PhoneWindowクラスはinternalクラスなので、直接生成するのは
困難だが頑張って生成する Dialogを使って簡単に生成できる
val window: Window? = Dialog(
context,
R.style.Theme_Overlay
).window
動的なコンポーネントを提供する技術
58
#DroidKaigi #room2
/66
ここまでのポイント
1. ServiceによってWindowManager#addViewで追加されたViewである
2. 表示するActivityのレイアウトパラメータを使ってアプリケーションレイ
ヤに表示させる
3. 画面回転などリッチな表示に対応するためにWindowインスタンスを頑張っ
て生成している
4. IPCによりランチャー側から指示された位置にViewを表示
動的なコンポーネントを提供する技術
59
#DroidKaigi #room2
/6660
ここまでのポイント
1. ServiceによってWindowManager#addViewで追加されたViewである
2. 表示するActivityのレイアウトパラメータを使ってアプリケーションレイ
ヤに表示させる
3. 画面回転などリッチな表示に対応するためにWindowインスタンスを頑張っ
て生成している
4. IPCによりランチャー側から指示された位置にViewを表示
https://github.com/oboenikui/AppLayerOverlaySample
動的なコンポーネントを提供する技術
#DroidKaigi #room2
/66
ここまでのポイント
1. ServiceによってWindowManager#addViewで追加されたViewである
2. 表示するActivityのレイアウトパラメータを使ってアプリケーションレイ
ヤに表示させる
3. 画面回転などリッチな表示に対応するためにWindowインスタンスを頑張っ
て生成している
4. IPCによりランチャー側から指示された位置にViewを表示
動的なコンポーネントを提供する技術
61
#DroidKaigi #room2
/66
IPCでランチャーアプリと通信
動的なコンポーネントを提供する技術
ランチャーアプリ
移動すべき座標を通知
62
Google Nowの
サービス
#DroidKaigi #room2
/6663
IPCでランチャーアプリと通信
動的なコンポーネントを提供する技術
ランチャーアプリ
Google Nowの
サービス
移動することを通
知
#DroidKaigi #room2
/66
最終的な実装結果
動的なコンポーネントを提供する技術
簡易的にViewPagerのページめくりと同期させた場
合、右のようになる
(参考リポジトリの実行結果)
64
#DroidKaigi #room2
/66
まとめと考察
- Chrome Custom TabsではAIDLによるプロセス間通信を行う
- 同様にAIDLで定めたプロトコルをサードパーティに提供し、Activity
起動前の準備を行うことができる
- Google Now LauncherもActivityとプロセス間通信を行うこと
でアプリケーションレイヤーに描画する
- DialogからWindowを生成する手法はAPPLICATION_OVERLAYレイ
ヤーでも使えるかも
- 「横スワイプで表示」以外も頑張ればできる
65
#DroidKaigi #room2
/66
ご清聴ありがとうございました
66

Más contenido relacionado

La actualidad más candente

はじめてのGit #gitkyoto
はじめてのGit #gitkyotoはじめてのGit #gitkyoto
はじめてのGit #gitkyotoHisateru Tanaka
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
社内Git勉強会向け資料
社内Git勉強会向け資料社内Git勉強会向け資料
社内Git勉強会向け資料Hiroki Saiki
 
20160128 jjug Nightセミナー_Git実践入門
20160128 jjug Nightセミナー_Git実践入門20160128 jjug Nightセミナー_Git実践入門
20160128 jjug Nightセミナー_Git実践入門Mizuki Ugajin
 
これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用Masaru Kurahayashi
 
Source treeの紹介
Source treeの紹介Source treeの紹介
Source treeの紹介ko ty
 
JWT Translation #technight
JWT Translation #technightJWT Translation #technight
JWT Translation #technightNov Matake
 
ネットワークの切り替えを感知する方法
ネットワークの切り替えを感知する方法ネットワークの切り替えを感知する方法
ネットワークの切り替えを感知する方法Keisuke Yamaguchi
 
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南Kouji Matsui
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Shota Umeda
 
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜Mikito Yoshiya
 
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作るAndroid アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作るYu Nobuoka
 
git gitにされたオレの屍を超えていけ
git gitにされたオレの屍を超えていけgit gitにされたオレの屍を超えていけ
git gitにされたオレの屍を超えていけDaisuke Kasuya
 
SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)Naohiro Fujie
 
マイクロWebアプリケーション - Developers.IO 2016
マイクロWebアプリケーション - Developers.IO 2016マイクロWebアプリケーション - Developers.IO 2016
マイクロWebアプリケーション - Developers.IO 2016都元ダイスケ Miyamoto
 
Go一緒にいかが?
Go一緒にいかが?Go一緒にいかが?
Go一緒にいかが?Ryuji Iwata
 
OpenID ConnectとAndroidアプリのログインサイクル
OpenID ConnectとAndroidアプリのログインサイクルOpenID ConnectとAndroidアプリのログインサイクル
OpenID ConnectとAndroidアプリのログインサイクルMasaru Kurahayashi
 
CodeIgniter 最新情報 2010
CodeIgniter 最新情報 2010CodeIgniter 最新情報 2010
CodeIgniter 最新情報 2010kenjis
 

La actualidad más candente (20)

はじめてのGit #gitkyoto
はじめてのGit #gitkyotoはじめてのGit #gitkyoto
はじめてのGit #gitkyoto
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
社内Git勉強会向け資料
社内Git勉強会向け資料社内Git勉強会向け資料
社内Git勉強会向け資料
 
20160128 jjug Nightセミナー_Git実践入門
20160128 jjug Nightセミナー_Git実践入門20160128 jjug Nightセミナー_Git実践入門
20160128 jjug Nightセミナー_Git実践入門
 
これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用
 
Source treeの紹介
Source treeの紹介Source treeの紹介
Source treeの紹介
 
JWT Translation #technight
JWT Translation #technightJWT Translation #technight
JWT Translation #technight
 
ネットワークの切り替えを感知する方法
ネットワークの切り替えを感知する方法ネットワークの切り替えを感知する方法
ネットワークの切り替えを感知する方法
 
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
 
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
 
Git超入門
Git超入門Git超入門
Git超入門
 
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作るAndroid アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
 
git gitにされたオレの屍を超えていけ
git gitにされたオレの屍を超えていけgit gitにされたオレの屍を超えていけ
git gitにされたオレの屍を超えていけ
 
OpenID 2.0 Quick Note
OpenID 2.0 Quick NoteOpenID 2.0 Quick Note
OpenID 2.0 Quick Note
 
SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)
 
マイクロWebアプリケーション - Developers.IO 2016
マイクロWebアプリケーション - Developers.IO 2016マイクロWebアプリケーション - Developers.IO 2016
マイクロWebアプリケーション - Developers.IO 2016
 
Go一緒にいかが?
Go一緒にいかが?Go一緒にいかが?
Go一緒にいかが?
 
OpenID ConnectとAndroidアプリのログインサイクル
OpenID ConnectとAndroidアプリのログインサイクルOpenID ConnectとAndroidアプリのログインサイクル
OpenID ConnectとAndroidアプリのログインサイクル
 
CodeIgniter 最新情報 2010
CodeIgniter 最新情報 2010CodeIgniter 最新情報 2010
CodeIgniter 最新情報 2010
 

Similar a DroidKaigi 2019 シームレスに遷移可能な画面を他のアプリに提供する方法

WeDX Flow Hands-on
WeDX Flow Hands-onWeDX Flow Hands-on
WeDX Flow Hands-onJingun Jung
 
Go goes Mobile: Quick Exploration on Go 1.5 and Gomobile
Go goes Mobile: Quick Exploration on Go 1.5 and GomobileGo goes Mobile: Quick Exploration on Go 1.5 and Gomobile
Go goes Mobile: Quick Exploration on Go 1.5 and GomobileTakahiro Yoshimura
 
ネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConViewネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConViewRakuten Group, Inc.
 
Androidが起こしたオープン・イノベーション
Androidが起こしたオープン・イノベーションAndroidが起こしたオープン・イノベーション
Androidが起こしたオープン・イノベーションKoji Shigemura
 
html5とcss3実例紹介とデモ
html5とcss3実例紹介とデモhtml5とcss3実例紹介とデモ
html5とcss3実例紹介とデモAkihiro Sugiyama
 
デブサミ2013【15D-3】Azureセッション資料
デブサミ2013【15D-3】Azureセッション資料デブサミ2013【15D-3】Azureセッション資料
デブサミ2013【15D-3】Azureセッション資料Shinichiro Isago
 
【AWS×Deployment】TechTalk #5
【AWS×Deployment】TechTalk #5【AWS×Deployment】TechTalk #5
【AWS×Deployment】TechTalk #5幸夫 茅根
 
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話
Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話Takuya Kikuchi
 
DeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployする
DeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployするDeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployする
DeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployするtomohiro kato
 
Windows azure mobile services を使った windows ストアアプリ開発 1027
Windows azure mobile services を使った windows ストアアプリ開発 1027Windows azure mobile services を使った windows ストアアプリ開発 1027
Windows azure mobile services を使った windows ストアアプリ開発 1027Shotaro Suzuki
 
国内Cloud spanner初事例!「迎車料金無し!新感覚タクシーアプリ「フルクル」」
国内Cloud spanner初事例!「迎車料金無し!新感覚タクシーアプリ「フルクル」」 国内Cloud spanner初事例!「迎車料金無し!新感覚タクシーアプリ「フルクル」」
国内Cloud spanner初事例!「迎車料金無し!新感覚タクシーアプリ「フルクル」」 Hayato Ito
 
The Mobile Frontier at HTML5 Conference 2013/11/30
The Mobile Frontier at HTML5 Conference 2013/11/30The Mobile Frontier at HTML5 Conference 2013/11/30
The Mobile Frontier at HTML5 Conference 2013/11/30Yukio Andoh
 
Google io2011報告
Google io2011報告Google io2011報告
Google io2011報告cat kaotaro
 
アンドロイダーが取り組むXamarin開発
アンドロイダーが取り組むXamarin開発アンドロイダーが取り組むXamarin開発
アンドロイダーが取り組むXamarin開発Daisuke Tsutsumi
 
20101127 Android Usability Seminar
20101127 Android Usability Seminar20101127 Android Usability Seminar
20101127 Android Usability SeminarVisso株式会社
 
≪インテル x ブロケード 特別対談≫ 2020年。どうなる?車とデータセンタの関係 ~SDxの、その先へ~
≪インテル x ブロケード 特別対談≫ 2020年。どうなる?車とデータセンタの関係 ~SDxの、その先へ~ ≪インテル x ブロケード 特別対談≫ 2020年。どうなる?車とデータセンタの関係 ~SDxの、その先へ~
≪インテル x ブロケード 特別対談≫ 2020年。どうなる?車とデータセンタの関係 ~SDxの、その先へ~ Brocade
 
微博(ウェイボ)+Androidタブレットで 始める社内の可視化
微博(ウェイボ)+Androidタブレットで 始める社内の可視化微博(ウェイボ)+Androidタブレットで 始める社内の可視化
微博(ウェイボ)+Androidタブレットで 始める社内の可視化Takamitsu Nakao
 

Similar a DroidKaigi 2019 シームレスに遷移可能な画面を他のアプリに提供する方法 (20)

Decode報告(提供版)
Decode報告(提供版)Decode報告(提供版)
Decode報告(提供版)
 
Androidとは何か
Androidとは何かAndroidとは何か
Androidとは何か
 
WeDX Flow Hands-on
WeDX Flow Hands-onWeDX Flow Hands-on
WeDX Flow Hands-on
 
Go goes Mobile: Quick Exploration on Go 1.5 and Gomobile
Go goes Mobile: Quick Exploration on Go 1.5 and GomobileGo goes Mobile: Quick Exploration on Go 1.5 and Gomobile
Go goes Mobile: Quick Exploration on Go 1.5 and Gomobile
 
ネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConViewネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConView
 
Androidが起こしたオープン・イノベーション
Androidが起こしたオープン・イノベーションAndroidが起こしたオープン・イノベーション
Androidが起こしたオープン・イノベーション
 
html5とcss3実例紹介とデモ
html5とcss3実例紹介とデモhtml5とcss3実例紹介とデモ
html5とcss3実例紹介とデモ
 
Oss on Azure, social mobile web
Oss on Azure, social mobile webOss on Azure, social mobile web
Oss on Azure, social mobile web
 
デブサミ2013【15D-3】Azureセッション資料
デブサミ2013【15D-3】Azureセッション資料デブサミ2013【15D-3】Azureセッション資料
デブサミ2013【15D-3】Azureセッション資料
 
【AWS×Deployment】TechTalk #5
【AWS×Deployment】TechTalk #5【AWS×Deployment】TechTalk #5
【AWS×Deployment】TechTalk #5
 
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話
Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話
 
DeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployする
DeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployするDeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployする
DeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployする
 
Windows azure mobile services を使った windows ストアアプリ開発 1027
Windows azure mobile services を使った windows ストアアプリ開発 1027Windows azure mobile services を使った windows ストアアプリ開発 1027
Windows azure mobile services を使った windows ストアアプリ開発 1027
 
国内Cloud spanner初事例!「迎車料金無し!新感覚タクシーアプリ「フルクル」」
国内Cloud spanner初事例!「迎車料金無し!新感覚タクシーアプリ「フルクル」」 国内Cloud spanner初事例!「迎車料金無し!新感覚タクシーアプリ「フルクル」」
国内Cloud spanner初事例!「迎車料金無し!新感覚タクシーアプリ「フルクル」」
 
The Mobile Frontier at HTML5 Conference 2013/11/30
The Mobile Frontier at HTML5 Conference 2013/11/30The Mobile Frontier at HTML5 Conference 2013/11/30
The Mobile Frontier at HTML5 Conference 2013/11/30
 
Google io2011報告
Google io2011報告Google io2011報告
Google io2011報告
 
アンドロイダーが取り組むXamarin開発
アンドロイダーが取り組むXamarin開発アンドロイダーが取り組むXamarin開発
アンドロイダーが取り組むXamarin開発
 
20101127 Android Usability Seminar
20101127 Android Usability Seminar20101127 Android Usability Seminar
20101127 Android Usability Seminar
 
≪インテル x ブロケード 特別対談≫ 2020年。どうなる?車とデータセンタの関係 ~SDxの、その先へ~
≪インテル x ブロケード 特別対談≫ 2020年。どうなる?車とデータセンタの関係 ~SDxの、その先へ~ ≪インテル x ブロケード 特別対談≫ 2020年。どうなる?車とデータセンタの関係 ~SDxの、その先へ~
≪インテル x ブロケード 特別対談≫ 2020年。どうなる?車とデータセンタの関係 ~SDxの、その先へ~
 
微博(ウェイボ)+Androidタブレットで 始める社内の可視化
微博(ウェイボ)+Androidタブレットで 始める社内の可視化微博(ウェイボ)+Androidタブレットで 始める社内の可視化
微博(ウェイボ)+Androidタブレットで 始める社内の可視化
 

DroidKaigi 2019 シームレスに遷移可能な画面を他のアプリに提供する方法