Làm thế nào một người có thể lấy dữ liệu (riêng tư) của ứng dụng Android của riêng mình?


97

Cố gắng kéo một tệp duy nhất bằng

adb pull /data/data/com.corp.appName/files/myFile.txt myFile.txt

thất bại với

failed to copy '/data/data/com.corp.appName/files/myFile.txt myFile.txt' to 'myFile.txt': Permission denied

mặc dù tính năng gỡ lỗi USB đã được bật trên thiết bị.

Chúng ta có thể giải quyết vấn đề thông qua lộ trình cổ xưa

adb shell
run-as com.corp.appName
cat files/myFile.txt > myFile.txt

nhưng điều này khó sử dụng đối với nhiều hơn một tệp.

Làm cách nào để kéo thư mục /data/data/com.corp.appName/files vào MacBook của tôi?

Thực hiện việc này trực tiếp hoặc thông qua phương tiện trong `/ storage / sdcard0 / myDir (từ nơi tôi có thể tiếp tục với Android File Transfer) đều ổn.

Bình luận thêm

Nó có thể là chỉ chạy

adb backup  -f myFiles com.corp.appName

sẽ tạo ra các tệp tôi đang tìm kiếm. Trong trường hợp đó, tôi đang tìm cách gỡ bỏ / giải nén bản sao lưu kết quả!


5
Trừ khi thiết bị đã được root, nếu không bạn không thể làm điều đó.
323g

Tôi hy vọng bạn sai, nhưng đề phòng, vui lòng chuyển bình luận của bạn thành câu trả lời. Bạn có thể thêm một số loại tham chiếu để sao lưu tại sao bạn nghĩ như vậy? Tôi muốn lưu tất cả các tệp rác mà các phiên bản có lỗi của chương trình của tôi đã lưu để đảm bảo rằng chương trình sắp phát hành của tôi sẽ xử lý thành thạo tất cả các loại tệp đầu vào.
Calaf

1
Điều đó có nghĩa là người ta có thể chmod thư mục from world: - x to world: rx đủ lâu để có thể tìm nạp các tệp không?
Calaf

1
@Knossos Mặc dù đó là ứng dụng của tôi, việc người dùng có thể lưu bản sao dữ liệu cá nhân mà ứng dụng đã lưu trữ trên thiết bị của họ có hợp pháp không? Xét cho cùng, dữ liệu có lẽ thuộc về chủ sở hữu thiết bị, không phải tác giả ứng dụng.
Calaf

1
Vấn đề là làm thế nào để bạn phân biệt giữa chủ sở hữu và một ứng dụng / chương trình độc hại, đang cố gắng giao tiếp với dữ liệu riêng tư của Apps của bạn. (có thể có dữ liệu cá nhân của người dùng trong)
Knossos

Câu trả lời:


101

sao lưu adb sẽ viết một bản lưu trữ dành riêng cho Android:

adb backup  -f myAndroidBackup.ab  com.corp.appName

Lưu trữ này có thể được chuyển đổi sang định dạng tar bằng cách sử dụng:

dd if=myAndroidBackup.ab bs=4K iflag=skip_bytes skip=24 | openssl zlib -d > myAndroidBackup.tar

Tài liệu tham khảo:

http://nelenkov.blogspot.ca/2012/06/unpacking-android-backups.html

Tìm kiếm "Cập nhật" tại liên kết đó.


Ngoài ra, sử dụng trình giải nén sao lưu Android để trích xuất tệp từ tệp sao lưu ( .ab) Android .


5
bs=24 skip=1là nhanh hơn nhiều so bs=1 skip=24(trên hệ thống của tôi, 38,6 MB / s vs 1,7 MB / s) :)
netvope

18
Python thay thế cho nơi openssl chưa được biên dịch với zlib: dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -(từ nguồn trên)
OJFord

6
Tôi chưa bao giờ thành công với ddlệnh trên MacBook của mình tại nơi làm việc. Thay vào đó, tôi sử dụng java -jar ./abe.jar unpack data.ab data.tar. Bạn có thể tải xuống tiện ích abe từ sourceforge.net/projects/adbextractor/files/?source=navbar
Ai đó ở đâu đó

3
Ngoài ra, tôi nhận thấy rằng tôi đã buộc phải đóng ứng dụng có dữ liệu mà tôi muốn sao lưu nếu không bản sao lưu sẽ trống! (Android 4.4.2) Đó là tác dụng tương tự như khi các chương trình manifestandroid:allowBackup="false"
Có người Một nơi nào đó

2
Thậm chí tốt hơn, trực tiếp trích xuất các tập tin vào thư mục địa phương:dd if=myAndroidBackup.ab bs=24 skip=1 | openssl zlib -d | tar -x
mreichelt

50

Tôi đã gặp sự cố tương tự nhưng đã giải quyết nó khi chạy sau:

$ adb shell
$ run-as {app-package-name}
$ cd /data/data/{app-package-name}
$ chmod 777 {file}
$ cp {file} /mnt/sdcard/

Sau đó bạn có thể chạy

$ adb pull /mnt/sdcard/{file}

1
cảm ơn người đàn ông! bạn cũng cần sử dụng "cp -r" để biến nó thành một bản sao đệ quy. stackoverflow.com/questions/39961621/…
朱 西西

31

Đây là những gì đã làm việc cho tôi:

adb -d shell "run-as com.example.test cat /data/data/com.example.test/databases/data.db" > data.db

Tôi đang in cơ sở dữ liệu trực tiếp vào tệp cục bộ.


3
Chính xác thì lệnh này đã khiến tệp db của tôi bị hỏng. Nhưng tôi đã làm cho nó hoạt động theo các bước sau: ------ adb shell ------ bên trong chạy shell run-as com.example.test ------ bên trong chạy shell cat ...db > /mnt/sdcard/file.db------ adb pull /mnt/sdcard/file.db .------ end (xin lỗi, ngắt dòng không hoạt động)
Kirill Oficerov

@KirillOficerov nó sẽ là tốt nếu những lệnh có thể được viết trong một dòng
emen

Tuyệt vời khi bạn cần 1 tệp. Đang sử dụng cái này cho cơ sở dữ liệu. Đối mặt với trường hợp bây giờ tôi cần nhiều tệp.
Dave Thomas

Vì lý do nào đó, việc sử dụng adb shellkhông hoạt động với tôi, nhưng làm theo câu trả lời này và sử dụng adb exec-outnó đã hoạt động!
EpicPandaForce

21

Trên MacOSX, bằng cách kết hợp các câu trả lời từ Calaf và Ollie Ford, câu trả lời sau đây phù hợp với tôi.

Trên dòng lệnh (hãy chắc chắn rằng adb nằm trong đường dẫn của bạn, của tôi ở ~ / Library / Android / sdk / platform-tools / adb) và với thiết bị Android của bạn được cắm vào và ở chế độ gỡ lỗi USB, hãy chạy:

 adb backup -f backup com.mypackage.myapp

Thiết bị Android của bạn sẽ yêu cầu bạn cho phép sao lưu dữ liệu của bạn. Chọn "SAO LƯU DỮ LIỆU CỦA TÔI"

Chờ một lát.

Bản sao lưu tệp sẽ xuất hiện trong thư mục mà bạn đã chạy adb.

Bây giờ chạy:

dd if=backup bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" > backup.tar

Bây giờ bạn sẽ có một tệp backup.tar mà bạn có thể mở ra như thế này:

 tar xvf backup.tar

Và xem tất cả các tệp được ứng dụng của bạn lưu trữ.


Phiên bản Mac của bạn hoạt động! Chú ý: cả hai adb backupvà các ddbước chuyển đổi tar cung cấp không có tình trạng trong khi làm việc và có thể mất vài phút nếu bạn có rất nhiều dữ liệu. Kiên nhẫn!
MechEthan

2
Tôi nhận được: "zlib.error: Lỗi -3 khi giải nén dữ liệu: kiểm tra tiêu đề không chính xác" Bản sao lưu của tôi đang yêu cầu mật khẩu để mã hóa. Phương pháp python này không yêu cầu mật khẩu để giải mã bản sao lưu. Abe.jar trong các nhận xét trong ví dụ trên yêu cầu mật khẩu, nhưng tôi không nhận được tất cả các tệp sau khi sử dụng phương pháp đó.
Dave Thomas

Nỗ lực thứ hai của tôi với abe.jar trên một bản sao lưu được mã hóa đã hoạt động.
Dave Thomas

7

Các phiên bản mới hơn của Android Studio bao gồm Trình khám phá tệp thiết bị mà tôi nhận thấy là một phương pháp GUI tiện dụng để tải xuống tệp từ Nexus 7 đang phát triển của tôi.

Bạn phải đảm bảo rằng bạn đã bật USB Debugging trên thiết bị

  1. Nhấp vào View> Tool Windows> Device File Explorer hoặc nhấp vào nút Device File Explorer trên thanh cửa sổ công cụ để mở Device File Explorer.
  2. Chọn một thiết bị từ danh sách thả xuống.
  3. Tương tác với nội dung thiết bị trong cửa sổ trình khám phá tệp. Nhấp chuột phải vào tệp hoặc thư mục để tạo tệp hoặc thư mục mới, lưu tệp hoặc thư mục đã chọn vào máy của bạn, tải lên, xóa hoặc đồng bộ hóa. Nhấp đúp vào tệp để mở tệp đó trong Android Studio.

    Android Studio lưu các tệp bạn mở theo cách này trong một thư mục tạm thời bên ngoài dự án của bạn. Nếu bạn thực hiện sửa đổi đối với tệp bạn đã mở bằng Trình khám phá tệp thiết bị và muốn lưu các thay đổi của mình trở lại thiết bị, bạn phải tải phiên bản đã sửa đổi của tệp lên thiết bị theo cách thủ công.

chương trình quản lý dữ liệu

Tài liệu đầy đủ


6

Bạn có thể sử dụng tập lệnh shell này bên dưới. Nó cũng có thể kéo các tệp từ bộ nhớ cache của ứng dụng, không giống như adb backupcông cụ:

#!/bin/sh

if [ -z "$1" ]; then 
    echo "Sorry script requires an argument for the file you want to pull."
    exit 1
fi

adb shell "run-as com.corp.appName cat '/data/data/com.corp.appNamepp/$1' > '/sdcard/$1'"
adb pull "/sdcard/$1"
adb shell "rm '/sdcard/$1'"

Sau đó, bạn có thể sử dụng nó như thế này:

./pull.sh files/myFile.txt
./pull.sh cache/someCachedData.txt

10
Phần tốt nhất là khi bạn không đưa ra lý lẽ và sau đó rm /sdcard/thay thế, may mắn là không -rf.
TWiStErRob

3
Bạn có thể chỉ mèo trực tiếp đến tệp trên máy chủ: "adb shell run-as com.w Anything.Fnord cat /data/data/com.w Anything.Fnord/databases/logging.db> / tmp / foo" (where / tmp / foo là một tập tin trên máy chủ, không phải là thiết bị android)
James Moore

Vừa mới nhận ra @ dave-thomas đã khắc phục sự cố một lúc trước. Đang xóa phiếu phản đối của tôi.
Don Hatch

Hoặc không :-( "Phiếu bầu của bạn hiện đã bị khóa trừ khi câu trả lời này được chỉnh sửa."
Don Hatch

TBH Tôi không hiểu ồn ào về chuyện này. Tập lệnh (gốc) sẽ không bao giờ xóa thư mục (thiếu chuyển đổi -rf), trừ khi nó trống. Tôi đã không kiểm tra nhưng ngay cả khi thư mục trống thì tôi nghi ngờ rằng tập lệnh xóa thư mục vì đó là một điểm gắn kết. Kịch bản trông nguy hiểm, nhưng nó không bao giờ ...
Tamas

5

Nếu bạn đang sử dụng máy Mac và điện thoại Samsung, đây là những gì bạn phải làm (vì run-as không hoạt động trên Samsung và zlib không hoạt động trên máy Mac)

  1. Sao lưu thư mục dữ liệu ứng dụng của bạn adb backup -f /Users/username/Desktop/data.ab com.example

  2. Bạn sẽ được yêu cầu nhập mật khẩu để mã hóa trong Điện thoại của mình, đừng nhập bất kỳ. Chỉ cần nhấn vào "Sao lưu dữ liệu của tôi". Xem Làm thế nào để sử dụng BackUp?

  3. Sau khi sao lưu thành công, bạn sẽ thấy data.abtệp trên Màn hình nền của mình. Bây giờ chúng ta cần chuyển đổi nó sang tarđịnh dạng.

  4. Sử dụng Android Backup Extractor cho việc này. Tải xuống | Mã nguồn

  5. Tải xuống và bạn sẽ thấy abe.jartệp. Thêm điều này vào biến PATH của bạn.

  6. Thực thi điều này để tạo tệp tar :java -jar abe.jar unpack /Users/username/Desktop/data.ab /Users/username/Desktop/data.tar

  7. Giải nén tệp data.tar để truy cập tất cả các tệp


2
Tiếp theo chính xác này và data.tarchỉ chiết xuất đến một data.tar.cpgz@henry
sử dụng 44.651

2

Câu trả lời này dựa trên kinh nghiệm của tôi với các câu trả lời khác và nhận xét trong câu trả lời. Hy vọng của tôi là tôi có thể giúp đỡ ai đó trong hoàn cảnh tương tự.

Tôi đang làm điều này trên OSX thông qua thiết bị đầu cuối.

Trước đây câu trả lời của Vinicius Avellar rất hiệu quả đối với tôi. Tôi hầu như chỉ cần cơ sở dữ liệu từ thiết bị từ một ứng dụng gỡ lỗi.

Hôm nay tôi có một trường hợp sử dụng mà tôi cần nhiều tệp riêng tư . Tôi đã kết thúc với hai giải pháp hoạt động tốt cho trường hợp này.

  1. Sử dụng câu trả lời được chấp nhận cùng với nhận xét cụ thể OSX của Ai đó ở đâu đó. Tạo một bản sao lưu và sử dụng giải pháp của bên thứ 3, sourceforge.net/projects/adbextractor/files/?source=navbar để giải nén thành một tệp tar. Tôi sẽ viết thêm về trải nghiệm của tôi với giải pháp này ở cuối câu trả lời này. Cuộn xuống nếu đây là những gì bạn đang tìm kiếm.

  2. Một giải pháp nhanh hơn mà tôi đã giải quyết. Tôi đã tạo một tập lệnh để kéo nhiều tệp tương tự như câu trả lời của Tamas. Tôi có thể làm theo cách này vì ứng dụng của tôi là ứng dụng gỡ lỗi và tôi có quyền truy cập để chạy như trên thiết bị của mình. Nếu bạn không có quyền truy cập run-vì phương pháp này sẽ không hoạt động với bạn trên OSX.

Đây là kịch bản của tôi để kéo nhiều tệp riêng tư mà tôi sẽ chia sẻ với bạn, độc giả, người cũng đang điều tra câu hỏi tuyệt vời này;):

#!/bin/bash
#
# Strict mode: http://redsymbol.net/articles/unofficial-bash-strict-mode/
set -euo pipefail
IFS=$'\n\t'

# 
# Usage: script -f fileToPull -p packageName
# 

# This script is for pulling private files from an Android device
# using run-as. Note: not all devices have run-as access, and
# application must be a debug version for run-as to work.
# 
# If run-as is deactivated on your device use one of the
# alternative methods here:
# http://stackoverflow.com/questions/15558353/how-can-one-pull-the-private-data-of-ones-own-android-app
# 
# If you have encrypted backup files use:
# sourceforge.net/projects/adbextractor/files/?source=navbar 
# From comments in the accepted answer in the above SO question
# 
# If your files aren't encrypted use the accepted answer 
# ( see comments and other answers for OSX compatibility )
# 
# This script is open to expansions to allow selecting 
# device used. Currently first selected device from
# adb shell will be used.

#Check we have one connected device
adb devices -l | grep -e 'device\b' > /dev/null

if [ $? -gt 0 ]; then
    echo "No device connected to adb."
    exit 1
fi

# Set filename or directory to pull from device
# Set package name we will run as
while getopts f:p: opt; do
    case $opt in
        f)
            fileToPull=$OPTARG
            ;;
        p)
            packageName=$OPTARG
            ;;
    esac
done;

# Block file arg from being blank
if [ -z "$fileToPull" ]; then
    echo "Please specify file or folder to pull with -f argument"
    exit 1
fi

# Block package name arg from being blank
if [ -z "$packageName" ]; then
    echo "Please specify package name to run as when pulling file"
    exit 1
fi

# Check package exists
adb shell pm list packages | grep "$packageName" > /dev/null
if [ $? -gt 0 ]; then
    echo "Package name $packageName does not exist on device"
    exit 1
fi

# Check file exists and has permission with run-as
fileCheck=`adb shell "run-as $packageName ls $fileToPull"`
if [[ $fileCheck =~ "Permission denied" ]] || [[ $fileCheck =~ "No such file or directory" ]]; then
    echo "Error: $fileCheck"
    echo "With file -> $fileToPull"
    exit 1
fi

# Function to pull private file
#
# param 1 = package name
# param 2 = file to pull
# param 3 = output file
function pull_private_file () {

    mkdir -p `dirname $3`

    echo -e "\033[0;35m***" >&2
    echo -e "\033[0;36m Coping file $2 -> $3" >&2
    echo -e "\033[0;35m***\033[0m" >&2

    adb shell "run-as $1 cat $2" > $3
}

# Check if a file is a directory
# 
# param 1 = directory to check
function is_file_dir() {

    adb shell "if [ -d \"$1\" ]; then echo TRUE; fi"
}

# Check if a file is a symbolic link
# 
# param 1 = directory to check
function is_file_symlink() {

    adb shell "if [ -L \"$1\" ]; then echo TRUE; fi"
}

# recursively pull files from device connected to adb
# 
# param 1 = package name
# param 2 = file to pull
# param 3 = output file
function recurse_pull_private_files() {

    is_dir=`is_file_dir "$2"`
    is_symlink=`is_file_symlink "$2"`

    if [ -n "$is_dir" ]; then

        files=`adb shell "run-as $1 ls \"$2\""`

        # Handle the case where directory is a symbolic link
        if [ -n "$is_symlink" ]; then
            correctPath=`adb shell "run-as $1 ls -l \"$2\"" | sed 's/.*-> //' | tr -d '\r'`
            files=`adb shell "run-as $1 ls \"$correctPath\""`
        fi

        for i in $files; do

            # Android adds nasty carriage return that screws with bash vars
            # This removes it. Otherwise weird behavior happens
            fileName=`echo "$i" | tr -d '\r'` 

            nextFile="$2/$fileName"
            nextOutput="$3/$fileName"
            recurse_pull_private_files "$1" "$nextFile" "$nextOutput"
        done
    else

        pull_private_file "$1" "$2" "$3"
    fi
}

recurse_pull_private_files "$packageName" "$fileToPull" "`basename "$fileToPull"`"

Gist: https://gist.github.com/davethomas11/6c88f92c6221ffe6bc26de7335107dd4


Quay lại phương pháp 1 , giải mã bản sao lưu bằng Android Backup Extractor

Dưới đây là các bước tôi đã thực hiện trên máy Mac của mình và các vấn đề tôi đã gặp phải:

Đầu tiên, tôi xếp hàng đợi một bản sao lưu (và đặt mật khẩu để mã hóa bản sao lưu của mình, thiết bị của tôi yêu cầu nó):

adb backup -f myAndroidBackup.ab  com.corp.appName

Thứ hai, tôi chỉ tải xuống abe.jar từ đây: https://sourceforge.net/projects/adbextractor/files/abe.jar/download

Tiếp theo tôi chạy:

java -jar ./abe.jar unpack myAndroidBackup.ab myAndroidBackup.tar

Tại thời điểm này, tôi nhận được một thông báo lỗi. Vì tệp lưu trữ của tôi được mã hóa, java đã cho tôi một lỗi mà tôi cần cài đặt một số thư viện chính sách bảo mật.

  • Vì vậy, tôi đã truy cập http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html và tải xuống các lọ chính sách bảo mật mà tôi cần. Bây giờ trong trường hợp của tôi, hướng dẫn cài đặt đã cho tôi biết vị trí sai để đặt các tệp jar. Nó nói rằng vị trí thích hợp là <java-home> / lib / security . Tôi đặt chúng ở đó đầu tiên và vẫn nhận được thông báo lỗi. Vì vậy, tôi đã điều tra và trên máy Mac của tôi với Java 1.8, vị trí chính xác để đặt chúng là: <java-home> / jre / lib / security . Tôi đảm bảo sao lưu các lọ chính sách ban đầu và đặt chúng ở đó. Vola Tôi đã có thể nhập mật khẩu bằng abe.jar và giải mã thành tệp tar.

Cuối cùng tôi vừa chạy ( sau khi chạy lại lệnh trước đó )

tar xvf myAndroidBackup.tar

Bây giờ điều quan trọng cần lưu ý là nếu bạn có thể vừa chạy vừa mèo, thì nó sẽ nhanh hơn nhiều. Một, bạn chỉ nhận được các tệp bạn muốn chứ không phải toàn bộ ứng dụng. Thứ hai, càng nhiều tệp (+ mã hóa đối với tôi) khiến tốc độ truyền chậm hơn. Vì vậy, biết thực hiện theo cách này là rất quan trọng nếu bạn không có run-as trên OSX, nhưng tập lệnh trước tiên phải là goto cho một ứng dụng gỡ lỗi.

Phiền bạn, tôi mới viết nó hôm nay và thử nghiệm nó một vài lần, vì vậy hãy thông báo cho tôi nếu có bất kỳ lỗi nào!


1
Nhờ phản hồi của bạn với phương pháp số 1, tôi đã có thể lấy và khám phá bản sao lưu gói từ một ứng dụng nhắm mục tiêu gỡ lỗi được cài đặt trên thiết bị sản xuất không được root, nhưng bản sao lưu chỉ chứa tệp kê khai. Với phương pháp số 2, tôi đã tải xuống tất cả dữ liệu của ứng dụng nhưng các tệp nhị phân (tức là tệp SQLite) không thể đọc được. Tôi thêm một giải pháp dựa trên tập lệnh của bạn phù hợp với tôi.
Paolone

1

Sau khi thiết lập các quyền phù hợp bằng cách thêm mã sau:

File myFile = ...;
myFile.setReadable(true, false); // readable, not only for the owner

adb pull hoạt động như mong muốn.

xem File.setReadable ()


Bạn có thể thay đổi các quyền trong khi gỡ lỗi, nhưng tại một số thời điểm gần phát hành, làm như vậy sẽ đánh bại tính năng bảo vệ được cung cấp theo mặc định (để ngăn các ứng dụng khác truy cập / làm rối các tệp). Do đó, một cách để nhà phát triển truy cập các tệp mặc dù chúng chỉ là người dùng có thể đọc / ghi được là mong muốn hơn.
Calaf

1

Bắt đầu tập lệnh Dave Thomas Tôi đã có thể viết giải pháp của riêng mình để khắc phục 2 vấn đề:

  1. bản sao lưu của tôi chỉ chứa tệp kê khai
  2. tệp nhị phân có với Dave Thomas ở nơi không thể đọc được

Đây là tập lệnh của tôi, sao chép dữ liệu ứng dụng vào sdcard và sau đó kéo nó

#Check we have one connected device
adb devices -l | grep -e 'device\b' > /dev/null

if [ $? -gt 0 ]; then
    echo "No device connected to adb."
    exit 1
fi

# Set filename or directory to pull from device
# Set package name we will run as
while getopts f:p: opt; do
    case $opt in
        f)
            fileToPull=$OPTARG
            ;;
        p)
            packageName=$OPTARG
            ;;
    esac
done;

# Block package name arg from being blank
if [ -z "$packageName" ]; then
    echo "Please specify package name to run as when pulling file"
    exit 1
fi

# Check package exists
adb shell pm list packages | grep "$packageName" > /dev/null
if [ $? -gt 0 ]; then
    echo "Package name $packageName does not exist on device"
    exit 1
fi

    adb shell "run-as $packageName cp -r /data/data/$packageName/ /sdcard/$packageName"
    adb pull /sdcard/$packageName
    adb shell rm -rf /sdcard/$packageName

1

Tương tự như câu trả lời của Tamas , đây là một lớp lót dành cho Mac OS X để tìm nạp tất cả các tệp cho ứng dụng your.app.idtừ thiết bị của bạn và lưu chúng vào (trong trường hợp này) ~/Desktop/your.app.id:

(
    id=your.app.id &&
    dest=~/Desktop &&
    adb shell "run-as $id cp -r /data/data/$id /sdcard" &&
    adb -d pull "/sdcard/$id" "$dest" &&
    if [ -n "$id" ]; then adb shell "rm -rf /sdcard/$id"; fi
)
  • Loại trừ -dđể kéo khỏi trình giả lập
  • Không làm chậm các biến phiên của bạn
  • Bạn có thể dán toàn bộ khối vào Terminal.app (hoặc xóa các dòng mới nếu muốn)

0

Đã sao lưu dữ liệu trò chơi bằng apk . Nougat Oneplus 2.

**adb backup "-apk com.nekki.shadowfight" -f "c:\myapk\samsung2.ab"**

adb backup -f myapp.ab -apk com.myapp # backup on one device adb restore myapp.ab # restore to the same or any other device
Steven Linn

0

Điều đó có nghĩa là người ta có thể chmod thư mục from world: - x to world: rx đủ lâu để có thể tìm nạp các tệp không?

Đúng chính xác. Thật kỳ lạ, bạn cũng cần tệp xđược đặt bit. (ít nhất là trên Android 2.3)

chmod 755 tất cả các cách đã làm việc để sao chép một tệp (nhưng bạn nên hoàn nguyên quyền sau đó, nếu bạn định tiếp tục sử dụng thiết bị).


0

bạn có thể làm:

adb pull / storage / emulated / 0 / Android / data //


2
Đừng hiểu sai ý tôi nhưng, bạn đã đọc đúng câu hỏi chưa? OP đang yêu cầu lấy dữ liệu 'riêng tư' KHÔNG phải 'công khai'
baburao
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.