この記事は『Firefox OS / B2G OS Advent Calendar 2016』 19日目の記事です。
Firefox OS で、使用されている「ADB Helper」を再度まとめ直してみました。
目次
前回、新訳:ADB Helperをハックしてみた(scanner.js)に引き続き、
adb-helperをハックしていきたいと思います
フォルダ内のファイル構成
main.js
○
○
○
adb.js
○
○
○
adb-client.js
○
○
○
adb-running-checker.js
○
○
○
adb-socket.js
○
○
○
bootstrap.js
○
○
○
scanner.js
○
○
○
device.js
※1
※1
※1
devtools-import.js
※1
※1
※1
devtools-require.js
※1
※1
※1
fastboot.js
※1
※1
※1
subprocess.js
※2
※2
※2
subprocess_worker_win.js
※3
※3
※3
※2 : version 0.7.1 時点で有ったファイル
※3 : version 0.7.1 時点で有ったファイル、Windows用ファイル
※4 : version 0.7.1 時点で有ったファイル、mac,linux用ファイル
OS毎に使用されるファイルが有る事が確認できます。
device.js
前回に引き続き、device.js ファイルをハックしていきたいと思います。
ご覧の通り、各OSでの差異はありません。
2014.11.06 時点では、このファイルは存在していませんでした。
モジュールは下図の通りです
予備知識
Android 版 Firefox のリモートデバッグ
https://developer.mozilla.org/ja/docs/Tools/Remote_Debugging/Firefox_for_Android
getprop ‐ 通信用語の基礎知識http://www.wdic.org/w/TECH/getprop
adb shell getprop
http://adbshell.com/commands/adb-shell-getprop
Promise
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise
モジュール構成
上記予備知識をもとにハックしていきます!
ファイル位置
処理概要
1 ~ 9 行目
- ConnectionManager に connection-manager 読み込み
- 定数:adb にライブラリ、adb.js 読み込み
10 ~ 21 行目
Device() 関数
Device() 関数
23 ~ 73 行目
Device オブジェクト
Device オブジェクト
- コメント
これがFirefox OS を接続する具体的な方法です。
他の種類の機器を使用する場合、一般的かつ直接的に forwardPort します。 - connect() 関数
- shell() 関数
- forwardPort() 関数
- push() 関数
- pull() 関数
- reboot() 関数
- rebootRecovery() 関数
- rebootBootloader() 関数
- isRoot() 関数
- summonRoot() 関数
- getModel() 関数
関数名
処理概要
connect() 関数
- getFreeTCPPort() 関数で、変数:port に代入します。
- 上記変数を用いて、ローカル用変数を定義します。
- デバッグ用変数:remote を
localfilesystem:/data/local/debugger-socket を用いて定義します。 - adb.js の forwardPort() 関数 に上記変数を割り当てて実行します。
shell() 関数
- adb.js の shell() 関数 をバインドします。
forwardPort() 関数
- adb.js の forwardPort() 関数 をバインドします。
push() 関数
- adb.js の push() 関数 をバインドします。
pull() 関数
- adb.js の pull() 関数 をバインドします。
reboot() 関数
- adb.js の reboot() 関数 をバインドします。
rebootRecovery() 関数
- adb.js の rebootRecovery() 関数 をバインドします。
rebootRecovery() 関数
- adb.js の rebootRecovery() 関数 をバインドします。
rebootBootloader() 関数
- adb.js の rebootBootloader() 関数 をバインドします。
isRoot() 関数
- adb.js の shell() 関数 を実行します。
- 実行結果:stdout = true の時は、0 を返します
- 上記以外の時は、 false を返します。
summonRoot() 関数
- adb.js の root() 関数 を実行します。
getModel() 関数
- 該当モデル同期処理:_modelPromise = true の時は、
_modelPromise を返します - 上記以外の時は、 adb シェル getprop 関数を実行し、
_modelPromise を返します。
今回のまとめ
今回は、デバイスをスキャン,検出した時のモジュールをハックしました。
次回は、devtools-import.js をハックする予定です。
関連記事
- 新訳:ADB Helperをハックしてみた(前篇)
- 新訳:ADB Helperをハックしてみた(install.rdf,main.js)
- 新訳:ADB Helperをハックしてみた(adb.js)
- 新訳:ADB Helperをハックしてみた(adb-client.js)
- 新訳:ADB Helperをハックしてみた(adb-running-checker.js)
- 新訳:ADB Helperをハックしてみた(adb-socket.js)
- 新訳:ADB Helperをハックしてみた(bootstrap.js)
- 新訳:ADB Helperをハックしてみた(scanner.js)
今年のAdvent Calendar
去年のAdvent Calendar