Android7以降でバックグラウンド動作しているアプリを凍結する方法

2017年7月16日スマホ・タブレット,ブログ

どんどん新しくなるAndroidですが、これから出てくるのはバージョン7以降が増えてくるでしょう。

バッテリーの持ちも良くなり、動作も軽快でなかなか良くできています。

そして、Android7以降には今までは無効に出来なかったアプリも凍結できるうような裏技が組み込まれているようです。

何が良いかって、時々使っているアプリでも普段は裏で動作させたくない場合、そのアプリを凍結しておいて、自分で立ち上げた時だけ動作させるように出来るのでです。

adbを使うちょっとばかり高度な話になりますが、adbの導入についてはそのうち書きたいと思います。

何が出来るのか

Android 7 (Nougat,ヌガー)以降では、使っていないアプリがバックグラウンドのプロセスで動いている場合に、そのバックグラウンドプロセスをブロックして止めることが出来るようになりました。

もちろん root が必要だとかそんな野暮なものではなく、普通の端末で利用できます。

いままでは裏で動いているプロセスがあっても無効に出来ない場合があり、裏で勝手に通信をしているなどバッテリーやリソース的に無駄な部分がありました。

この必要ないプロセスのアプリが合った場合、手軽にそのアプリのバックグラウンドでの動作を凍結させて動作をさせないように出来るようになりました。

必要ないアプリは消してしまえば良いですが、ごく稀に使うだけなのに常に裏で何やら動いていると無駄ですよね。

ごく稀に使うアプリで、常に最新の状態ではなく、立ち上げた時だけ最新になればいいよというアプリの場合役に立ちます。

 

どうやって設定するのか

Androidの基本のOSはLinuxで動いています。

そのLinuxの上にアプリのような形式で仮想のOSのような領域を作って、その上で動いています。

端末の画面の操作からでは、その基本部分には特定のアプリなどを使わないとアクセスできませんが、端末をPCとUSBケーブルで繋ぐことによってPCにから基本のLinux部分にアクセスして、一部の操作が出来るようになっています。

これは通常は使わない開発やデバッグやメンテナンスに用います。

adbというインターフェイスの様なもので、コマンドで操作します。

PC的に言うとコマンドプロンプトの様なものです。




adbの接続方法

adbの接続にはadbのコマンド用アプリが別途必要になり、PCにダウンロードが必要です。

また、端末をPCに接続した時に、デバイスマネージャーがadbインターフェイス用の認識を出来るように、adb用のドライバが必要になります。

端末の方は、設定の端末情報からビルド番号を連打して、開発者モードを有効にしてから、開発者向けオプションにてUSBデバッグを有効にする必要があります。

そして端末をPCに接続してから端末側で暗号化のキーの認証を済ませるとadbコマンドが使えるようになります。

くわしくはそのうち別途記事に書きたいと思います。

まず止めたいアプリのパッケージ名を調べる

いくつか方法はあります。

GooglePlayのサイトを使う


にて対象のアプリを検索し表示する。

例えばAmazonのショッピングアプリだったとすると

この「com.amazon.mShop.android.shopping」部分がパッケージ名になります。

アプリを利用して調べる

「インストールされてアプリの情報」というアプリ( App Inspector )

端末にインストールされているアプリの詳細な情報を調べられるアプリなどを利用します。

adbコマンドで調べる

adbコマンドでもインストールされているパッケージの一覧を確認できます。

コマンドプロンプトから一旦テキストに保存して見た方が見やすいと思いますので、下記コマンドでlist.txtに保存します。

> adb shell pm list packages > list.txt

また一覧を見るだけであれば、

> adb shell pm list packages

でもいいですし、

端末のシェルに入ってからgrepで絞り込み検索したりもできます。

パッケージ一覧からdocomoを摘出

> adb shell
SO-03G:/ $ pm list packages | grep docomo
package:com.nttdocomo.android.anmane2
package:jp.ne.docomo.smt.contents_search_widget
package:com.nttdocomo.android.felicaremotelock
package:com.nttdocomo.android.iconcier
package:com.sonyericsson.android.servicemenu.product.res.overlay.docomo
package:com.nttdocomo.android.gs.utility
package:jp.co.omronsoft.android.decoemojimanager_docomo
package:com.nttdocomo.android.ictrw
package:com.nttdocomo.android.osv
package:com.nttdocomo.osaifu.tsmproxy
package:com.nttdocomo.android.keyguard
package:com.nttdocomo.android.pf.dcmippushaggregator
package:jp.co.nttdocomo.saigaiban
package:com.nttdocomo.android.areamail
package:com.sonymobile.docomoemoji.license
package:com.nttdocomo.dmagazine
SO-03G:/ $

 

 

本題の凍結コマンド RUN_IN_BACKGROUND

さて、目的のパッケージ名が見つかったら、adbで凍結です。
まずは

> adb shell

で端末のコンソールに入ります。

凍結コマンドは

$ cmd appops set パッケージ名 RUN_IN_BACKGROUND ignore

です。

例えば先程のAmazonショッピングであれば

$ cmd appops set com.amazon.mShop.android.shopping RUN_IN_BACKGROUND ignore

になります。
これでバックグラウンドの動作を凍結できました。

逆に凍結していたアプリを元に戻すには最後の ignore を allow に変えてコマンドを入れます。

$ cmd appops set com.amazon.mShop.android.shopping RUN_IN_BACKGROUND allow

これで元通りにバックグラウンドの動作するようになります。

 

注意点として、必要なアプリのバックグラウンドを止めてしまうと、バックグラウンド動作は機能しなくなると思いますので、何か問題がおきたり間違えたパッケージを凍結してしまったら元に戻して様子を見ましょう。

自動で常に同期しているアプリ等は、バックグラウンドを凍結すると、該当のアプリを起動させるまで同期は止まったままです。

例えば電話のアプリを凍結すれば、電話のアプリを立ち上げている時以外は着信はできなくなります。

appopsコマンドとは

googleが盛り込んだ user-facing permission management system だそうです。

ユーザーレベルで権限のある範囲でパーミッションを設定できるようになったみたいですね。(実は昔から隠し機能としてあったんですけどね)

コマンド自体は appops ですが、実行するにはコマンドラインのインターフェイスの cmd コマンド経由からでないとダメらしいです。

一応ヘルプ

SO-03G:/ $ appops 
AppOps service (appops) commands:
help
Print this help text.
set [--user <USER_ID>] <PACKAGE> <OP> <MODE>
Set the mode for a particular application and operation.
get [--user <USER_ID>] <PACKAGE> [<OP>]
Return the mode for a particular application and optional operation.
query-op [--user <USER_ID>] <OP> [<MODE>]
Print all packages that currently have the given op in the given mode.
reset [--user <USER_ID>] [<PACKAGE>]
Reset the given application or all applications to default modes.
write-settings
Immediately write pending changes to storage.
read-settings
Read the last written settings, replacing current state in RAM.
options:
<PACKAGE> an Android package name.
<OP> an AppOps operation.
<MODE> one of allow, ignore, deny, or default
<USER_ID> the user id under which the package is installed. If --user is not
specified, the current user is assumed.

スポンサーリンク