Service用に限定された入出力関数を提供します。実行すると、以下のような構造が返ってきます。各マスのViewで256(16×16)個あります。Hierarchyにはこれ以外のViewも存在していますが、ここでは見えていません。黒く塗りつぶすマスは取得できましたが、ヒントとなる数字の部分については取得する事ができませんでした。文字を描画しているからだと思います。そのため、盤面情報の取得には別の方法を検討する必要があります。力技ですが、画面を文字認識できれば、ヒントとなる数字を取得することができるのではないかと考えました。以下のメソッドを実行すると、スクリーンショットを撮影することができます。performGlobalAction(GLOBAL_ACTION_TAKE_SCREENSHOT)撮影したスクリーンショットは、通常Screenshotsディレクトリに格納されます。撮影時刻がファイル名になっているため、ファイルリストの最後を取得すれば最新のスクリーンショットを手に入れることができます。イベントが来てから取得する必要があります。Recognizerを使いました。基本的には公式のドキュメント通りにセットアップすれば使うことができます。次に依存関係に追加します。'com.google.gms.google-services'最後に、AndroidManifestに使うモデルを宣言すればOKです。</application></manifest>今回解析したい文字は数字だけなので、無料&オンデバイスで動作します。スクリーンショットで撮影した文字は横向きになっているので、回転してから解析します。解析したヒントを元に、パズルの解探索へ}実際に使ってみると高い精度で数字を取得することができました。時々誤認識することがあるので、「A」を「4」にreplaceするなど泥臭いチューニングをしましたが、本題から逸れるので詳細は割愛します(同じ数字が連続すると1つにまとまってしまうことがあったりします)あとは数字以外にも、その列(行)が条件を満たしているかどうかを色で判定します。この判定はライブラリなどを使う必要はなく、特定の座標の色を取得して愚直に判定しました。今回解こうとしているパズルは、最初に見えている情報だけでは答えを1つに絞ることができないので、総当たりで解く必要があります。以下のステップに分けることができます。4については、書いてある通りのことをそのまま実装すれば良いので、この章では1の解答候補リスト作成について簡単に解説します。16マスに対して「3-4-5」というヒントが与えられた場合、どのような解答候補があるでしょうか?一見難しそうな問題ですが、「余分な白マスの分配」と考えると分かりやすいと思います。「3-4-5」を左端から敷き詰めていくと、以下のようになると思います。右端の余った2マスを、以下の1〜4に分配する、という風に考えます。4この分配は、「1〜4から重複を許して2つ選ぶ」という重複組合せの問題に帰着できるので、パターン数は以下のように求められます。10具体的には、以下の10通りです。(n-1)となります。箇所に分配すれば良いことになります。_kの全パターンを出力する関数は、以下のように再帰で書くことができます。}}以上の関数から得られた数列を、盤面の解答候補リストとして使えば良いということになります。対して、クリックアクションを送信するだけで、クリックすることができます。button.performAction(AccessibilityNodeInfo.ACTION_CLICK)クリックするかどうかは、現在のチェック状態と操作後に期待するチェック状態でxorを取って決めます。adb経由でクリックするよりも素早く実行することができます。まとめというわけで完成したものがコチラ!わりといい感じに動かすことができました......そして後から気づいたのですが、実はQuaresActivityが問題作成時に、デバッグログに答えを出力していました。この記事は以上となります、何か間違いや感想等あれば気軽にコメントもらえればと思います。upLoginユーザーは見つかりませんでした。