以下方式可以處理~
from:
https://stackoverflow.com/questions/15558353/how-can-one-pull-the-private-data-of-ones-own-android-app
從 android 手機要備份資料,用 adb 可能會用以下方式:
adb pull /data/data/com.corp.appName/files/myFile.txt myFile.txt
對於 android virtual device 可能可以,但對實體手機可能會產生錯誤,它不讓我們複製。
先離題一下,連線到實體手機時,以下指令可以進入到 app 的目錄裡,可以看到相關檔案,但無法複製。
adb shell
run-as com.example.appName
回題,要複製 app 的資料方式,要用備份的概念來做,指令如下:
adb backup -f myFiles com.example.appName
這個指令執行時,為了安全考量,手機上會顯示是否允許備份的動作,所以,必須在手機上配合操作才能允許備份某個 app 的資料。
其中,myFiles 是備份出來的檔案,這個檔案是有壓縮的。
解開的方式如下:
dd if=
bs=4K iflag=skip_bytes skip=24 | openssl zlib -d >
myFiles
.tar
myFiles
如果上面這個指令產生 zlib 的錯誤,我用以下方式可以解開壓縮檔,成為 tar 的檔案。
dd if=
myFiles
bs=4K iflag=skip_bytes skip=24 | zlib-flate -uncompress >
myFiles
.tar
再用 tar xf myFiles.tar 方式解開就完成了。
2020.12.02 更新
ref: https://stackoverflow.com/questions/29830981/error-zlib-is-an-invalid-command
如果出現 zlib 或 flate 錯誤,可以用底下方式,用 python 來解決~
dd if=myFiles bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
========================
討論串的下方還有幾種方式,我沒試,也許簡單些~
方式1
$ adb shell
$ run-as {app-package-name}
$ cd /data/data/{app-package-name}
$ chmod 777 {file}
$ cp {file} /mnt/sdcard/
再回到 linux 將檔案複製出來
$ adb pull /mnt/sdcard/{file}
方式2
adb -d shell "run-as com.example.test cat /data/data/com.example.test/databases/data.db" > data.db
直接用 print 的方式將檔案 dump 到 linux 的檔案裡。
沒有留言:
張貼留言