web-dev-qa-db-ja.com

SDカードをマウントするのと同じ方法で、adbシェルからアプリケーションデータを表示できますか?

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シェルで確認する方法はありますか?

29
Ele

一般的なルールとして、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
69
Has AlTaiar

この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コマンド

0
rtrujillor