タッチポインター プロモーション画像

タッチポインター – アプリ紹介

このアプリは、画面が大型化してきたAndroidを片手操作できるようにするため作成しました。
開発期間は4ヶ月ぐらいで、Playストアに公開したのは2014年12月です。

[Root/ADB]タッチポインター Pro
デベロッパー: SFApps
価格: ¥400

開発の経緯

電車内で吊革につかまって、スマホを弄っていると画面上側の部分が届かず、わざわざスマホを握り直す必要があり、それが面倒だと感じていたため開発しようと思いました。

アプリからタッチイベントを実行できるかが懸念点でしたが、Androidのタッチイベントを解析して実行するまでの処理を公開して下さっている方がいたため、その処理を参考にアプリの開発を始めました。

機能

実行できるタッチ操作は以下の通りです。

  • タップ
  • ロングタップ
  • スワイプ
  • ドラッグ
  • ダブルタップ(有料版)
  • ピンチアウト(有料版)
  • ピンチイン(有料版)

タッチの変化はポインターをその場で停止させて一定時間が経過するか、設定した圧力以上の強さでユーザーがタッチすることによってできます。

有料版について

使用できるタッチ操作が増えることに加え、コマンド機能が追加されます。
コマンド機能には以下のようなものがあります。

  • バックボタン、ホームボタン、メニューボタンの実行
  • アプリ起動
  • 画面回転方向固定
  • 記憶したタッチ操作の実行
  • 音量アップ、音量ダウンなど

他にも30種類程度のコマンドを用意しています。

開発にあたって

このアプリでは、初めてJNI(Java Native Interface)というネイティブコードを実行する仕組みを利用してアプリ開発を行いました。

最初はJNIを使用せずにADBのコマンドのみでタッチ処理を実行しようと考えていましたが、スワイプ処理を行う際にコマンドの実行が遅く、滑らかな動きが実現できなかったためJNIを使用することに決めました。

タッチを実行できる状態にする処理とタッチの実行処理の作成に2ヶ月ほど掛かりましたが、その処理を作成し終えた後に、端末によってタッチの位置がかなりずれることがわかり、その差異をチェックする処理などを作成していたことにより他のアプリより開発に時間が掛かりました。

上記の処理でも、チェック出来ない端末もかなりあるようで、すべての端末で動かすことは難しい状況です。

タッチ処理の一部は、今後の記事で公開していきたいと思います。

2015年11月1日 追記

Android 6.0(Marshmallow)において、/system/bin/adbにあったはずのadbファイルが削除されていたため、内部からADBを利用したタッチコマンドの実行ができなくなりました。

このため、Android 6.0においてはRoot化された端末でしかタッチポインターが動作しなくなっております。

これについての情報収集を行いましたが、検索でヒットしたのは下記のサイトだけで、どちらも解決には至っておりませんでした。

何か方法はないかと、Android 5.0からadbファイルを抽出してAndroid 6.0にコピーして実行してみましたが、下記のエラーメッセージが出て実行することができませんでした。

CANNOT LINK EXECUTABLE: cannot locate symbol “BIO_f_base64” referenced by “adb”…

また、El Capitan‎でMarshmallowをビルドの記事で書いたように、Android 6.0をビルドしてみて同時にadbファイルもビルドできないか試してみましたが、adbのソースファイルはビルド対象には含まれていないようで実行ファイルは作成されませんでした。

他にも、下記のMakefileを利用させていただいてadbのビルドを試みましたが、ビルド時にエラーが発生して、エラーの箇所を修正すると更にエラーが増えるような状況になり、結局adbファイルを作成することはできませんでした。

現状では解決が難しいため、他に情報が出てくるのを待ってみようと思います。