らいふうっどの閑話休題

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

新訳:ADB Helperをハックしてみた(device.js)

この記事は『Firefox OS / B2G OS Advent Calendar 2016』 19日目の記事です。
Firefox OS で、使用されている「ADB Helper」を再度まとめ直してみました。

目次

 

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

  1. フォルダ内のファイル構成
  2. device.js
  3. 予備知識
  4. モジュール構成
  5. 今回のまとめ
  6. 関連記事
  7. 今年のAdvent Calendar
フォルダ内のファイル構成
  [ 解凍フォルダ内のjsファイル群 ]
install.rdf
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
subprocess_worker_unix.js
※4
※4
※4
  ※1 : version 0.7.1 時点では無かったファイル
※2 : version 0.7.1 時点で有ったファイル
※3 : version 0.7.1 時点で有ったファイル、Windows用ファイル
※4 : version 0.7.1 時点で有ったファイル、maclinux用ファイル

OS毎に使用されるファイルが有る事が確認できます。


device.js
  前回に引き続き、device.js ファイルをハックしていきたいと思います。   ご覧の通り、各OSでの差異はありません。 2014.11.06 時点では、このファイルは存在していませんでした。 モジュールは下図の通りです



モジュール構成
  上記予備知識をもとにハックしていきます!
ファイル位置
処理概要
1 ~ 9 行目
  • ConnectionManager に connection-manager 読み込み
  • 定数:adb にライブラリ、adb.js 読み込み
10 ~ 21 行目
Device() 関数
  • コメント
    新しいデバイスが接続された通知を受けた時
    新しいデバイス用のインスタンスが生成されます。
    何か変化があった時、互換性を試すべきです。
    新しいデバイス用のインスタンスが生成されます。
    他のアドオン,ツールアダプターのようにこれらの
    これらの Low レベルデバイスオブジェクトに使用されます。
  • バイス ID を格納します。
23 ~ 73 行目
Device オブジェクト
  • コメント
    これがFirefox OS を接続する具体的な方法です。
    他の種類の機器を使用する場合、一般的かつ直接的に forwardPort します。
  • connect() 関数
  • shell() 関数
  • forwardPort() 関数
  • push() 関数
  • pull() 関数
  • reboot() 関数
  • rebootRecovery() 関数
  • rebootBootloader() 関数
  • isRoot() 関数
  • summonRoot() 関数
  • getModel() 関数
  Device オブジェクトが、かなりのボリュームなので、下表にまとめました。
関数名
処理概要
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 をハックする予定です。


関連記事


今年のAdvent Calendar


去年のAdvent Calendar