らいふうっどの閑話休題

興味のあることをゆる~く書いていく

ADB Helperをハックしてみた(adb-client.js篇)

目次

前回:ADB Helperをハックしてみた(adb.js篇)に引き続き、 adb-helperをハックしていきたいと思います

  1. フォルダ内のファイル構成
  2. 予備知識
  3. adb-client.js
  4. 今回のまとめ

フォルダ内のファイル構成
[解凍フォルダ内のjsファイル群]
windowsmaclinux
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-client-compare
モジュールは、adb.js比べてたら少しですね・・・・(^^;;;
スクリーンショット 2014-11-27 22.51.16

コメントには、このように記載されています。
A module to track device changes Mostly from original adb.js
【訳文】
機器変化を追跡するモジュールです。
主に『adb.js』からの追跡になります。

  1. 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配列を変数に代入する
     ⑤①~④を返します。
  2. 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を判定します。
  3. 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をエンコードして、返します。

  4. function close()  [処理]-----------------------------------------------  ソケットオブジェクトを切断します。
  5. 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
グンマー@坊主五厘

追伸
何か間違いが有った場合は、ご指摘ください。