Garmin Connect IQ-コマンドラインでのビルド・シミュレーター起動でビルドとシミュレーターコマンドラインの起動が分かり、その後WPFのオートメーションで、シミュレーターのプログラムでの動作がなんとなくわかってきたので、とりあえず簡単なライブラリ群を作ってみた。
クラスの構成としては、以下のよう感じ。
- Connect IQのSDK用クラス
- monkey.jungleを読み込みプロジェクト情報を解析するクラス
- シミュレーターを操作するクラス
- 上の1~3をまとめて、簡単にビルド&シミュレーターを実行するクラス
プログラムはC#で記述したのだが、nuget用のパッケージ化を行い、C#以外PowerShellからも呼び出しができるようにしてみた。
PowerShellのスクリプトは以下のような感じ。
#
# Script.ps1
#
using namespace AutomationConnectIQ.Lib;
# チェック用オブジェクトを生成
# パラメータは、デベロッパーキーとモンキープロジェクトファイル
$check = New-Object Checker -Property @{
Key = "H:\Develop\Garmin\key\developer_key"
Project = "H:\Develop\eclipse-workspace\Test\monkey.jungle"
}
# fr45でビルドチェック処理を実行
# シミュレーション処理はdelegate bool Simulation(string device, Simulator sim) となっている
# のでそれに合わせてPowerShellのラムダ式にしてある
$check.Check("fr45", {
#デバイス名とシミュレーターオブジェクトをパラメータで受け取る
Param($device, $simulator)
# GPS座標を、日本・皇居に設定
$simulator.SetGPSPosition(35.685233, 139.752485)
# 時間ウィンドウを開いて、言語を英語にしてから所定時間に変更する
$time = $simulator.CreateTime()
$time.Open()
$time.Time = Get-Date "2020-1-1 13:00:00"
$simulator.SetLanguage([Simulator+Language]::English)
$time.Action([TimeSimulator+ExecuteType]::Start)
sleep -Milliseconds 500 # 時間シミュレーションを開始直後、画面が更新されるまで待つ
# 画面をキャプチャー
$bitmap = $simulator.Capture()
$bitmap.Save($device+".png")
$time.Close()
$true # 処理継続のためtrueを返す。これはデバイス名が指定されていない場合の連続処理と同じdelegateを採用しているためのおまじない
})
AutomationConnectIQ.Lib.Checkerが統合したクラスで、そこにデベロッパーキーファイルとmonkey.jungleを渡し、$check.Checkでビルドとチェックを実施するような感じになる。
今回のスクリプトは、GPS座標の設定を行った後、時間を2020/1/1 13:00:00に設定しその時の画面の状態をキャプチャーするといった感じのも。
デバイス名はfr45を指定しているが、デバイス名の指定をしない場合は、monkey.jungle内に設定されているデバイスすべてに対して、上のシミュレーション処理を行うような感じになっている。
エクリプスでの確認だと、デバイス名の指定が面倒なのと、対処としているデバイスの表示が正しいかどうかの確認がとても面倒なので、これで、確認も容易になるといいかなと思う。
あと、プログラム修正時のデグレード評価も、画面キャプチャ―が可能なので、画面比較でのチェックが可能になるかもしれない。
今回の件で、nugetパッケージの作成、PowerShellでのC#ライブラリの呼び出しなど、いろいろ勉強になった。
ライブラリは.Net 5.0で作成して動作はPowerShell 7.1で確認している。
コメント