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
310
ドキュメントから 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
230
DroidKaigi初めて登壇したレポ
mitchan
1
170
実践!難読化ガイド
mitchan
0
2.8k
「実践!難読化ガイド」事前予告編
mitchan
0
270
画面遷移 〜iOSとAndroid〜
mitchan
0
210
パソコン音痴な私がモバイル開発界隈でぬくぬく成長している理由
mitchan
0
480
2024年は難読化と仲良くなりたい
mitchan
0
370
STORES二年生が得た新しい視点
mitchan
0
290
TabLayoutの「選択されていないインジケーター」にも色を付けるには
mitchan
0
93
Other Decks in Programming
See All in Programming
#QiitaBash TDDで(自分の)開発がどう変わったか
ryosukedtomita
1
350
AIコーディングエージェント全社導入とセキュリティ対策
hikaruegashira
16
9.5k
Terraform やるなら公式スタイルガイドを読もう 〜重要項目 10選〜
hiyanger
12
3k
PHPUnitの限界をPlaywrightで補完するテストアプローチ
yuzneri
0
390
大規模FlutterプロジェクトのCI実行時間を約8割削減した話
teamlab
PRO
0
450
ゲームの物理
fadis
3
900
Nuances on Kubernetes - RubyConf Taiwan 2025
envek
0
120
マイコンでもRustのtestがしたい その2/KernelVM Tokyo 18
tnishinaga
2
1.7k
Vibe Codingの幻想を超えて-生成AIを現場で使えるようにするまでの泥臭い話.ai
fumiyakume
21
10k
Claude Code で Astro blog を Pages から Workers へ移行してみた
codehex
0
180
なぜ今、Terraformの本を書いたのか? - 著者陣に聞く!『Terraformではじめる実践IaC』登壇資料
fufuhu
4
520
Amazon Q CLI開発で学んだAIコーディングツールの使い方
licux
3
180
Featured
See All Featured
The Invisible Side of Design
smashingmag
301
51k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Scaling GitHub
holman
461
140k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Six Lessons from altMBA
skipperchong
28
3.9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
A Modern Web Designer's Workflow
chriscoyier
695
190k
Writing Fast Ruby
sferik
628
62k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
283
13k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
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コマンドがデバイス上のデーモンで実行されることで色々実現できてる
おわり