व्यक्ति स्वयं के Android एप्लिकेशन का निजी (निजी) डेटा कैसे खींच सकता है?


97

एक एकल फ़ाइल का उपयोग करने का प्रयास कर रहा है

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

के साथ विफल रहता है

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

इसके बावजूद कि डिवाइस पर USB डिबगिंग सक्षम है।

हम आर्कटिक मार्ग के माध्यम से समस्या के आसपास जा सकते हैं

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

लेकिन यह एक से अधिक फ़ाइल के लिए अस्पष्ट है।

मैं अपने मैकबुक पर निर्देशिका /data/data/com.corp.appName/files कैसे खींच सकता हूं?

ऐसा करना सीधे या पारगमन के माध्यम से `/ भंडारण / sdcard0 / myDir (जहां से मैं Android फ़ाइल स्थानांतरण के साथ जारी रख सकता हूं) ठीक है।

अतिरिक्त टिप्पणी

हो सकता है कि बस चल रही हो

adb backup  -f myFiles com.corp.appName

उन फ़ाइलों को जनरेट करूँगा जिनकी मुझे तलाश है। उस मामले में मैं परिणामी बैकअप को अनटार / अनज़िप करने का रास्ता ढूंढ रहा हूँ!


5
जब तक डिवाइस निहित नहीं है, आप बस ऐसा नहीं कर सकते।
323go

मुझे आशा है कि आप गलत हैं, लेकिन सिर्फ मामले में, कृपया अपनी टिप्पणी को एक उत्तर दें। क्या आप ऐसा सोचने के लिए किसी तरह का संदर्भ जोड़ सकते हैं? मैं उन सभी जंक फ़ाइलों को सहेजना चाहूंगा जिन्हें मेरे प्रोग्राम के छोटी कारों ने सड़क के नीचे सुनिश्चित करने के लिए सहेजा है कि मेरा निकट-से-रिलीज़ प्रोग्राम इनायत से सभी प्रकार की इनपुट फ़ाइलों को संभाल लेगा।
कैलाफ

1
क्या इसका मतलब यह है कि कोई दुनिया से निर्देशिका को चकमा दे सकता है: - एक्स से दुनिया: आरएक्स लंबे समय तक फाइलों को लाने में सक्षम है?
कैलाफ

1
@Knossos इस बात के बावजूद कि यह मेरा ऐप है, क्या यह उपयोगकर्ताओं के लिए वैध नहीं है कि वे उन निजी डेटा की एक प्रति सहेज सकें जो ऐप ने अपने उपकरणों पर संग्रहीत किया है? आखिरकार, डेटा संभवतः डिवाइस के मालिक का है, ऐप लेखक का नहीं।
कैलफ

1
समस्या यह है कि आप अपने एप्लिकेशन निजी डेटा के साथ इंटरफ़ेस करने का प्रयास करते हुए, स्वामी और एक दुर्भावनापूर्ण ऐप / प्रोग्राम के बीच अंतर कैसे करते हैं। (जिसमें यूजर्स का निजी डेटा हो सकता है)
नोसोस

जवाबों:


101

adb backup एक Android- विशिष्ट संग्रह लिखेगा:

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

इस संग्रह को टार प्रारूप में परिवर्तित किया जा सकता है:

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

संदर्भ:

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

उस लिंक पर "अपडेट" के लिए खोजें।


वैकल्पिक रूप से, एंड्रॉइड बैकअप ( ) फ़ाइल से फ़ाइलों को निकालने के लिए एंड्रॉइड बैकअप एक्सट्रैक्टर का उपयोग करें .ab


5
bs=24 skip=1की तुलना में बहुत तेज़ है bs=1 skip=24(मेरे सिस्टम पर, 38.6 MB / s बनाम 1.7 MB / s) :)
netvope

18
पाइथन विकल्प जहाँ dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
ओपनशेल

6
मुझे कभी भी ddअपने मैकबुक पर कमांड के साथ कोई सफलता नहीं मिली । इसके बजाय, मैं उपयोग करता हूं java -jar ./abe.jar unpack data.ab data.tar। आप sourceforge.net/projects/adbextractor/files/?source=navbar
कोई कहीं

3
इसके अलावा, मैंने देखा कि मुझे उस ऐप को बंद करना पड़ा है जिसका डेटा मैं बैकअप लेना चाहता हूं अन्यथा बैकअप खाली है! (एंड्रॉइड 4.4.2) जिसका प्रभाव उसी तरह होता है जब प्रकट होता हैandroid:allowBackup="false"
कोई व्यक्ति कहीं

2
और भी बेहतर, सीधे फ़ाइलों को स्थानीय निर्देशिका में निकालें:dd if=myAndroidBackup.ab bs=24 skip=1 | openssl zlib -d | tar -x
mreichelt

50

मैं एक ही समस्या थी, लेकिन इसे हल करने के बाद चल रहा है:

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

इसके बाद आप दौड़ सकते हैं

$ adb pull /mnt/sdcard/{file}

1
धन्यवाद दोस्त! आपको इसे पुनरावर्ती प्रतिलिपि बनाने के लिए "cp -r" का उपयोग करने की भी आवश्यकता है। stackoverflow.com/questions/39961621/…
'

31

यहाँ मेरे लिए क्या काम किया गया है:

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

मैं डेटाबेस को सीधे स्थानीय फ़ाइल में प्रिंट कर रहा हूं।


3
वास्तव में इस आदेश के कारण मेरी db फ़ाइल दूषित हो गई है। लेकिन मैंने इसे निम्न चरणों के साथ काम करने के लिए बनाया: ------ adb shell ------ शेल रन के run-as com.example.test अंदर ------ शेल रन के अंदर cat ...db > /mnt/sdcard/file.db------ adb pull /mnt/sdcard/file.db .------ एंड (क्षमा करें, लाइन ब्रेक काम नहीं कर रहे हैं)
Kirill oficerov

@KillillOficerov यह अच्छा होगा अगर उन आदेशों को एक पंक्ति में लिखा जा सकता है
एमेन

जब आपको 1 फ़ाइल की आवश्यकता हो तो बढ़िया। डेटाबेस के लिए इसका उपयोग किया गया। मामले का सामना करते हुए अब मुझे कई फाइलों की आवश्यकता है।
डेव थॉमस

किसी कारण से adb shellमेरे लिए काम नहीं किया, लेकिन इस जवाब का पालन करते हुए और adb exec-outकाम करते हुए!
एपिकपांडाफ़ोर्स

21

मैकओएसएक्स पर, कैलाफ और ओली फोर्ड के उत्तरों को मिलाकर, निम्नलिखित ने मेरे लिए काम किया।

कमांड लाइन पर (सुनिश्चित करें कि adb आपके रास्ते में है, मेरा ~ ~ लाइब्रेरी / एंड्रॉइड / sdk / प्लेटफ़ॉर्म-टूल्स / adb पर था) और आपके एंड्रॉइड डिवाइस के साथ और यूएसबी डिबगिंग मोड में प्लग इन करें, चलाएं:

 adb backup -f backup com.mypackage.myapp

आपका Android डिवाइस आपसे आपके डेटा का बैकअप लेने की अनुमति मांगेगा। "BACKUP MY DATA" चुनें

कुछ क्षण रुकिए।

फ़ाइल बैकअप उस निर्देशिका में दिखाई देगा जहाँ आपने adb चलाया था।

अब चलाएं:

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

अब आपके पास एक backup.tar फ़ाइल होगी, जिसे आप इस तरह से खोल सकते हैं:

 tar xvf backup.tar

और अपने एप्लिकेशन द्वारा संग्रहीत सभी फ़ाइलों को देखें।


आपका मैक संस्करण काम करता है! नोट: दोनों adb backupऔर ddटार रूपांतरण चरण काम करते समय कोई स्थिति प्रदान नहीं करते हैं और आपके पास बहुत अधिक डेटा होने पर मिनट लग सकते हैं। धैर्य रखें!
मेकथन

2
मुझे मिल रहा है: "zlib.error: डेटा को डिकम्प्रेस करते समय त्रुटि -3: गलत हेडर चेक" मेरा बैकअप एन्क्रिप्ट करने के लिए पासवर्ड के लिए पूछ रहा है। यह अजगर विधि बैकअप को डिक्रिप्ट करने के लिए पासवर्ड नहीं मांगती है। उपरोक्त उदाहरण में टिप्पणियों में abe.jar पासवर्ड मांगता है, लेकिन मुझे उस पद्धति का उपयोग करने के बाद सभी फाइलें नहीं मिलीं।
डेव थॉमस

एक एन्क्रिप्टेड बैकअप पर abe.jar के साथ मेरा दूसरा प्रयास काम किया।
डेव थॉमस

7

एंड्रॉइड स्टूडियो के नए संस्करणों में डिवाइस फ़ाइल एक्सप्लोरर शामिल है जिसे मैंने अपने विकास नेक्सस 7 से फ़ाइलों को डाउनलोड करने का एक आसान GUI तरीका पाया है।

आपको यह सुनिश्चित करना होगा कि आपने डिवाइस पर USB डिबगिंग सक्षम किया है

  1. डिवाइस फ़ाइल एक्सप्लोरर को खोलने के लिए उपकरण विंडो पट्टी में व्यू> टूल विंडोज> डिवाइस फाइल एक्सप्लोरर पर क्लिक करें या डिवाइस फाइल एक्सप्लोरर बटन पर क्लिक करें।
  2. ड्रॉप डाउन सूची से एक उपकरण का चयन करें।
  3. फ़ाइल एक्सप्लोरर विंडो में डिवाइस सामग्री के साथ बातचीत करें। नई फ़ाइल या निर्देशिका बनाने के लिए किसी फ़ाइल या निर्देशिका पर राइट-क्लिक करें, चयनित फ़ाइल या निर्देशिका को अपनी मशीन पर सहेजें, अपलोड करें, हटाएं या सिंक्रनाइज़ करें। Android स्टूडियो में इसे खोलने के लिए किसी फ़ाइल को डबल-क्लिक करें।

    एंड्रॉइड स्टूडियो आपके प्रोजेक्ट के बाहर अस्थायी निर्देशिका में इस तरह से खुलने वाली फाइलों को सहेजता है। यदि आप डिवाइस फ़ाइल एक्सप्लोरर का उपयोग करके खोले गए फ़ाइल में संशोधन करते हैं, और अपने परिवर्तनों को डिवाइस पर वापस सहेजना चाहते हैं, तो आपको फ़ाइल का संशोधित संस्करण डिवाइस पर मैन्युअल रूप से अपलोड करना होगा।

फाइल ढूँढने वाला

पूर्ण प्रलेखन


6

आप नीचे इस शेल स्क्रिप्ट का उपयोग कर सकते हैं। यह adb backupटूल की तरह ऐप कैश से भी फाइल खींचने में सक्षम है :

#!/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'"

तो आप इसे इस तरह से उपयोग कर सकते हैं:

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

10
सबसे अच्छा हिस्सा यह है कि जब आप तर्क नहीं देते हैं और फिर rm /sdcard/विकल्प देते हैं, तो भाग्यशाली है कि यह नहीं है -rf
ट्वीस्ट्रीमोब

3
आप होस्ट पर सीधे एक फ़ाइल के लिए बिल्ली कर सकते हैं: "adb shell run-as com। / foo होस्ट मशीन पर एक फ़ाइल है, न कि एंड्रॉइड डिवाइस)
जेम्स मूर

अभी कुछ समय पहले एहसास हुआ कि @ dave-thomas ने समस्या को ठीक कर दिया। मेरा उतरना दूर करना।
डॉन हैच

या नहीं :-( "जब तक इस जवाब को संपादित नहीं किया जाता है तब तक आपका वोट लॉक हो जाता है।"
डॉन हैच

टीबीएच मैं इस बारे में उपद्रव नहीं समझता। (मूल) स्क्रिप्ट ने निर्देशिका को कभी नहीं हटाया (गायब -rf स्विच), जब तक कि यह खाली न हो। मैंने जाँच नहीं की है, लेकिन फिर भी अगर निर्देशिका खाली है तो मुझे संदेह है कि स्क्रिप्ट निर्देशिका को हटा देती है क्योंकि यह एक माउंट बिंदु है। स्क्रिप्ट खतरनाक लग रही थी, लेकिन यह कभी नहीं थी ...
तमस

5

आप एक मैक मशीन और एक सैमसंग फोन का उपयोग कर रहे हैं, तो यह आप क्या करना है (के बाद से है run-as काम नहीं करता है सैमसंग पर और zlib काम नहीं करता मैक पर)

  1. अपने ऐप के डेटा डायरेक्टरी का बैकअप लें adb backup -f /Users/username/Desktop/data.ab com.example

  2. आपको अपने फ़ोन में एन्क्रिप्ट करने के लिए पासवर्ड मांगा जाएगा, कोई भी प्रवेश न करें। बस "मेरे डेटा का बैकअप लें" पर टैप करें। देखें कि BackUp कैसे लें?

  3. एक बार सफलतापूर्वक बैकअप लेने के बाद, आप data.abअपने डेस्कटॉप में फ़ाइल देखेंगे । अब हमें इसे tarप्रारूप में बदलने की आवश्यकता है ।

  4. इसके लिए Android Backup Extractor का उपयोग करें। डाउनलोड करें | सोर्स कोड

  5. इसे डाउनलोड करें और आप abe.jarफ़ाइल देखेंगे । इसे अपने पथ चर में जोड़ें।

  6. टार फ़ाइल उत्पन्न करने के लिए इसे निष्पादित करें :java -jar abe.jar unpack /Users/username/Desktop/data.ab /Users/username/Desktop/data.tar

  7. सभी फ़ाइलों तक पहुँचने के लिए data.tar फ़ाइल को निकालें


2
इसे ठीक तरह से और data.tarकेवल अर्क के लिए data.tar.cpgzअनुसरण किया गया है
user-44651

2

यह उत्तर अन्य उत्तरों के साथ मेरे अनुभव और उत्तरों में टिप्पणियों के आधार पर है। मेरी आशा है कि मैं ऐसी ही स्थिति में किसी की मदद कर सकता हूं।

मैं टर्मिनल के माध्यम से OSX पर यह कर रहा हूं ।

पहले विनीसियस एवलर के जवाब ने मेरे लिए बहुत अच्छा काम किया। मैं केवल एक डिबग एप्लिकेशन से डिवाइस से डेटाबेस की आवश्यकता के अधिकांश समय था।

आज मेरे पास एक उपयोग का मामला था जहां मुझे कई निजी फ़ाइलों की आवश्यकता थी । मैंने दो समाधानों के साथ समाप्त किया, जिन्होंने इस मामले के लिए अच्छा काम किया।

  1. कहीं किसी के OSX विशिष्ट टिप्पणियों के साथ स्वीकृत उत्तर का उपयोग करें। एक बैकअप बनाएं और एक टार में अनपैक करने के लिए 3rd पार्टी समाधान, sourceforge.net/projects/adbextractor/files/?source=navbar का उपयोग करें । मैं इस उत्तर के नीचे इस समाधान के साथ अपने अनुभव के बारे में अधिक लिखूंगा। नीचे स्क्रॉल करें यदि यह आप के लिए क्या देख रहे हैं।

  2. एक तेज समाधान जो मैंने साथ तय किया। मैंने तमस के उत्तर के समान कई फाइलें खींचने के लिए एक स्क्रिप्ट बनाई। मैं इसे इस तरह से करने में सक्षम हूं क्योंकि मेरा ऐप एक डिबग ऐप है और मेरी डिवाइस पर रन-ऐस की पहुंच है। यदि आपके पास चलाने के लिए पहुंच नहीं है, तो यह विधि आपके लिए OSX पर काम नहीं करेगी।

यहाँ कई निजी फ़ाइलों को खींचने के लिए मेरी स्क्रिप्ट है, जिसे मैं आपके साथ साझा करूंगा, पाठक, जो इस भयानक जांच की भी जाँच कर रहा है;);

#!/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


पद्धति 1 पर वापस , Android बैकअप चिमटा का उपयोग करके बैकअप को डिक्रिप्ट करना

यहां मैंने अपने मैक पर उठाए गए कदमों, और उन मुद्दों को बताया है जो मेरे सामने आए:

पहले मैंने एक बैकअप कतारबद्ध किया (और अपने बैकअप को एन्क्रिप्ट करने के लिए एक पासवर्ड सेट किया, मेरे डिवाइस को इसकी आवश्यकता थी):

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

दूसरा मैंने यहाँ से सिर्फ abe.jar डाउनलोड किया: https://sourceforge.net/projects/adbextractor/files/abe.jar/download

आगे मैं भागा:

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

इस बिंदु पर मुझे एक त्रुटि संदेश मिला। क्योंकि मेरा संग्रह एन्क्रिप्ट किया गया है, जावा ने मुझे एक त्रुटि दी जो मुझे कुछ सुरक्षा नीति पुस्तकालयों को स्थापित करने के लिए आवश्यक थी।

  • इसलिए मैं http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html पर गया और मुझे आवश्यक सुरक्षा नीति डाउनलोड की गई। अब मेरे मामले में स्थापित निर्देशों ने मुझे जार फ़ाइलों को डालने के लिए गलत स्थान बताया। यह कहता है कि उचित स्थान <जावा-होम> / परिवाद / सुरक्षा है । मैंने उन्हें पहले वहाँ रखा और फिर भी त्रुटि संदेश मिला। इसलिए मैंने जांच की और मेरे मैक पर जावा 1.8 के साथ उन्हें डालने के लिए सही जगह थी: <जावा-होम> / jre / lib / सुरक्षा । मैंने मूल नीति जार का बैकअप लेना सुनिश्चित किया, और उन्हें वहां रखा। वोला I, abe.jar के साथ एक पासवर्ड दर्ज करने और एक टार फ़ाइल को डिक्रिप्ट करने में सक्षम था।

अंत में मैं सिर्फ भागा ( पिछली कमांड को फिर से चलाने के बाद )

tar xvf myAndroidBackup.tar

अब यह ध्यान रखना महत्वपूर्ण है कि यदि आप बस रन-ऐस और कैट कर सकते हैं, तो यह बहुत तेज है। एक, आपको केवल वे फ़ाइलें मिलती हैं जो आप चाहते हैं और संपूर्ण एप्लिकेशन नहीं। दो, अधिक फाइलें (मेरे लिए + एन्क्रिप्शन) यह हस्तांतरण करने के लिए धीमी बनाता है। तो इस तरह से जानना महत्वपूर्ण है यदि आपके पास OSX पर रन-अप नहीं है, लेकिन डिबग एप्लिकेशन के लिए स्क्रिप्ट पहले गोटो होनी चाहिए।

माइंड यू, मैंने अभी इसे लिखा है और इसे कुछ बार परीक्षण किया है, इसलिए कृपया मुझे किसी भी कीड़े की सूचना दें!


1
विधि # 1 के साथ आपकी प्रतिक्रिया के लिए धन्यवाद, मैं उत्पादन गैर-निहित डिवाइस पर स्थापित डिबग लक्षित ऐप से पैकेज बैकअप प्राप्त करने और उसका पता लगाने में सक्षम हूं, लेकिन बैकअप में केवल प्रकट फ़ाइल शामिल है। पद्धति # 2 के साथ मैंने सभी एप्लिकेशन का डेटा डाउनलोड किया, लेकिन बायनेरिज़ (यानी SQLite फ़ाइलें) अपठनीय हैं। मैं आपके लिए स्क्रिप्ट पर आधारित एक समाधान जोड़ता हूं जो मेरे लिए काम करता है।
पाओलोने

1

निम्नलिखित कोड जोड़कर सही अनुमतियाँ सेट करने के बाद:

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

adb pull इच्छानुसार काम करता है।

File.setReadable देखें ()


1
डिबगिंग करते समय अनुमतियों को बदलना सभी सही है, लेकिन रिलीज के निकट कुछ बिंदु पर ऐसा करने से डिफ़ॉल्ट रूप से दी जाने वाली सुरक्षा को पराजित किया जाएगा (अन्य एप्लिकेशन को फ़ाइलों के साथ पहुंचने / गड़बड़ करने से रोकने के लिए)। इसलिए, डेवलपर के लिए फ़ाइलों को एक्सेस करने का एक तरीका भले ही वे उपयोगकर्ता-पठनीय / योग्य हों, अधिक वांछनीय है।
Calaf

1

डेव थॉमस स्क्रिप्ट को शुरू करने से मैं 2 समस्याओं को दूर करने के लिए अपना समाधान लिखने में सक्षम हो गया हूं:

  1. मेरे बैकअप में केवल प्रकट फ़ाइल थी
  2. द्विआधारी फाइलें डेव थॉमस के साथ मिलीं जहां अपठनीय थी

यह मेरी स्क्रिप्ट है, जो sdcard के लिए ऐप डेटा को कॉपी करती है और फिर इसे खींचती है

#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

तमस के उत्तर के समान , यहां मैक ओएस एक्स के लिए एक-लाइनर है your.app.idजो आपके डिवाइस से एप्लिकेशन के लिए सभी फाइलों को प्राप्त करने और उन्हें (इस मामले में) बचाने के लिए है ~/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
)
  • -dएमुलेटर से खींचने के लिए छोड़ दें
  • आपके सत्र चर का स्टॉम्प नहीं होता है
  • आप पूरे ब्लॉक को टर्मिनल में डाल सकते हैं।

0

एपीके के साथ गेम डेटा का बैकअप लिया । नौगट वनप्लस 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
स्टीवन लिन

0

क्या इसका मतलब यह है कि कोई दुनिया से निर्देशिका को चकमा दे सकता है: - एक्स से दुनिया: आरएक्स लंबे समय तक फाइलों को लाने में सक्षम हो सकता है?

हाँ बिल्कुल। अजीब तरह से, आपको xबिट सेट करने के लिए फ़ाइल की भी आवश्यकता है । (कम से कम Android 2.3 पर)

chmod 755 सभी तरह से नीचे एक फ़ाइल की प्रतिलिपि बनाने के लिए काम किया (लेकिन आपको बाद में अनुमतियों को वापस करना चाहिए, यदि आप डिवाइस का उपयोग जारी रखने की योजना बनाते हैं)।


0

तुम कर सकते हो:

अदब पुल / भंडारण / उत्सर्जित / 0 / Android / डेटा //


2
मुझे गलत मत समझिए, लेकिन क्या आपने सवाल ठीक से पढ़ा है? ओ पी 'निजी' डेटा खींचने के लिए पूछ रहा है नहीं 'सार्वजनिक'
बाबूराव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.