Androidアプリケーションをテストしています。
次の内容を監視したい
/sdcard/Android/data/com.myapplication
アプリの実行中。
しかし、sdカードがPCのディスクドライブとしてマウントされていると、アプリは正しく動作しません(画像やビデオにアクセスします)。
だから私はadbシェルを使用できると思った。しかし、同じフォルダーにアクセスすることはできません:
ls /sdcard/Android/data/com.myapplication
/sdcard/Android/data/com.myapplication: Permission denied
Stack Overflowを見ると、adbシェルを介してアプリケーションデータを確認するためにこの方法を見つけました。
run-as com.myapplication
そうすることで、フォルダ内に自分自身を見つける
/data/data/com.myapplication
私が混乱しているのは、ここで表示されるデータが、PCを介してSDカードのコンテンツを閲覧しているときに表示されるデータと異なることです。
$ ls
ls
files
databases
shared_prefs
lib
ファイルの下には、sdcard Android/data/com.myapplicationフォルダーの下にあるものがありますが、探しているものではありません。また、他のすべてのフォルダーは異なります。
これには相関関係がありますか
/data/data/com.myapplication
adbおよび
/sdcard/Android/data/com.myapplication
pCからアクセス可能なフォルダー?
後者に存在するファイルをadbシェルで確認する方法はありますか?
一般的なルールとして、Internal storage
にあり、アプリによって保存されているファイル(デフォルトではWORLD_READABLE
ではありません)は、アプリケーションでのみ読み取ることができます。 adb pull
を使用してこれらのファイルをpull
しようとすると、ルート化されていないデバイスで許可が拒否されます。これを回避する方法があります。後で説明します。一方、External storage
にあるファイルは、ユーザーと他のすべてのアプリが利用できます。それはあなたが何を求めているかに依存します。
内部 ストレージ(/data/data/com.app.name
)内のファイルを読み取るために、これらのファイルを直接読み取ることはできませんが、できることは 外部 ストレージに移動することですそこからこのように読みます.
adb Shell "run-as com.yourappName cat /data/data/com.yourappName/files/myfile.txt > /sdcard/Downloads/myfile.txt"
その後、許可の問題なしに外部ストレージからファイルをプルできます。
adb pull /sdcard/Downloads/myfile.txt
どのファイルかわからない場合、またはすべてのファイルを参照する場合は、シェルを使用してすべてのアプリファイルを参照します。
adb Shell
run-as yourappPackageName
cd /data/data/youappPackageName
ls -all
このAdbコマンドを使用して、アプリが使用しているSqlite DBを取得できました。
adb exec-out run-as xxx.xxx.xxx.xxx cat "/data/data/xxx.xxx.xxx.xxx/databases/databasefile.db" > %userprofile%\Desktop\databasefile.db
ここで、xxx.xxx.xxx.xxxはAndroid AppのbundleId、databasefile.dbはSqlite DBの名前です
だから、アプリの既存のファイルを入手し、どこにあるかを知り、adb exec-out run-as xxx.xxx.xxx.xxx
コマンド