この記事は『Firefox OS / B2G OS Advent Calendar 2016』 13日目の記事です。
Firefox OS で、使用されている「ADB Helper」を再度まとめ直してみました。
目次
前回、新訳:ADB Helperをハックしてみた(adb.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毎に使用されるファイルが有る事が確認できます。
adb-client.js
前回に引き続き、adb-client.js ファイルからハックしていきたいと思います。
ご覧の通り、各OSでの差異はありません。
2014.11.06 時点から、かなりバージョンアップしているのが分かります。
モジュールは下図の通りです
予備知識
Services.jsmhttps://developer.mozilla.org/ja/docs/Mozilla/JavaScript_code_modules/Services.jsm
http://moz-addon.g.hatena.ne.jp/teramako/20110426/1303822497
JavaScript If文の復習と、三項演算子
http://bit.ly/11s95Gw
モジュール構成
上記予備知識をもとにハックしていきます!
関数名
処理概要
getBuffer() 関数
- コメント
buffer を返します。Gecko バージョンの差異がある時 - buffer を返します。
unpackPacket() 関数
- 関数:getBuffer() を用いて、変数:buffer を定義します。
- buffer = 4バイトかつ aIgnoreResponse = falseの時、
JSON データ { length: 0, data: "" } を返します。 - 上記以外の時、以降の処理を実行します。
- 変数:lengthView を Uint8Array で定義します。
- 変数:decoder を TextDecoder で定義します。
- 変数:length に decoder を parseInt して取得します。
- 変数:text に buffer, length を用いて、Uint8Array で定義します。
- JSON データ { length: length, data: decoder.decode(text) }; を返します。
checkResponse() 関数
- コメント
レスポンスをチェックします。デフォルトは、定数:OKAY - 関数:getBuffer() を用いて、変数:buffer を定義します。
- 配列変数:view を buffer を用いて初期化、 Uint32Array で定義します。
- 配列変数:view[0] = 定数:FAIL の場合、ログ出力します。
- 配列変数:view[0] に 定数:OKAY をセットし、返します。
createRequest() 関数
- 関数:getBuffer() を用いて、変数:buffer を定義します。
- 引数:aCommand を 大文字変換し、変数:length へ格納します。
- 変数:length の長さが 4 バイトになるまで、0 を付加します。
- 変数:encoder を TextEncoder で定義します。
- 変数:length に 引数:aCommand 付加します。
- 上記変数をエンコードしたものを返します。
close() 関数
- ソケットを close します。
client オブジェクト定義
- getBuffer 関数定義
- unpackPacket 関数定義
- checkResponse 関数定義
- createRequest 関数定義
- connect 関数定義
- close 関数定義
今回のまとめ
adb のクライアント側を制御する為のモジュールをハックしました。上記モジュールが adb.js などで、exports されて使用できるようになります。
次回は、adb-running-checker.js をハックする予定です。
関連記事
今年のAdvent Calendar
去年のAdvent Calendar