36

電話のルート権限なしで、ADBを使用してアプリからデータベースをプルおよびプッシュすることは可能ですか?

たとえば、根ざした魔法と夢の場所は次のとおりです。

/data/data/com.xxxx.xxxx/databases/xxxx

rootなしでADBを使用できることは知っていますが、シェルを使用しようとすると、root権限がないとその場所を表示できません。しかし、必要なファイルがわかっている場合は、プッシュとプルを使用できると言われましたか?

基本的に、ルート化されていない電話のMYアプリからデータベースを取得し、それを変更して元に戻したいと思います。

私が持っている唯一の問題は、私が持っている 2 つの電話は両方ともルートであり、非ルートの電話にアクセスして試してみることができないことです。

4

5 に答える 5

80

Nilhcemの答えは私にとってはうまくいきませんでしたが、それは私を正しい方向に導き(私が賛成したため)、今では実用的な解決策があります.

新しいバージョンの Android では動作しない可能性がある古い回答:

#Transfer file from app databases directory to PC
adb shell
$ run-as package.name
$ cd ./databases/
$ ls -l #Find the current permissions - r=4, w=2, x=1
$ chmod 666 ./dbname.db
$ exit
$ exit
adb pull /data/data/package.name/databases/dbname.db ~/Desktop/

#Transfer file from PC to app databases directory (requires the above permission change)
adb push ~/Desktop/dbname.db /data/data/package.name/databases/dbname.db
adb shell
$ run-as package.name
$ chmod 660 ./databases/dbname.db #Restore original permissions
$ exit
$ exit

外部ストレージを使用する別の方法 (6.0.1 で動作することが確認されています):

#Transfer file from app databases directory to external storage
adb shell
$ run-as package.name
$ cp ./databases/dbname.db /sdcard/
$ exit
$ exit

#Transfer file from external storage to app databases directory
adb shell
$ run-as package.name
$ cp /sdcard/dbname.db ./databases/
$ exit
$ exit
于 2013-06-18T19:18:22.683 に答える
13

簡単な回避策は、run-asコマンドを使用して、アクセスできるフォルダーにデータベースをコピーし/sdcard、その後、通常の操作を実行することです。adb pull

adb shell
$ run-as package.name cp /data/data/package.name/dbname.db /sdcard/
$ exit
adb pull /sdcard/dbname.db

run-asコマンドの詳細については、こちらをご覧ください

このrun-asコマンドはAPIレベル8(Android 2.2)以降で使用可能であり、アプリケーションがdebbugableである場合にのみ使用できることに注意してください。

于 2012-10-30T13:11:37.467 に答える