国内の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 {}
で一発でした。