目次
前回:ADB Helperをハックしてみた(adb.js篇)に引き続き、 adb-helperをハックしていきたいと思います
フォルダ内のファイル構成
windows | mac | linux | |
---|---|---|---|
install.rdf | ○ | ○ | ○ |
main.js | ○ | ○ | ○ |
adb.js | ○ | ○ | ○ |
adb-client.js | ○ | ○ | ○ |
adb-running-checker.js | ○ | ○ | ○ |
adb-socket.js | ○ | ○ | ○ |
bootstrap.js | ○ | ○ | ○ |
scanner.js | ○ | ○ | ○ |
subprocess.js | ○ | ○ | ○ |
subprocess_worker_unix.js | - | ○ | ○ |
subprocess_worker_win.js | ○ | - | - |
前回に引き続き、adb-client.jsファイルをハックしていきたいと思います。
予備知識
Services.jsm
https://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
adb-client.js
ご覧の通り、各OSでの差異はありません。
モジュールは、adb.js比べてたら少しですね・・・・(^^;;;
コメントには、このように記載されています。
A module to track device changes
Mostly from original adb.js
【訳文】
機器変化を追跡するモジュールです。
主に『adb.js』からの追跡になります。
-
function unpackPacket(aPacket, aIgnoreResponse)
[処理]-----------------------------------------------
・OLD_SOCKET_APIを定義します
⇒ブラウザのバージョン情報:23.0a1以下
三項演算子で以下の項目を比較します。
OLD_SOCKET_APIか否かで、パラメータ:aPacketか
パラメータ:aPacket.bufferを変数bufferにセットします。
buffer.byteLengthとパラメータ:aIgnoreResponseを用いて
Packetがemptyかどうかを判断します。
①buffer, aIgnoreResponseを用いて、Uint8Array配列:lengthViewに代入します。
②文字列用デコーダーを定義します
③①,②を用いて、長さを取得します
④buffer, aIgnoreResponseを用いて、Uint8Array配列を変数に代入する
⑤①~④を返します。
-
function checkResponse(aPacket)
コメントには、このように記載されています。
Checks if the response is OKAY or FAIL.
【訳文】
response がOKAY か FAILをチェックします。
[処理]-----------------------------------------------
三項演算子で以下の項目を比較します。
OLD_SOCKET_APIか否かで、パラメータ:aPacketか
パラメータ:aPacket.bufferを変数bufferにセットします。
Uint32Array配列:viewにbufferを格納
view[0] の値で、OKAY か FAILを判定します。
-
function createRequest(aCommand)
コメントには、このように記載されています。
@param aCommand A protocol-level command as described in http://androidxref.com/4.0.4/xref/system/core/adb/OVERVIEW.TXT and http://androidxref.com/4.0.4/xref/system/core/adb/SERVICES.TXT @return A 8 bit typed array.
【訳文】
パラメータ:aCommand はプロトコルのレベルコマンドで下記URLに記載されています。
帰り値は、8 bitの配列です。
[処理]-----------------------------------------------
①パラメータ:aCommandの長さを大文字にして格納する
②エンコーダーを定義します。
③aCommandをエンコードして、返します。
- function close() [処理]----------------------------------------------- ソケットオブジェクトを切断します。
-
function connect()
[処理]-----------------------------------------------
①AdbSocketオブジェクトのインスタンスを定義します。
②上記オブジェクトをソケットに送り、値を返します。
③clientオブジェクトに下記関数を定義します
a.unpackPacket: unpackPacket,
b.checkResponse: checkResponse,
c.createRequest: createRequest,
d.connect: connect,
e.close: close
※a~eは上記解説のfunctionです。
このclientオブジェクトを参照できるようにする為に
module.exportsコマンドを使います。
今回のまとめ
今回は、adb.jsに比べたらかなり少なかったので早くまとめられたのかと思います。
1~5のfunctionをServices.jsmのコードモジュールを用いて
各XPCOMコンポーネントのエイリアスを提供するようです。
次回はadb-running-checker.jsファイルの中身をハックしていきたいと思います。
お暇な方、宜しかったら見て下さい。m(__)m
グンマー@坊主五厘
追伸
何か間違いが有った場合は、ご指摘ください。