Bu cevap, diğer cevaplarla ilgili deneyimime ve cevaplardaki yorumlara dayanmaktadır. Umudum, benzer bir durumda birine yardım edebilirim.
Bunu OSX'te terminal aracılığıyla yapıyorum .
Daha önce Vinicius Avellar'ın cevabı benim için harikaydı. Sadece çoğu zaman bir hata ayıklama uygulamasından cihazdaki veritabanına ihtiyaç duyuyordum.
Bugün, birden fazla özel dosyaya ihtiyacım olan bir kullanım durumum vardı . Bu dava için iyi çalışan iki çözüm buldum.
Kabul edilen yanıtı Someone Somewhere'in OSX'e özgü yorumlarıyla birlikte kullanın. Bir yedek oluşturun ve bir katran paketini açmak için 3. taraf çözümü olan
sourceforge.net/projects/adbextractor/files/?source=navbar'ı kullanın. Bu cevabın altına bu çözümle ilgili deneyimim hakkında daha fazla yazacağım. Aradığınız şey buysa aşağı kaydırın.
Yerleştiğim daha hızlı bir çözüm. Tamas'ın cevabına benzer birden çok dosyayı çekmek için bir komut dosyası oluşturdum. Bunu bu şekilde yapabiliyorum çünkü uygulamam bir hata ayıklama uygulaması ve cihazımda farklı çalıştırma erişimim var. Çalıştırma erişiminiz yoksa, bu yöntem OSX'te sizin için çalışmayacaktır.
İşte bu harika soruyu araştıran okuyucu olarak sizinle paylaşacağım birden fazla özel dosyayı çekmek için betiğim;):
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
adb devices -l | grep -e 'device\b' > /dev/null
if [ $? -gt 0 ]; then
echo "No device connected to adb."
exit 1
fi
while getopts f:p: opt; do
case $opt in
f)
fileToPull=$OPTARG
;;
p)
packageName=$OPTARG
;;
esac
done;
if [ -z "$fileToPull" ]; then
echo "Please specify file or folder to pull with -f argument"
exit 1
fi
if [ -z "$packageName" ]; then
echo "Please specify package name to run as when pulling file"
exit 1
fi
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
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 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
}
function is_file_dir() {
adb shell "if [ -d \"$1\" ]; then echo TRUE; fi"
}
function is_file_symlink() {
adb shell "if [ -L \"$1\" ]; then echo TRUE; fi"
}
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\""`
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
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"`"
Ana bilgi:
https://gist.github.com/davethomas11/6c88f92c6221ffe6bc26de7335107dd4
Yöntem 1'e geri dön , Android Backup Extractor kullanarak bir yedeklemenin şifresini çözme
İşte Mac'imde attığım adımlar ve karşılaştığım sorunlar:
Önce bir yedeklemeyi sıraya koydum (ve yedeklememi şifrelemek için bir parola belirledim, cihazım gerekliydi):
adb backup -f myAndroidBackup.ab com.corp.appName
İkincisi, abe.jar dosyasını buradan indirdim: https://sourceforge.net/projects/adbextractor/files/abe.jar/download
Sonra koştum:
java -jar ./abe.jar unpack myAndroidBackup.ab myAndroidBackup.tar
Bu noktada bir hata mesajı aldım. Arşivim şifreli olduğu için, java bana bazı güvenlik politikası kitaplıklarını yüklemem gerektiğine dair bir hata verdi.
- Bu yüzden http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html adresine gittim ve ihtiyacım olan güvenlik politikası kavanozlarını indirdim. Şimdi benim durumumda yükleme talimatları bana jar dosyalarını yerleştirmek için yanlış yeri söyledi. Uygun konumun <java-home> / lib / security olduğunu söylüyor . Onları önce oraya koydum ve hala hata mesajı alıyorum. Bu yüzden araştırdım ve Java 1.8 ile Mac'imde onları yerleştirmek için doğru yer şuydu: <java-home> / jre / lib / security . Orijinal ilke kavanozlarını yedekledim ve oraya koydum. Vola abe.jar ile bir şifre girebildim ve bir tar dosyasının şifresini çözebildim.
Son olarak koştum ( önceki komutu tekrar çalıştırdıktan sonra )
tar xvf myAndroidBackup.tar
Şimdi not etmek önemlidir ki, sadece koşabilir ve kedi yiyebilirseniz, çok daha hızlıdır. Birincisi, tüm uygulamayı değil, yalnızca istediğiniz dosyaları alırsınız. İkincisi, daha fazla dosya (benim için şifreleme) aktarımı yavaşlatır. Bu nedenle, OSX'te olduğu gibi çalıştırmıyorsanız, bu şekilde yapmayı bilmek önemlidir, ancak komut dosyası bir hata ayıklama uygulaması için ilk olarak gitmelidir.
Bugün yazdım ve birkaç kez test ettim, bu yüzden lütfen hataları bana bildirin!