Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ドキュメントから adbコマンドの仕組みを読み解く
Search
みっちゃん
March 20, 2024
Programming
1
280
ドキュメントから adbコマンドの仕組みを読み解く
[International Women's Day 2024 in Kyoto](
https://gdgkyoto.connpass.com/event/311024/)での登壇
みっちゃん
March 20, 2024
Tweet
Share
More Decks by みっちゃん
See All by みっちゃん
2024年にチャレンジしたことを振り返るぞ
mitchan
0
200
DroidKaigi初めて登壇したレポ
mitchan
1
140
実践!難読化ガイド
mitchan
0
2.3k
「実践!難読化ガイド」事前予告編
mitchan
0
240
画面遷移 〜iOSとAndroid〜
mitchan
0
120
パソコン音痴な私がモバイル開発界隈でぬくぬく成長している理由
mitchan
0
410
2024年は難読化と仲良くなりたい
mitchan
0
350
STORES二年生が得た新しい視点
mitchan
0
270
TabLayoutの「選択されていないインジケーター」にも色を付けるには
mitchan
0
82
Other Decks in Programming
See All in Programming
複数ドメインに散らばってしまった画像…! 運用中のPHPアプリに後からCDNを導入する…!
suguruooki
0
430
小さく段階的リリースすることで深夜メンテを回避する
mkmk884
2
130
イベントソーシングによってインピーダンスミスマッチから解放された話
tkawae
1
330
OUPC2024 Day 1 解説
kowerkoint
0
390
Go1.24で testing.B.Loopが爆誕
kuro_kurorrr
0
150
RubyKaigiで手に入れた HHKB Studioのための HIDRawドライバ
iberianpig
0
1k
Kubernetesで実現できるPlatform Engineering の現在地
nwiizo
2
1.7k
令和トラベルにおけるコンテンツ生成AIアプリケーション開発の実践
ippo012
1
260
Develop Faster With FrankenPHP
dunglas
2
2.3k
S3静的ホスティング+Next.js静的エクスポート で格安webアプリ構築
iharuoru
0
190
ニックトレイン登壇資料
ryotakurokawa
0
140
remix + cloudflare workers (DO) docker上でいい感じに開発する
yoshidatomoaki
0
120
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
22
2.6k
Gamification - CAS2011
davidbonilla
81
5.2k
Scaling GitHub
holman
459
140k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Building Adaptive Systems
keathley
41
2.5k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.4k
The Invisible Side of Design
smashingmag
299
50k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.2k
Git: the NoSQL Database
bkeepers
PRO
429
65k
Transcript
ドキュメントから adbコマンドの仕組みを読み解く 登壇者:STORES 決済 Androidチーム みっちゃん 1
自己紹介 名前:みっちゃん 所属:STORES 決済 Androidチーム ナワバリ:おおさか X(Twitter): @mimimi_engineer 2
公式ドキュメントを読んでみましょう。 adbコマンドってなに 3
adbコマンドってなに adbというコマンドを通して Androidデバイスに色々させることができるよ!
adbコマンドでできること アプリインストール アプリのファイル(APK)をインストールすることができる サッと手元でインストールして確認したい時に便利
adbコマンドでできること 文字入力 例えばメールアドレス入力欄を実装し、その動作確認を行いたい場合 毎回デバイスにメールアドレスを打ち込むのは面倒 このコマンドを叩くと、デバイス上で文字入力を再現してくれる
adbコマンドでできること 充電・給電状態を制御できる デバイスの充電が20%以下になった時アラートダイアログを出す などの機能の動作確認を行いたい時に便利
adbコマンドでできること 充電・給電状態を制御できる 給電していない状態もコマンドで再現させることができる
adbコマンドでできること 充電・給電状態を制御できる 色々いじって楽しくなっちゃったあとは元に戻しておきましょう
adbコマンドの仕組み ざっくり登場人物を把握しよう
adbコマンドの仕組み ざっくり登場人物を把握しよう
adbコマンドの仕組み ざっくり登場人物を把握しよう • 開発マシン:adbコマンドを実行するパソコンのこと • コマンドライン・ターミナル:adbコマンドをかくところ、開発マシン上にある • デバイス:実機Android端末やエミュレータのこと • クライアント:コマンドをサーバーに送信するやつ、開発マシン上にある
• サーバー:クライアントから送られてきたadbコマンドを各デバイス上のデーモンに送る • デーモン:開発マシンから送られてきたコマンドをデバイス上で実行するためにあるやつ
None
一旦このざっくりとした登場人物と流れを 頭に入れた状態で、さらに詳しく adbの動作原理にdeep diveしてみましょう!
TCP/IP通信 結論からいうと、adbコマンドの仕組みの正体は TCP/IP通信 です。 TCP/IPはネットワーク通信の規格の一つ • データの送り元と送り先それぞれにポートが必要 • サービスによって使うポート番号が決まっている
データの送り元と送り先それぞれにポートが必要 ポート: 通信によって送られてきたデータが ネットワークからコンピュータにお邪魔する際に通るドアのようなもの ポート番号: ドア(ポート)はコンピュータの中にいっぱいある 各ドアには ポート番号 という番号が与えられていて、 通信相手となるコンピュータを一意に識別するためにある
サービスによって使うポート番号が決まっている 例えば、、 http通信の場合は80番のポート, httpsの場合は443番のポート, sshの場合は22番のポート TCP/IPの中でもさらにどのサービスを使った通信なのかによって 使用されるポート番号は決まっている。
How adb worksを読み解いていく adbの仕組みはTCP/IPであることを念頭におきつつ ドキュメントのHow adb worksを読んでいく!!
How adb worksを読み解いていく
How adb worksを読み解いていく adbの通信の場合、サーバは 5037番のポートを使うと決まっている!
How adb worksを読み解いていく adbコマンドによって起動されたクライアントは 5037番のポートが他の誰かに使われてないかな〜と確認し 誰も使ってなかったらadbサーバを起動するよ!
How adb worksを読み解いていく
How adb worksを読み解いていく 5037番のポートがadbコマンドを送る対象となる 全ての実機デバイスやエミュレータを一意に認識できるように それぞれの実機デバイスやエミュレータに 固有のポート番号が割り当てられるよ!
How adb worksを読み解いていく 特にエミュレータの場合は 5555番から5585番の範囲で奇数番号のポートを使って 識別すると決まっているよ!!
How adb worksを読み解いていく デバイスを全てポート番号によって区別・認識することで 特定のデバイスにのみadbコマンドを送信するということができる
adbコマンド自体は実はデバイス上で実行されていない ドキュメントの冒頭を改めて読み直してみる
adbコマンド自体は実はデバイス上で実行されていない 超意訳すると、 adbコマンドはshellコマンドに変換されてデバイス上で実行されるんだぜ と言っている
本当かよ?
adbコマンド自体は実はデバイス上で実行されていない? ステータスバーを隠して全画面表示にするコマンド ステータスバーというのは充電とかwi-fiとかBluetoothのマークが表示されているところ
adbコマンド自体は実はデバイス上で実行されていない? このコマンドにshellと入っているのがわかりますね。
adbコマンド自体は実はデバイス上で実行されていない? 「ステータスバーを隠せ」という内容のshellコマンドを実行してくださいと adbサーバーにお願いするコマンド つまり、、 サーバーがadbコマンドを受け取り、shellコマンドに変換してデバイスに送る 送られてきたshellコマンドをデバイス内のデーモンが受け取り実行
もう一度全体をみる
まとめ • adbコマンドの仕組みの原理はTCP/IP通信 • adbコマンドがadbサーバーにてshellコマンドに変換される • shellコマンドがデバイス上のデーモンで実行されることで色々実現できてる
おわり