8
1

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 5 years have passed since last update.

デバッグに便利!ボタン1つでアプリを初期化する方法

Posted at

アプリのデバッグなどをしている際に、一度アプリを初期化して、真っさらな状態から動作確認をしてみたい、というのが結構あるかと思います。

開発者であれば、adbのコマンドで

$ adb shell pm clear パッケージ名

とすればアプリの初期化をすぐに行なえます。

しかし、非開発者の人の場合だと
・アプリをアンインストールし、再度インストールする。
・端末の設定からアプリ一覧から該当するアプリの設定に行き、「データを消去」などでデータを消去する。
という、ちょっと面倒な手順を踏まなければなりません。

アプリを初期化する処理を実装する

というわけで、アプリを初期化する処理を実装してみたいと思います。
といってもコード自体は結構簡単で、下記のような感じです。

Runtime.getRuntime().exec("pm clear パッケージ名")

Runtime に関しては、普段アプリ開発をしているなかでは、ほぼ使うことはないクラスかと思います。https://developer.android.com/reference/java/lang/Runtime.html

(正直詳しいところはわからないのですが) Runtime.getRuntime() でアプリ自身のランタイムを取得し、exec で任意のコマンドを実行することが出来る、みたいな感じのようです。

実際にアプリに組み込む場合は、デバッグ時だけに使えるデバッグメニューみたいなのを作って、そこに アプリを初期化する みたいなボタンを設置してあげるといいのではないかと思います。

DebugActivity.kt
...

clearButton.setOnClickListener {
    Runtime.getRuntime().exec("pm clear パッケージ名")
}

...

ちなみにこの処理を実行すると、アプリが強制的に終了するような挙動になります。

clear_button.gif

このボタンがあれば、デバッグ時に便利ではないでしょうか!

他のアプリの情報も消せるのか?

ここでふと、**「他のアプリでも初期化出来ちゃうのでは?」**という疑問が。
出来ないだろうなと思いつつも、もし出来たら相当良くないよな、ということで試してみました。

試してみる

↓おもむろにモンストのデータの初期化を試みる。

Runtime.getRuntime().exec("pm clear jp.co.mixi.monsterstrike")

これを実行してみると、消すことは出来ませんでした。 :no_entry:

少し書き加えて、実行結果を確認してみると...


val result = Runtime.getRuntime().exec("pm clear jp.co.mixi.monsterstrike")
result.errorStream.bufferedReader().use {
    Log.d("DEBUG", it.readText())
}
Error: java.lang.SecurityException: PID 467 does not have permission android.permission.CLEAR_APP_USER_DATA to clear data of package jp.co.mixi.monsterstrike

権限が無い旨のエラーが出ておりました。
当然といえば当然の結果ですが、別アプリを削除することは出来ないようでした。

終わりに

Runtime を使ってのアプリの初期化方法を記載しました。
デバッグメニューなどに追加して、デバッグを簡単に行えるようにしていきたいですね :smile:

8
1
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
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?