Android実機のアプリケーションフォルダからのファイルコピー

2015年8月27日

Android 実機のアプリケーションフォルダ(/data/data/[パッケージ名]/files)にあるファイルを Mac に取り出そうとしたのですが、いろいろ躓いたのでまとめておきます。
サンプルを作っていただけなので、最終的にはごりおしになってしまいました。

[環境]
Mac OS X 10.10.4 Yosemite
NEXUS 7

以下の手順でできるらしいので試してみました。

1. ターミナルで “adb shell" を実行します
2. ターミナルで “run-as [パッケージ名] cat /data/data/[パッケージ名]/files/foobar.wav > /sdcard/foobar.wav" を実行します
3. ターミナルで “exit" を実行します
4. ターミナルで “adb pull /sdcard/foobar.jpg foobar.wav" を実行します
5. ユーザディレクトリ直下に foobar.wav が出力される?

これでいける予定でしたが、私の環境では cat の時点でファイルサイズが 0 になってしまっていました。
書きだそうとしているファイルも 400k くらいのサイズなので特別大きいわけでもないのですが。
何が悪いんだ。。。

仕方ないので、書き出し自体を sdcard ディレクトリに出力するように変更することにしました。

1. AndroidManifest.xml に以下の宣言を追加します

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

これを行わないと、sdcardへの書き込み権限がアプリケーションに付与されません。
2. アプリケーション側の出力先を sdcard ディレクトリ直下に変更します
3. ターミナルで “adb pull /sdcard/foobar.wav foobar.wav" を実行します

これで実機内で生成したファイルを Mac に書き出すことができました。
pull は正常に動作しますが、cat が思ったように動いてくれない感じです。
使い方が間違っているのかも、という疑いはありますが、やりたいことはできたのでまぁよしとします。

ここまで進めたところでちょっと気になったので、AndroidManifest.xml の記述をそのままにした状態で、
ファイルの書き出し先を元の /data/data/[パッケージ名]/files に戻して、最初の手順を行ってみました。
結果としては、最初に行った時と同様に cat 時にファイルサイズが 0 になってしまいました。
なにがいかんのだろうか。。。

おしまい。

スポンサーリンク

Androidandroid

Posted by peliphilo