新訳: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ファイル群 ]
windows
mac
linux

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 時点で有ったファイル、mac,linux用ファイル

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

Add a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です