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
350
ドキュメントから 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 みっちゃん
Do you use git worktree?
mitchan
0
100
Android値受け渡し大全 〜 設計を制する者が「渡す」を制す 〜
mitchan
1
6.9k
2024年にチャレンジしたことを振り返るぞ
mitchan
0
290
DroidKaigi初めて登壇したレポ
mitchan
1
220
実践!難読化ガイド
mitchan
0
3.7k
「実践!難読化ガイド」事前予告編
mitchan
0
300
画面遷移 〜iOSとAndroid〜
mitchan
0
360
パソコン音痴な私がモバイル開発界隈でぬくぬく成長している理由
mitchan
0
560
2024年は難読化と仲良くなりたい
mitchan
0
410
Other Decks in Programming
See All in Programming
Premier Disciplin for Micro Frontends Multi Version/ Framework Scenarios @OOP 2026, Munic
manfredsteyer
PRO
0
210
AIに任せる範囲を安全に広げるためにやっていること
fukucheee
0
110
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
170
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
120
AIプロダクト時代のQAエンジニアに求められること
imtnd
2
700
エラーログのマスキングの仕組みづくりに役立ったASTの話
kumoichi
0
110
Ruby x Terminal
a_matsuda
7
580
encoding/json/v2のUnmarshalはこう変わった:内部実装で見る設計改善
kurakura0916
0
310
今更考える「単一責任原則」 / Thinking about the Single Responsibility Principle
tooppoo
3
1.4k
RubyとGoでゼロから作る証券システム: 高信頼性が求められるシステムのコードの外側にある設計と運用のリアル
free_world21
0
210
CSC307 Lecture 12
javiergs
PRO
0
460
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
480
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
432
66k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
220
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
Embracing the Ebb and Flow
colly
88
5k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
190
How GitHub (no longer) Works
holman
316
140k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
400
A Tale of Four Properties
chriscoyier
162
24k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
140
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コマンドがデバイス上のデーモンで実行されることで色々実現できてる
おわり