[ADB] Android端末からファイルをコピーする際に”Permission denied”のエラーが出るとき

2021年1月7日

Android端末内のデータを閲覧・取得するには Android SDK Platform-Tools に含まれる ADB を使います。

アプリ開発においては、デバッグビルドのアプリ内にあるファイルを確認するために使うことがあります。

アプリ内のファイルを確認するには

アプリ内のファイルは /data/data/[アプリパッケージ名]/ または /data/user/0/[アプリパッケージ名]/ のディレクトリに含まれており、通常、ここにはPCのファイルエクスプローラーでアクセスすることができません。

アクセスするためにはコマンド adb shell を用い、さらに run-as コマンドを使用して内容を確認することになります。

adb shell
run-as [アプリパッケージ名]

ファイルをPCに取り出したい場合、一度PCからアクセス可能な領域(/sdcard/など)にそのファイルをコピーしてくる必要があります。

その際、以下のコマンドを実行します。adb shell を実行している場合は、コマンド exit または [Ctrl + D] によって終了してから行ってください。

adb shell "cp /data/data/[アプリパッケージ名]/[コピーしたいファイル名] /sdcard/[コピーしたファイルの新しい名前]"

このコマンドによって、アプリ内のデータを /sdcard/ に持ってくることができます。コピーと同時にファイル名を変更することもできます。

上記の例では[コピーしたファイルの新しい名前]に入れた文字列に改名されます。

cpコマンド実行時に Permission denied

上記のコマンドを実行時、以下のエラーが出る場合があります。

cp: /data/data/[アプリパッケージ名]/databases/[コピーしようとしたファイル名]: Permission denied

このエラーが出るとき、コピーしようとしたファイルにアクセス権限パーミッション)が付与されていない可能性があります。

コマンド chmod によってファイルパーミッションを適切に設定してください。

// 777 である必要はありませんが、とりあえずこれで権限は問題なくなります
chmod 777 /data/data/[アプリパッケージ名]/databases/[コピーしようとしたファイルの名称]

その後、ファイルのコピーを試してみてください。

ちなみに、筆者の環境では run-as を含めて以下のように実行すると、拒否(Permission denied)されてコピーに失敗しました。

adb shell "run-as [パッケージ名] cp /data/data/[アプリパッケージ名]/[コピーするファイル名] /sdcard/[コピーしたファイル名]"

run-as をなくして実行すると、無事コピーすることができました。

adb shell "cp /data/data/[アプリパッケージ名]/[コピーするファイル名] /sdcard/[コピーしたファイル名]"

以上、Android端末からファイルをコピーする際にエラーが出る場合の対処についてでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です