यह उत्तर अन्य उत्तरों के साथ मेरे अनुभव और उत्तरों में टिप्पणियों के आधार पर है। मेरी आशा है कि मैं ऐसी ही स्थिति में किसी की मदद कर सकता हूं।
मैं टर्मिनल के माध्यम से OSX पर यह कर रहा हूं ।
पहले विनीसियस एवलर के जवाब ने मेरे लिए बहुत अच्छा काम किया। मैं केवल एक डिबग एप्लिकेशन से डिवाइस से डेटाबेस की आवश्यकता के अधिकांश समय था।
आज मेरे पास एक उपयोग का मामला था जहां मुझे कई निजी फ़ाइलों की आवश्यकता थी । मैंने दो समाधानों के साथ समाप्त किया, जिन्होंने इस मामले के लिए अच्छा काम किया।
कहीं किसी के OSX विशिष्ट टिप्पणियों के साथ स्वीकृत उत्तर का उपयोग करें। एक बैकअप बनाएं और एक टार में अनपैक करने के लिए 3rd पार्टी समाधान, sourceforge.net/projects/adbextractor/files/?source=navbar का उपयोग करें
। मैं इस उत्तर के नीचे इस समाधान के साथ अपने अनुभव के बारे में अधिक लिखूंगा। नीचे स्क्रॉल करें यदि यह आप के लिए क्या देख रहे हैं।
एक तेज समाधान जो मैंने साथ तय किया। मैंने तमस के उत्तर के समान कई फाइलें खींचने के लिए एक स्क्रिप्ट बनाई। मैं इसे इस तरह से करने में सक्षम हूं क्योंकि मेरा ऐप एक डिबग ऐप है और मेरी डिवाइस पर रन-ऐस की पहुंच है। यदि आपके पास चलाने के लिए पहुंच नहीं है, तो यह विधि आपके लिए 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 पर रन-अप नहीं है, लेकिन डिबग एप्लिकेशन के लिए स्क्रिप्ट पहले गोटो होनी चाहिए।
माइंड यू, मैंने अभी इसे लिखा है और इसे कुछ बार परीक्षण किया है, इसलिए कृपया मुझे किसी भी कीड़े की सूचना दें!