2014/03/12

Taskerを使って一時的にroot権限とUSBデバッグを無効化してアプリを起動する方法(CACHATTO対応)


CACHATTOというアプリの導入を検討中なのですが、このアプリは、端末がroot化されていたり、USBデバッグが有効になっていると起動出来ません。

CACHATTO SecureBrowser
https://play.google.com/store/apps/details?id=jp.co.ejan.cachatto.securebrowser2

このアプリを起動する度にSuperuserとUSBデバッグを無効にして、終了後に再度戻すのは面倒ですので、Taskerを使って自動化してみました。

【必要な物】

Tasker(有料)
https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm

Secure Settings(プラグイン)
https://play.google.com/store/apps/details?id=com.intangibleobject.securesettings.plugin

Tasker App Factory(エクステンション)
https://play.google.com/store/apps/details?id=net.dinglisch.android.appfactory

【基本動作】

Taskerで作ったタスクをアプリ化し、以下の様な動作をワンタッチで行うようにしました。

ホーム画面にあるアイコンをクリックしたら
=>unrootしてUSBデバッグを無効に
=>CACHATTOを起動
CACHATTOを終了したら
=>root化してUSBデバッグを有効に

【アクションの流れ】


1. Popup : タイトルをポップアップします
2. Secure Settings : USBデバッグを無効にします
3. Run Shell : suとSuperuser.apkをリネームして無効にします
4. Load App : CACHATTOを起動します
5. Wait : 5秒待ちます
6. Run Shell : cachattoを含む名のプロセスがフォアグランドにあるか確認します
7. If : フォアグラウンドにあった場合
8. Goto : 5番目のアクションに戻ります
9. End if
10. Wait : 10秒待ちます
11. Run Shell : cachattoを含む名のプロセスがフォアグランドにあるか再度確認します
12. If : フォアグラウンドにある場合
13. Goto : 5番目のアクションに戻ります
14. End If
15. Run Shell : リネームしたsuとSuperuser.apkを元のファイル名に戻します
16. Secure Settings : USBデバッグを有効にします
17. Notify : 再度root化してUSBデバッグを有効にした事を通知します

【設定例】

1. Popup : タイトルをポップアップします


CACHATTOの起動まで少しラグがあり、クリック時に動作しているかどうかが判り難いので、Popupさせます。内容は任意のもので構いません。


タスク一覧を左にスライドさせると右側にPopupのサイズやフォントを設定する画面がありますので好みに合わせて設定してください。

2. Secure Settings : USBデバッグを無効にします


オプションモジュールのSecure Settingsが必要です。

3. Run Shell : suとSuperuser.apkをリネームして無効にします


スクリプトは以下のものをエディタで開いてクリップボード経由で貼り付けました。

 
#!/system/bin/sh
if [ -f /system/xbin/su ]; then
 su -c 'busybox mount -o remount,rw /system /system'
 if [ -f /system/app/Superuser.apk ]; then
  su -c "busybox mv /system/app/Superuser.apk /system/app/xsuperuser.apk"
 fi
 su -c "busybox mv /system/xbin/su /system/xbin/xsu"
fi

suとSuperuser.apkが以下のフォルダにあることを前提にしていますので、自分の環境に合わせて修正してください。

/system/xbin/su
/system/app/Superuser.apk

Use Rootは選択しないでください。

Continue Task After Errorは有効にしています。

4. Load App : CACHATTOを起動します


Exclude From Recent Appsは選択しないでください。
  
Continue Task After Errorは有効にしています。(Prefarenceでbiginner modeをOffにしていないとこの項目は設定されません。)


5. Wait : 5秒待ちます



6. Run Shell : cachattoを含む名のプロセスがフォアグランドにあるか確認します


Store Result Inに戻り値を保存します。

Continue Task After Errorは有効にしています。

7. If : フォアグラウンドにあった場合


フォアグラウンドにない場合は戻り値が1になりますので、戻り値が1でない場合はフォアグラウンドにある事になります。

CACHATTOがフォアグラウンドにある限り、「確認」と「5秒待ち」を繰り返します。

8. Goto : 5番目のアクションに戻ります


9. End if

CACHATTOがフォアグラウンドにない場合はここから先に進みます。

10. Wait : 10秒待ちます


11. Run Shell : cachattoを含む名のプロセスがフォアグランドにあるか再度確認します
12. If : フォアグラウンドにある場合
13. Goto : 5番目のアクションに戻ります
14. End If

11-14番のアクションは6-9番と同じです。

但し、戻り値の名前は変更しています。


一度フォアグラウンドに無いと判断された場合でも、他アプリとマルチタスクでコピペ等をしている場合があるので、再度確認する様にしています。二度目の確認までは待ち時間は倍の10秒にしてあります。

15. Run Shell : リネームしたsuとSuperuser.apkを元のファイル名に戻します

スクリプトは以下のものをエディタで開いてクリップボード経由で貼り付けました。

 
#!/system/bin/sh
if [ -f /system/xbin/xsu ]; then
 xsu -c 'busybox mount -o remount,rw /system /system'
 if [ -f /system/app/xsuperuser.apk ]; then
  xsu -c "busybox mv /system/app/xsuperuser.apk /system/app/Superuser.apk"
 fi
 xsu -c "busybox mv /system/xbin/xsu /system/xbin/su"
fi

Use Rootは選択しないでください。

Continue Task After Errorは有効にしています。

16. Secure Settings : USBデバッグを有効にします



Continue Task After Errorは有効にしています。

17. Notify : 再度root化してUSBデバッグを有効にした事を通知します


タイトルやコメント、アイコンは好みのものにしてください。

Priorityはデフォルトの3のままにしています。

【アプリ化】



作成したタスクはTaskerのタスク一覧からも再生出来ますし、タスクのショートカットをホーム画面に置くことも出来ますが、アプリ化しておくと、Taskerを実行していなくても起動出来ますので便利です。


タスク一覧で該当のタスクを長押しすると右上にメニューボタンが出ますので、それをクリックしてExportを選択します。

XML to SDでバックアップをとっておきましょう。

アプリ化はAs Appから行います。

特にデフォルト値を変更する必要はありませんが、package nameだけは決め事があるので、注意してください。

メールアドレスとパッケージネームの関係は以下です。

mail address : abcd.efgh@google.com
package name : com.google.efgh.abcd.アプリ名


また、アプリのアイコンはタスクのアクション一覧の右下のアイコンをタップすると表示されるメニューから選択出来ます。


その右のスライドメニューの様なアイコンをクリックするとメニューが表示されますので、Abort Existing Taskを選択しておきます。


今回の様にタスクだけを使って常時監視を行わない場合は、タスカーのタスク一覧画面等の左上のタスカーアイコンを長押して無効にしておきましょう。(常時監視を行うとバッテリーを消費します。)


3 件のコメント:

  1. はじめまして。少し教えて下さい。
    Run shellにStore Result Inが見当たらない場合、何が原因か分かりますでしょうか?
    初心者ですみません。

    返信削除
  2. 確かに、昔作ったタスクを最新のバージョンのTaske(4.6u2)で開いてみると”Store Result In”が見当たりません...

    昔アプリ化したものはそのまま動いているのですが、リリースノートに以下の記載があるので、変更されたのかも知れません。

    http://tasker.dinglisch.net/changes/changes4.6.html

    action Run Shell: result code is stored in %err (if not 0) (and previously specified for backwards compatibility)

    試してみてください。

    返信削除
    返信
    1. 早速のご返信ありがとうございます。
      試してみましたが,まだうまく動作しません。
      何度かトライしてみたいと思います。情報ありがとうございます。
      またおじゃまいたします。

      削除