adb backup で Android 端末のバックアップを作成する(14)
adb backup では個別のファイルを指定してバックアップを取ることはできません。adb コマンドには pull コマンドがありますので、個別ファイルは adb pull コマンドを使うことで取得できます。
しかし、コマンドラインから対象ファイルのフルパスを指定する必要があり、あまり使い勝手が良いとは言えない印象が個人的にはあります。*1
エクスプローラのような GUI ベースでファイルを閲覧してファイルをコピーできると便利だと思いその様なツールを探してみたところ、これが意外に厄介である事に気が付きました。
まず、SDK のToolsフォルダにある DDMS を呼び出し、File explorer を使う方法があるかと思います。File Exploere を使うと GUI ベースでツリー構造を表示してくれます。アクセス権が無いフォルダ配下にあるファイルは表示されません。Root 権限が無い状況では、かなり限定された範囲でのみアクセス可能です。
DDMS の File Exploere には、ファイルのコピー機能があり、フォルダを指定すれば一括してそのフォルダ配下にあるファイルをWindows 上の指定フォルダ配下にコピーする事が可能です。ただし、問題が一つあり日本語文字列を含むファイル名が対象フォルダ配下に存在すると、そのファイルのコピー時点でコピー処理が中断・終了されてしまいます。
対象フォルダ配下に日本語を含むファイルがなければ、フォルダ構造を維持してコピーする事ができるので便利ですが、途中で終了したのか、正常に全てコピーが終わって終了したのかを判断することが確認できません。(コピー途中に日本語ファイル名があると、そこでコピー操作が終了し特にエラーなどは表示されません)
これは、日本語文字列を含むファイルを個別に指定してコピーを取ろうとした場合にも発生するので、気になる方は簡単に試せるかと思います。コピー先として指定したフォルダに何もファイルが出来ないはずです。
また、Facebook のタイムラインで知ったのですが、Windows 上で adb pull コマンドを使い日本語文字列を含むファイルをコピーしようとした場合、ファイル名部分が文字化けするようですね。
Android では UTF-8 でファイル名が管理されているようですが、Windows 側のコンソールを CHCP コマンドで UTF-8(65001)に切り替え、日本語を含むファイル名を正しく表示できたとしても、出力先のファイルシステム側は UTF-16LE ですので、文字コードが一致せずに化けることになるようです。
Googleで少し検索してみたところ、ドイツ語でもウムラウトを含む文字列では問題になるようで似たような話題が出ていました。残念ながらこの部分については解決策を発見する事ができず、UTF-8 でそのまま扱える環境で操作した方が簡単そうです。(adb backup の対象範囲であれば adb backup した方が早い気もしますが)
さて、他に GUI ベースで adb コマンドを操作できるツールがないかGoogleで検索してみたところ、QtADB というツールを発見し早速使ってみました、結果としては、残念ながら手元では肝心のファイルリストを表示することが出来ませんでした。
今のところ発見できていませんが、文字コードを意識して UTF-8 のファイル名を適切に Windows 上で扱ってくれるツールがあれば、ファイル名が化けずにコピーできるようになるので嬉しいですね。
*1:Windowsにデバイスを接続し MTP 経由でアクセス可能なファイルであれば問題ありませんが、それ以外でアクセス可能な範囲にあるファイルの場合には pull コマンドを使う事になりますね。