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
360
ドキュメントから 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
7k
2024年にチャレンジしたことを振り返るぞ
mitchan
0
290
DroidKaigi初めて登壇したレポ
mitchan
1
230
実践!難読化ガイド
mitchan
0
3.7k
「実践!難読化ガイド」事前予告編
mitchan
0
300
画面遷移 〜iOSとAndroid〜
mitchan
0
370
パソコン音痴な私がモバイル開発界隈でぬくぬく成長している理由
mitchan
0
560
2024年は難読化と仲良くなりたい
mitchan
0
410
Other Decks in Programming
See All in Programming
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
550
PHPのバージョンアップ時にも役立ったAST(2026年版)
matsuo_atsushi
0
250
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
420
20260320登壇資料
pharct
0
120
Reactive ❤️ Loom: A Forbidden Love Story
franz1981
2
170
OTP を自動で入力する裏技
megabitsenmzq
0
130
我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026
shogogg
2
520
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
1k
条件判定に名前、つけてますか? #phperkaigi #c
77web
2
810
Mastering Event Sourcing: Your Parents Holidayed in Yugoslavia
super_marek
0
110
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
400
ネイティブアプリとWebフロントエンドのAPI通信ラッパーにおける共通化の勘所
suguruooki
0
190
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
So, you think you're a good person
axbom
PRO
2
2k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
230
The Curse of the Amulet
leimatthew05
1
10k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Discover your Explorer Soul
emna__ayadi
2
1.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Bash Introduction
62gerente
615
210k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Building Adaptive Systems
keathley
44
3k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.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コマンドがデバイス上のデーモンで実行されることで色々実現できてる
おわり