Androidのプリインストールアプリを無効化する方法

Androidのプリインストールアプリを無効化する手段として、adb shell pm hideを用いた方法が昨年の夏ごろから使えなくなったのはご存じのとおり。

最近はプリインストールアプリが少ない機種ばかり使っていたので、まぁいいかなーと思っていたところに、「adb shell pm uninstall -k –user 0 <パッケージ名>で無効にできるよ!」という話を聞いたので早速試しました。

pm uninstallだッ!

早速無効化もといアンインストールに移りたいところですが、まずはバックアップを取っておきましょう。

大事なデータのバックアップはもちろんですが、無効化するアプリのapkファイルもバックアップしておきましょう。

/system/priv-app内をバックアップ(任意)

プリインストールされているアプリのapkは/system/priv-appにあります。その中から、必要な物だけバックアップするか、priv-appフォルダごとゴッソリとバックアップします。

お手持ちのPCにadb pullするなり、任意のファイラーアプリで安全な場所にバックアップするなりしておいてください。

再インストール用のコマンドはあるのですが、まぁ念の為というやつです。とは言っても、自分ではどうしようもなくなっても初期化で戻るんですが。

パッケージ名を調べる

「adb shell pm list packages -s」でインストールされているアプリのパッケージ名一覧が表示されます。(-s: システムアプリのみを表示)

adb shell pm list packages -s

大量に表示されると思いますので、必要に応じてgrepしてください。今回使うデバイスはGalaxy S6 edge SCV31なので、au向けにほぼ確実に入っているであろう「安心アクセス for Android」を無効にしてみようと思います。

「安心アクセス for Android」のパッケージ名は「jp.netstar.familysmile」ですが、折角なのでパッケージ一覧で確認してみましょう。一覧に目を通すのも大変なので、grepも使ってみます。

Windowsのコマンドプロンプトなどを用いている場合、「’grep’ は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」と怒られるはずですので、grepコマンドを使いたいときは一度シェル内に入る必要があります。adb shellしてから「pm list packages -s | grep family」と入力します。

すると、「package: jp.netstar.familysmile」と出てきますので、どこかにメモしておきます。「pm list packages -s | grep kddi」とすればパッケージ名にkddiが含まれるものだけを絞って表示してくれますし、grepコマンドは便利なので覚えておきましょう。

pm uninstallコマンドで無効化

実行は自己責任でお願いします。デバイスが起動しなくなっても責任取れませんのであしからず。

さて、長ったらしい前置きはここまで。ようやく本番です。(adb〜から入力する前提で説明をするので、先程シェルに入った場合はexitしてシェルから出ておきましょう。シェルから出ずに続けたい場合はpm〜から打ち始めてください。)

adb shell pm uninstall -k –user 0 jp.netstar.familysmile」を実行すると、「安心アクセス for Android」が未インストール状態となります。(-k: パッケージの削除後にデータとキャッシュのディレクトリを保持)(–user user_id: 照会するユーザー スペース)

adb shell pm uninstall -k --user 0 パッケージ名

userの前にあるハイフンは2つです。

未インストールになる。

元に戻すには、初期化するか、バックアップを書き戻すか、再インストール用のコマンドを入力するかのどれかになります。

adb shell cmd package install-existing パッケージ名

上記コマンドでアンイストールしたシステムアプリは再インストールされます。

バックアップから戻す場合は、先程バックアップしたpriv-appフォルダから「FamilySmile.apk」を探してきて、/sdcard直下にコピー。

そのあと、「adb shell pm install -r –user 0 /sdcard/FamilySmile.apk」で元に戻ります。(-r: 既存のアプリを再インストールし、そのデータを保持)

ちなみに、-rを入れ忘れると、[INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install パッケージ名 without first uninstalling.]といわれました。コマンド名の通りアンインストールとなるので、apkのバックアップがないと初期化するしかなくなると思われます。(未確認)

今回はAndroid 7.0 セキュリティパッチレベル2017-07-01のSCV31を用いましたが、Android 8.0のデバイスでも問題なく使えるとのことです。

アンインストールではなく無効化したい場合

パッケージを無効にする

adb shell pm disable --user 0 パッケージ名

無効にしたパッケージを元に戻す

adb shell pm enable --user 0 パッケージ名

詳細情報

Android Debug Bridge | Android Studio 「package manager(pm)の呼び出し」

複数ユーザーのテスト  |  Android オープンソース プロジェクト  |  Android Open Source Project

タイトルとURLをコピーしました