Android はシステム的にアプリが起動しなくなる問題を抱えている模様です。
緊急回避の一つとしてアプリを再インストールするだけのアプリを作成しましたが、
内臓ストレージが故障している場合には傷を広げるだけなのであくまでも緊急回避として自己責任での使用をお願いいたします。
アプリが行っていることは Android のシステムに対してアプリのインストールを依頼しているだけとなっています。
作成したアプリ
ただ単に内臓ストレージに保管されている apk に対して再インストールを行うだけです。
広告無し、一切の権限を必要としない単純なアプリです。
必要となった背景
Android のシステムでは APK をインストールするときに APK 内部の共有ライブラリが書き込めたかどうかの確認をしていません…
そのため JNI ネイティブ部分の共有ライブラリ(shared library .so) を内臓ストレージに書き込んだときにエラーが発生すると起動しないアプリとなる模様です。(アプリを作っている側の感想としてもシステムが担保してほしいのが本音…)
AOSP のソースを追っかけて verify 部分がないのは確認しましたが、発生パターンまでは洗い出していません。また、時間が取れるときに本家をつついてみますが既存端末全てのケアは行われないと思われます…
最近のプラットフォームでは UDID, UUID や IMEI, IMSI などをアプリ側で取得することを避けるべき状況となっておりますので起動しなくなった場合に Google Play Store アプリが再インストールに対応していないため復旧のためのサポートへの負荷が上がっているとおもわれます。
Google Drive などのプラットフォーム固有のデータ保存を使用すればいいのでしょうが、キャリアのバックアップ手法もあるため Google アカウントが設定されていない Android 端末がありえるため銀の弾丸とならないのが頭がいたいところです。
(Google アカウントが設定されていてもユーザー名パスワードをロストされると意味がない…)
iOS であれば iTune のバックアップや iCloud からデータが戻るので楽なんですが Android は orz
ApplicationInfo の backupAgentName が Google Drive, キャリア Cloud などになるのであればアプリのユーザーID 部分だけでもバックアップされないか調べて見ます。
http://developer.android.com/reference/android/content/pm/ApplicationInfo.html#backupAgentName
アプリのソース
このアプリのソースは以下で公開中です。
https://github.com/kkkon/kk-android-reinstall-apk