Slide 1

Slide 1 text

Vol.2 ⾞載Androidシステムの技術と開発チーム

Slide 2

Slide 2 text

Mobility Technologies Co., ● 何をつくっているのか ● 登壇者のご紹介 ● アプリの技術的な頑張りポイント ● ⾞載システムグループの推しポイント 本⽇の内容

Slide 3

Slide 3 text

Mobility Technologies Co., 何をつくっているのか

Slide 4

Slide 4 text

Mobility Technologies Co., タクシー配⾞サービスの簡単な構成図 クラウド タクシー ユーザーアプリ ・位置 ・配⾞可否 ・タクシー位置 ・到着予想時間

Slide 5

Slide 5 text

Mobility Technologies Co., タクシー配⾞サービスの簡単な構成図 クラウド タクシー ユーザーアプリ ・位置 ・配⾞可否 ・タクシー位置 ・到着予想時間

Slide 6

Slide 6 text

Mobility Technologies Co., 6 タクシー⾞内の機器(システム構成の⼀例) Wi-Fi Direct Taxi Meter Taxi Printer 後部座席 タブレット 乗務員端末 決済機 外部デバイス ⾞両信号 DRIVE CHART BLEロガー AWS IoT 4G

Slide 7

Slide 7 text

Mobility Technologies Co., 7 タクシー⾞内の機器(システム構成の⼀例) Wi-Fi Direct Taxi Meter Taxi Printer 後部座席 タブレット 乗務員端末 決済機 外部デバイス ⾞両信号 DRIVE CHART BLEロガー AWS IoT 4G

Slide 8

Slide 8 text

配⾞依頼 ➡ お迎えの流れ (乗務員端末視点)

Slide 9

Slide 9 text

Mobility Technologies Co., ユーザーアプリで配⾞依頼

Slide 10

Slide 10 text

Mobility Technologies Co., 配⾞依頼ダイアログ表⽰ 空⾞ 0円 空⾞ 迎⾞ 実⾞ ⽀払

Slide 11

Slide 11 text

Mobility Technologies Co., OKボタンタップで承諾 空⾞ 0円 空⾞ 迎⾞ 実⾞ ⽀払

Slide 12

Slide 12 text

Mobility Technologies Co., 迎⾞画⾯表⽰ 空⾞ 0円 空⾞ 迎⾞ 実⾞ ⽀払

Slide 13

Slide 13 text

Mobility Technologies Co., タクシーメーターの迎⾞ボタン押す 空⾞ 0円 空⾞ 迎⾞ 実⾞ ⽀払

Slide 14

Slide 14 text

Mobility Technologies Co., 迎⾞地へ移動開始 迎⾞ 310円 空⾞ 迎⾞ 実⾞ ⽀払

Slide 15

Slide 15 text

Mobility Technologies Co., 迎⾞地へ到着 迎⾞ 310円 空⾞ 迎⾞ 実⾞ ⽀払

Slide 16

Slide 16 text

Mobility Technologies Co., タクシーメーターの実⾞ボタンを押す 迎⾞ 310円 空⾞ 迎⾞ 実⾞ ⽀払

Slide 17

Slide 17 text

Mobility Technologies Co., 実⾞画⾯表⽰ 実⾞ 1000円 空⾞ 迎⾞ 実⾞ ⽀払

Slide 18

Slide 18 text

Mobility Technologies Co., 登壇者のご紹介

Slide 19

Slide 19 text

Mobility Technologies Co., 三輪 智也(@tomoya0x00) 主な呼ばれ方:みわさん ● 旧MOV車載システムのリーダー役 ● 組み込み(カーナビなど)業界の出身 ● 低レイヤー(シリアル通信、BLE)得意 宮部 慎太郎(@shinmiy) 主な呼ばれ方:しんみーさん ● 決済機周りのプロ ● 「Androidエンジニアとは…?」が口癖 ● 最近はFlutterをゴリゴリ

Slide 20

Slide 20 text

Mobility Technologies Co., 空中 清高(@soranakk) 主な呼ばれ方:そらなかさん なかし ● 専用端末向けAndroidアプリ開発を8年 ● Androidは下回りが得意 ● 「空中る」という言葉を生み出した 本戸 裕理(@yurihondo) 主な呼ばれ方:ほんどさん どし ● 開発全般担当、スマホ型大体わかるマン ● 弊社採用サイトに笑顔の写真が掲載 ● 次男が爆誕(おめでとう!)

Slide 21

Slide 21 text

Mobility Technologies Co., 安齋 祐紀(@off2white) 主な呼ばれ方:あんざいさん ● タブレット端末のリーダー役 ● 電話配車室との連携やナビ周り ● Androidエンジニアとは一体…と悩む勢 松延 萌菜(@nb_matsu) 主な呼ばれ方:まつのぶさん ● エンジニア採用のリーダー ● 最近、スコッチブームがきている ● 視聴者を代弁する質問役

Slide 22

Slide 22 text

Mobility Technologies Co., アプリの 技術的な頑張りポイント

Slide 23

Slide 23 text

Mobility Technologies Co., 社内のSlackで募集しました

Slide 24

Slide 24 text

Mobility Technologies Co.,

Slide 25

Slide 25 text

Kioskアプリ、タクシーメーターとの通信、BLEロガーのFWアップデート 機能、WiFi-Direct + VpnServiceで後席タブレットの通信費⽤削減、 multi module、ステートマシン、Feature Flagsの導⼊、Fluxに挑戦して 失敗、signature権限でむりやりOSのアレコレを変える、決済機連携、 gRPC、SIM制限を回避するために分散ダウンロード、JCenter問題、リモ ートログ収集、地図SDKまわり、端末在庫の問題、複数アプリでソースを 共有しているキメラな構成、端末メーカーとやりとりして独⾃Broadcast ⾶ばしてもらう、画像データの形式でNV21とかNV12とかの判定とか変換、 普通のカーナビのルートとタクシーの乗務員さんが求めるルートが違う、 BLEロガーのキャラスタリスティックが新規追加される度に再ペアしなく ても検出する技術、⾳波ビーコン、AWS IoTのフォーク、etc..

Slide 26

Slide 26 text

Mobility Technologies Co., 今回は下記に絞ってお話しします ● Feature Flagsの導⼊ ● タクシーメーターとの通信と決済機連携 ● WiFi-Direct + VpnServiceで後席タブレットの通信費⽤削減

Slide 27

Slide 27 text

Feature Flagsの導⼊

Slide 28

Slide 28 text

Mobility Technologies Co., ● メンバーが多いこともあり、プルリクのコンフリクトが発⽣ ● releaseブランチとのコンフリクトも多発 ● しかし、開発途中の機能をmasterブランチにマージは避けたい ○ 開発途中のものが世に出てしまう可能性 Feature Flags導⼊の理由と効果 ● Feature Flagsを参照して、デフォルトでは動作しないように実装 ● ⼩さくこまめにmasterへマージし、コンフリクトはほぼゼロに

Slide 29

Slide 29 text

Mobility Technologies Co., // 開発中機能のON/OFFチェッカー interface AvailableExperimentsChecker { fun isEnabled(feature: ExperimentalFeature): Boolean } // 開発中かつ、明示的にON/OFFを切り替えるべき機能の一覧 enum ExperimentalFeature { NEW_FUNCTION } Feature Flagsとは

Slide 30

Slide 30 text

Mobility Technologies Co., HyperionでON/OFFを切り替え NEW_FUNCTION

Slide 31

Slide 31 text

雑談︓ Feature Flagsについて

Slide 32

Slide 32 text

タクシーメーターとの通信

Slide 33

Slide 33 text

What is タクシーメーター︖

Slide 34

Slide 34 text

Mobility Technologies Co., BLEロガー What is タクシーメーター︖ BLE 34 タクシーメーター 乗務員端末 決済機

Slide 35

Slide 35 text

Mobility Technologies Co., 決済機 乗務員端末 BLEロガー What is タクシーメーター︖ BLE 35 タクシーメーター

Slide 36

Slide 36 text

Mobility Technologies Co., What is タクシーメーター︖ ざっくりいうと計量器 ■ 運賃計算 ■ 営業状態管理 ■ バックオフィス作業 タクシー業務システムの中核

Slide 37

Slide 37 text

Mobility Technologies Co., 誤⾃宅の様⼦

Slide 38

Slide 38 text

メーターとのコミュニケーション

Slide 39

Slide 39 text

Mobility Technologies Co., 決済機 BLEロガー メーターとのコミュニケーション BLE 39 タクシーメーター 乗務員端末

Slide 40

Slide 40 text

Mobility Technologies Co., 決済機 BLEロガー メーターとのコミュニケーション BLE 40 タクシーメーター 乗務員端末 ● メーターを抽象化 ● BLEでコミュニケーション ● シリアル通信

Slide 41

Slide 41 text

⼀般的なAndroider⽈く シリアル通信のクセがすごい...!!!

Slide 42

Slide 42 text

Mobility Technologies Co., メーターとのコミュニケーション No パラメーター バイト数 型 備考 1 パラメーター1 1 BCD 00︓営業状態A 01:営業状態B 02:営業状態C 03:営業状態D 04:営業状態E 05:− 06:− 07:営業状態F 08:営業状態G ※ビッグエンディアン 2 パラメーター2 1 HEX 16進で8桁 3 パラメーター3 1 ASCII 7桁 番号 ※リトルエンディアン Android開発者とっては⼀般的なI/F仕様書の例

Slide 43

Slide 43 text

Mobility Technologies Co., メーターとのコミュニケーション No パラメーター バイト数 型 備考 1 パラメーター1 1 BCD 00︓営業状態A 01:営業状態B 02:営業状態C 03:営業状態D 04:営業状態E 05:− 06:− 07:営業状態F 08:営業状態G ※ビッグエンディアン 2 パラメーター2 1 HEX 16進で8桁 3 パラメーター3 1 ASCII 7桁 番号 ※リトルエンディアン Android開発者とっては⼀般的なI/F仕様書の例 BCD

Slide 44

Slide 44 text

Mobility Technologies Co., ⼆進化⼗進表現のこと BCDとは︖ ⼗進数 BCD 3 0000_0011 12 0001_0010 0_ 3 1_ 2

Slide 45

Slide 45 text

Mobility Technologies Co., メーターとの通信 No パラメーター バイト数 型 備考 1 パラメーター1 1 BCD 00︓営業状態A 01:営業状態B 02:営業状態C 03:営業状態D 04:営業状態E 05:− 06:− 07:営業状態F 08:営業状態G ※ビックエンディアン 2 パラメーター2 1 HEX 16進で8桁 3 パラメーター3 1 ASCII 7桁 番号 ※リトルエンディアン とある仕様書の例 ※ビッグエンディアン

Slide 46

Slide 46 text

Mobility Technologies Co., ByteOrderとは︖ バイト配列、 Headから読むか︖ Tailから読むか︖

Slide 47

Slide 47 text

Mobility Technologies Co., ByteOrderとは︖ 0000_001 1 0000_001 1 0000_001 1 0000_001 1 リトルエンディアン ビックエンディアン

Slide 48

Slide 48 text

まさかKotlinで ビット演算することになるとは...

Slide 49

Slide 49 text

Mobility Technologies Co., BLEロガー メーターとの通信 BLE 49 タクシーメーター 乗務員端末 決済機

Slide 50

Slide 50 text

Mobility Technologies Co., BLEロガー メーターとの通信 BLE 50 タクシーメーター 乗務員端末 決済機 ● 控えの印刷 ● 決済の詳細情報

Slide 51

Slide 51 text

双⽅向通信

Slide 52

Slide 52 text

Mobility Technologies Co., BLEロガー 双⽅向の通信 BLE 52 タクシーメーター 乗務員端末 決済機 ● 控えの印刷 -> Shift JIS?? ● 決済の詳細情報

Slide 53

Slide 53 text

Mobility Technologies Co., ⽂字コードとは ■ エンコード ■ ⽂字集合

Slide 54

Slide 54 text

雑談︓ タクシーメーターとの通信

Slide 55

Slide 55 text

WiFi-Direct + VpnServiceで 後席タブレットの通信費⽤削減

Slide 56

Slide 56 text

Mobility Technologies Co., 56 タクシー⾞内の機器(システム構成の⼀例) Wi-Fi Direct Taxi Meter Taxi Printer 後部座席 タブレット 乗務員端末 決済機 外部デバイス ⾞両信号 DRIVE CHART BLEロガー AWS IoT 4G

Slide 57

Slide 57 text

Mobility Technologies Co.,

Slide 58

Slide 58 text

Mobility Technologies Co.,

Slide 59

Slide 59 text

WiFi Direct 全体図 VpnService SIM有 SIM無 Socket

Slide 60

Slide 60 text

HTTPってどうやって動いてるの?🙄 問題1

Slide 61

Slide 61 text

そもそもHTTPの仕組みを知らない → 流れてくるbyteデータを解釈できない → Packetに分割できない (例)WiFi Directで受け取った829byteに 何個のPacketデータが入ってる? 問題1

Slide 62

Slide 62 text

VpnService Packetが丸ごと届く JavaのSocket通信 PacketのHeaderが除かれて届く 問題2

Slide 63

Slide 63 text

VpnService vs Socket VpnService IP Packet IP Header TCP Header TCP Payload

Slide 64

Slide 64 text

VpnService vs Socket Socket TCP Payload

Slide 65

Slide 65 text

JavaのSocketはHeaderの処理を 内部で行ってくれる VpnServiceはHeaderも含め、すべての Packetを入出力する → 無いものは作るしかない Headerが無い

Slide 66

Slide 66 text

VpnService SIM無 WiFi Direct IP Header TCP Header TCP Payload IP Header TCP Header TCP Payload

Slide 67

Slide 67 text

WiFi Direct SIM有 IP Header TCP Header TCP Payload TCP Payload Socket

Slide 68

Slide 68 text

WiFi Direct IP Header TCP Header TCP Payload IP Header TCP Header TCP Payload Socket TCP Payload

Slide 69

Slide 69 text

VpnService SIM無 WiFi Direct IP Header TCP Header TCP Payload IP Header TCP Header TCP Payload

Slide 70

Slide 70 text

よっしゃ、もう完成したね?😙

Slide 71

Slide 71 text

HTTP通信、パケット、Socket、IPヘッダー、チェックサム、DNS、 UDP、TCP、3 way handshake、SYN、ACK、応答確認、Sequence Number、Acknowledgement Number、1の補数、擬似ヘッダー、MTU 設定、Window Size、IPv4、IPv6、Socketのゾンビ化問題、etc..

Slide 72

Slide 72 text

雑談︓ WiFi-Direct + VpnServiceで 後席タブレットの通信費⽤削減

Slide 73

Slide 73 text

Mobility Technologies Co., ⾞載システムグループの 推しポイント

Slide 74

Slide 74 text

Mobility Technologies Co., ● Android的に新しい技術をどんどん取り⼊れるので ⾃然とスキルアップしていくよ(皆んな教えたがりだよ) ● 専⽤のAndroid端末作っているよ ○ 後席タブレット、乗務員タブレット、乗務員スマホ ● 最近やった、普通のAndroidアプリではやらないことはな〜に︖ ● アプリ統合の話 ● PdM(プロダクトマネージャー)との関係性 ⾞載システムグループの推しポイント(TOP5)

Slide 75

Slide 75 text

Mobility Technologies Co., ● Android的に新しい技術をどんどん取り⼊れるので ⾃然とスキルアップしていくよ(皆んな教えたがりだよ) ● 専⽤のAndroid端末作っているよ ○ 後席タブレット、乗務員タブレット、乗務員スマホ ● 最近やった、普通のAndroidアプリではやらないことはな〜に︖ ● アプリ統合の話 ● PdM(プロダクトマネージャー)との関係性 ⾞載システムグループの推しポイント(TOP5)

Slide 76

Slide 76 text

Mobility Technologies Co., ● Android的に新しい技術をどんどん取り⼊れるので ⾃然とスキルアップしていくよ(皆んな教えたがりだよ) ● 専⽤のAndroid端末作っているよ ○ 後席タブレット, 乗務員タブレット, 乗務員スマホ ● 最近やった、普通のAndroidアプリではやらないことはな〜に︖ ● アプリ統合の話 ● PdM(プロダクトマネージャー)との関係性 ⾞載システムグループの推しポイント(TOP5)

Slide 77

Slide 77 text

Mobility Technologies Co., 普通のAndroidエンジニアが受けた、数々のカルチャーショック

Slide 78

Slide 78 text

採⽤情報︓ https://hrmos.co/pages/mo-t/jobs アンケート回答にご協⼒お願いいたします→ ※回答頂いた⽅の中から、抽選でGOクーポン¥2,000プレゼント︕ ご視聴ありがとうございました 次回予告︓ Vol.3 多彩な機能を実現しているiOSアプリの開発現場