misc.log

日常茶飯事とお仕事と

Android端末「プロセスandroid.process.mediaは停止しました」対応調査(涙

Cloudfone Thrill 400qxが何かの拍子にエラーを頻発するようになり、メディアストレージが有効化しなくなったので調査。そして解決しなかった顛末をメモ。あとで見返せるように自分用のメモなので内容等については一切保証しません。

現象

「プロセスandroid.process.mediaは停止しました」というエラーが、画像等を扱うアプリ起動、アプリ関連操作などのたびに発生する。スマホのカメラは動くが写真が保存できない。ギャラリーなども見られない。

対応

  • メディアストレージなるシステムアプリのキャッシュを削除すれば直るという情報があったので、キャッシュやデータ削除、再起動するも直らず。
  • 同アプリを無効化して有効化すれば、という手立ても駄目。
  • 無効化したまま有効化せずに再起動してみたら、そのまま有効化できなくなってしまった(設定→アプリの同アプリ設定画面で、有効化ボタンがきえて「アップデートのアンインストール」「強制終了」だけになってしまった)。ただしエラーは消えたが、写真が保存できないなどの現象は同じ。
  • この状況で、ギャラリーなどから画像は見られないが、ESファイルエクスプローラーでSDカードを見ると写真は撮影できている。しかし、たとえばLINEで写真を添付しようとしても写真一覧が出ない。

ADBコマンドによる操作

仕方ないので、Android SDKとドライバーがインストールされたPCにUSB接続し、ADBコマンドで直接アプリの有効化を試みました。しかし、root権限が必要らしく「killed」という表示が出るだけで状況変わらず。

[MOD]Enable/Disable Media Scanning at boot
http://forum.xda-developers.com/showthread.php?t=1409780
アプリの無効/有効をコマンドで切り替える方法/Yukiの枝折
http://yuki312.blogspot.jp/2012/01/blog-post_20.html

Rootが必要ということなので……仕方なく下記サイトをみてSRS Rootを入手、Root化を実施。

Android Rooting And Updates For CLOUDFONE Cloudfone Thrill 400qx With Android Version 4.X Jelly Bean
http://hexamob.com/devices/devices-devices/android-rooting-methods-for-cloudfone-cloudfone-thrill-400qx-with-android-version-4-x-jelly-bean/

しかし駄目。

そのあと、いろいろ調べながら試行錯誤する中で「アップデートのアンインストール」を実行してしまい、とうとうアプリの一覧にも出てこなくなりました。

MediaProviderの再インストールを図る

(この後の作業は、実施前に実ファイルであるMediaProvider.apk/odexファイルをSDカードなどにコピー退避して実施しています。なお、システムディレクトリの内容なので、rootエクスプローラー機能をONにしたESファイルエクスプローラーなどでないと元に戻す作業もできませんので注意)。

ADB shellから下記コマンドでアプリ一覧を見ても対象が出てこなくなりました。

pm list packages

どうもアンインストールされてしまっているようだったので、ならば再度インストールすれば……と、ESファイルエクスプローラーからAPKファイル(/system/app/MediaProvider.apk)を実行、インストールを選択するも「インストールされていません」の表示が出るだけ。

ADB shellから下記コマンドでアプリのインストールを図るも「INSTALL_FAILED_DEXOPT」エラーが出て駄目。

cd /system/app
pm install MediaProvider.apk

DEXOPTエラーはAPKファイルに含まれるデータ等を外出しにしたもの?(ごめんなさいAndroid開発のイロハが分かってないので正体を把握しきれてない)。どうやらこれに関するエラーらしく原因の1つには既に登録されているクラスの命令数が多すぎる、とかいろいろあるみたい。
時間もないので簡単な回避法だけ調べてみてたのですが見当たらず。

odexファイル無しでインストールするには、odex無しオプションで作られたapkファイルが必要なようで……そうなるともう、Androidのシステムアプリをソースからビルドし直すしかなさそう。出来なくはないのかも知れないけど、おそらくアプリへの署名とか、いろんな障壁があるだろうし今からそれは無理……ということで…

実物をダウンロードしてくる

えっと……うさんくさいのですがとりあえずMediaProvider.apkを下記サイトからダウンロードしてきました。


[rom gnexus ported by elitemovil] JZO54K OFI… - Pg. 115 | Samsung Galaxy S I9000 | XDA Forums

どうやらodexファイル無しのバージョンのようです。これを/system/appに上書きして端末を再起動すると、自動的に認識して……

「プロセスandroid.process.mediaは停止しました」というエラーでる状態に戻りました!めでたしめでたし……って解決してねぇ!!!!

参考:Cloudfone Thrill 400qxの端末情報

とりあえず、端末のVIDとPID情報をメモっておく。

f:id:frontline:20150301183122p:plain

ドライバのインストールに必要かとおもいましたが、とりあえず汎用のドライバで端末認識したのでOKでした。

参考:Android SDKのインストール先

特に変更とかせずに導入したらここになったようです。

C:\Users\(USER_NAME)AppData\Local\Android\sdk\extras\google\usb_driver


改訂2版 中学生でもわかる Androidアプリ開発講座

改訂2版 中学生でもわかる Androidアプリ開発講座

はじめてのAndroidアプリ開発―Android4対応版 (TECHNICAL MASTER)

はじめてのAndroidアプリ開発―Android4対応版 (TECHNICAL MASTER)