15
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Android端末からサードパーティ製アプリを一掃する

Last updated at Posted at 2015-05-21

国内のAndroid端末には不要なアプリがいっぱい入っているので、買ってきたらまずこれらのアプリを消すところから始めます。
アプリ管理画面から一つ一つ手作業で消していっても良いのですが台数が多かったりするとめんどくさいので、コマンド一発でできるようにしてみました。

手順

まず始めにインストールされているサードパーティ製アプリのパッケージ名を調べます。
コマンドラインから下記コマンドを実行すると、端末内のサードパーティ製アプリのパッケージ名を一覧表示できる。

adb shell "pm list packages -3"
実行結果
package:com.android.chrome
package:com.dropbox.android
package:com.epic.launcher
package:com.google.android.apps.chrometophone
package:com.google.android.apps.docs
package:com.google.android.inputmethod.japanese
package:com.sand.file
package:la.droid.qr

この実行結果をコピーして、テキストエディターに貼り付ける。
package: を削除して、各行が adb shell "pm uninstall パッケージ名" となるように書き換える。ダブルクオーテーションはなくても動くかも…?

書き換え後
adb shell "pm uninstall com.android.chrome"
adb shell "pm uninstall com.dropbox.android"
adb shell "pm uninstall com.epic.launcher"
adb shell "pm uninstall com.google.android.apps.chrometophone"
adb shell "pm uninstall com.google.android.apps.docs"
adb shell "pm uninstall com.google.android.inputmethod.japanese"
adb shell "pm uninstall com.sand.file"
adb shell "pm uninstall la.droid.qr"

この各行を実行していけば、アプリがアンインストールされます。

手順を自動化する

以前コマンドラインでやる方法を考えていたけど、最近なぜか上手くいかないことが多かったのでNode.jsのスクリプトにしました。

adb.js
const spawn = require('child_process').spawn;

// Adb.exec('devices') のようにしてadbを実行するクラス
// 注意: エラー処理がいい加減というか何もしていないので、本格的なプロジェクトに使用する際はきちんと書き換えること!!
module.exports = class Adb {
  static exec(args) {

    return new Promise((resolve, reject) => {

      // 引数が配列ならそのまま、文字列ならスペースで区切って配列にする
      let adbArgs = Array.isArray(args) ? args
        : args.split(/\s/);

      let adb = spawn('adb', adbArgs);

      // 結果を入れる
      let result;

      // 標準出力からデータが来たらresultに入れる
      adb.stdout.on('data', (data) => {
        if (!result) {
          result = data;
        } else {
          result += data;
        }
      });

      adb.on('close', (code) => {
        resolve({ data: result, code })
      });
    })
  }
}
main.js
const Adb = require('./adb')

Adb.exec('shell pm list packages -3')
  .then(result => {

    // 結果がなければ何もしない
    if (!result.data) return

    // 結果からパッケージ名の配列を取得する
    let packageList = result.data.toString().trim().split(/\s/)
      // 空文字を削除
      .filter(str => str)
      // package:XXX -> XXX に変換する
      .map(str => str.replace('package:', ''));

    // 各パッケージ名を使って adb shell pm uninstall {packageName} を実行する
    let promises = packageList.map(packageName => Adb.exec(`shell pm uninstall ${packageName}`))
    return Promise.all(promises);
  })
  .then(_ => {
    console.log('DONE')
  })
  .catch(err => {
    console.error(`Error: ${err}`)
  });

2024/03/30追記:

adb shell pm list packages -3 | sed -e 's/package://' | xargs -I{} adb shell pm uninstall {}

で一発でした。

15
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?