[Android] アプリの内部メモリを覗くとパーミッションでブロックされる

Androidアプリでデータを内部メモリに保存することはよくありますが、このデータを確認しようとするとパーミッションでブロックされます。こんな時は、adbコマンドのrun-asを使います。

sponsored link

run-as

/data/data/アプリパッケージ名/ 以下がストレージなのですが、ターミナルを使って入ろうとするとパーミッションでブロックされます。
アプリ内に保存したデータを見るには

を使うとできる場合があります。
(run-asは機種によって出来ない事もあようです、DDMSは現在API24以降は見られない様子です)

run-as

以降はMacのターミナルでのコマンドですが、windowsの場合は ./adb をadbと読み替えてコマンドプロンプトを使います
 
adbを実行するためにパスを通すか、直に adb があるフォルダにターミナルで入ります。
また、AndroidManifest.xml の application タグ内で「android:debuggable=”false”」となっている場合は、true にするかこの設定を外しておきます。

これで ls コマンドでストレージ内のファイルが確認できます
android なのでLinuxコマンドでls, cd などが使えます

 
ファイル等は特に指定しない場合ば /files 以下に保存されています。Textファイルの確認は cat でできますが、画像ファイル等は読み書きができる場所に移してから確認します。
 
画像ファイルを 外部ストレージにコピーする(あるいは書き込み可能領域にコピー)

 
尚、端末により外部ストレージのパスは異なりますので、それぞれ確認が前もって必要です
 
その後、adb pull を使って画像ファイルをPCのフォルダへコピーします
尚、adb shell を一度出てから adb pull を行います
 

 
これで画像を確認できます
 
Nexus 5X, Android 7.0 をwindowsで試したケースです。
アプリはアプリ内でファイルを保存で作成したもので
packagename: com.example.testfileoutin
testfile.txt というファイルに「test123456789」と入力して保存したものです。

 
尚、releaseされたアプリは基本的にはできません
例えばgoogleのchromeアプリなどはdebugできないと出てきます
 
Android StudioでUSBデバッグでinstallするかdebug releaseしたものに限ります