2019の18日目の記事です。10のイースターエッグを自動で解くアプリを作成してみました。この記事ではその方法について解説してみたいと思います。10のイースターエッグとはイースターエッグとは、昔からAndroidに備わっているおまけ機能で、OSバージョンごとに異なるものが実装されています。7ではねこあつめを遊ぶことができました。イースターエッグの出し方はどのバージョンでもほぼ変わらず、Androidのバージョン番号を連打するというものです。10でもこれは変わりません。バージョン番号を開きます。ここで表示されている「android」「1」「0」はスワイプすることにより動かすことができます。ダブルタップしたまま押し続けると、押し続けている間回転させることができます。これらの操作で「1」と「0」を動かすことにより、以下のような「Q」の文字を作ることができます。すると、背景が動き出します。これで終わりかと思いきや、この状態でさらに何度かタップすると、以下のような画面が開きます。これは「お絵かきロジック」や「ピクロス」、英語ではNonogramなどと呼ばれるゲームです。数字はその列に入る黒マスの数を表していて、マス目をタップすることでそのマスを黒く塗りつぶすことができます。条件を満たしている行・列は濃い緑色になります。通常のお絵かきロジックとは違いこのイースターエッグでは、行と列のうち片方しか数字を見ることができず、もう片方は条件を満たしているかどうかしか知ることができません。(実は画面回転するともう片方も知ることができますが、今回の記事では特に使いません)今回はこのゲームを自動で解くアプリを作ることができないかと考え、いくつかの手法を試しました。盤面の操作という3つのフェーズに分けて、説明していきたいと思います。Serviceを用いることを検討しました。Serviceとは、ハンディキャップのあるユーザーの端末操作を補助する機能です。ユーザーに代わって操作を行うため、比較的強い権限が与えられています。Serviceは、AccessibilityServiceというクラスを継承して作ります。onAccessibilityEventにeventに応じた処理を実装します。}}次に、作成したServiceをAndroidManifestに宣言します。いうパーミッションが必要になります。intent-filterに追加します。どのようなイベントを受け取るかなどについてxmlファイルで記述したものを、meta-dataとして宣言します。以下のように宣言します。記述した処理を実行することができます。次にこれをイースターエッグに適用するために、まずはイースターエッグの実装を見ていきます。あることが分かります。そのためまずは、先ほどのxmlファイルにパッケージ名のフィルタを追加します。