এই উত্তরটি আমার উত্তর এবং উত্তরগুলিতে মন্তব্যের সাথে আমার অভিজ্ঞতার ভিত্তিতে তৈরি। আমার আশা আমি একই পরিস্থিতিতে কাউকে সাহায্য করতে পারি।
আমি টার্মিনালের মাধ্যমে ওএসএক্স এ করছি ।
পূর্বে ভিনিসিয়াস অ্যাভেলারের উত্তর আমার পক্ষে দুর্দান্ত কাজ করেছিল। ডিবাগ অ্যাপ্লিকেশন থেকে আমি কেবল বেশিরভাগ সময় ডিভাইসটির ডেটাবেস প্রয়োজন ছিল।
আজ আমার একটি ব্যবহারের কেস ছিল যেখানে আমার একাধিক ব্যক্তিগত ফাইলের প্রয়োজন ছিল । আমি দুটি সমাধান দিয়ে শেষ করেছি যা এই ক্ষেত্রে ভাল কাজ করেছে।
কারও কারও ওএসএক্স নির্দিষ্ট মন্তব্যের সাথে স্বীকৃত উত্তরটি ব্যবহার করুন। একটি ব্যাকআপ তৈরি করুন এবং তৃতীয় পক্ষের সমাধানটি ব্যবহার করুন,
Sourceforge.net/projects/adbextractor/files/?source=navbar একটি ট্যারে আনপ্যাক করুন। আমি এই উত্তরটির নীচে এই সমাধানটি সহ আমার অভিজ্ঞতা সম্পর্কে আরও লিখব। আপনি যদি সন্ধান করছেন এটি যদি নীচে স্ক্রোল করুন।
একটি দ্রুত সমাধান যা আমি স্থির করেছি। তামাসের উত্তরের অনুরূপ একাধিক ফাইলগুলি টানতে আমি একটি স্ক্রিপ্ট তৈরি করেছি। আমি এটি এই উপায়ে করতে সক্ষম হলাম কারণ আমার অ্যাপ্লিকেশনটি একটি ডিবাগ অ্যাপ্লিকেশন এবং আমার ডিভাইসটিতে আমার চালনার মতো অ্যাক্সেস রয়েছে। আপনার রান-অ্যাক্সেস না থাকলে এই পদ্ধতিটি আপনার জন্য OSX এ কাজ করবে না।
আমি একাধিক প্রাইভেট ফাইল টানার জন্য আমার স্ক্রিপ্ট এখানে রইলাম যা আমি আপনার সাথে ভাগ করব, পাঠক, যারা এই দুর্দান্ত প্রশ্নটি তদন্ত করছেন;):
#!/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"`"
সংক্ষেপ:
https://gist.github.com/davethomas11/6c88f92c6221ffe6bc26de7335107dd4
পদ্ধতি 1 এ ফিরে , অ্যান্ড্রয়েড ব্যাকআপ এক্সট্র্যাক্টর ব্যবহার করে একটি ব্যাকআপ ডিক্রিপ্ট করে
আমি আমার ম্যাকটিতে যে পদক্ষেপগুলি নিয়েছি এবং এখানে যে বিষয়গুলি আমি এসেছি সেগুলি এখানে:
প্রথমে আমি একটি ব্যাকআপ সারি রেখেছি (এবং আমার ব্যাকআপটি এনক্রিপ্ট করার জন্য একটি পাসওয়ার্ড সেট করেছি, আমার ডিভাইসের এটির প্রয়োজন ছিল):
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 এ গিয়ে আমার প্রয়োজনীয় সুরক্ষা নীতি জারগুলি ডাউনলোড করেছি। এখন আমার ক্ষেত্রে ইনস্টলের নির্দেশাবলী আমাকে জার ফাইলগুলি রাখার জন্য ভুল অবস্থানটি বলেছে। এটি বলে যে সঠিক অবস্থানটি <জাভা-হোম> / লিবিব / সুরক্ষা । আমি তাদের প্রথমে সেখানে রেখেছি এবং তবুও ত্রুটির বার্তা পেয়েছি। তাই আমি জাভা ১.৮ দিয়ে তদন্ত করেছি এবং আমার ম্যাকে তাদের রাখার সঠিক জায়গাটি ছিল: <জাভা-হোম> / জেআর / লিবিব / সুরক্ষা । আমি আসল নীতি জারের ব্যাকআপ নেওয়ার বিষয়টি নিশ্চিত করেছি এবং সেগুলি সেখানে রেখেছি। ভোলা আমি abe.jar এর সাথে একটি পাসওয়ার্ড প্রবেশ করতে সক্ষম হয়ে একটি টার ফাইলটিতে ডিক্রিপ্ট করেছিলাম।
শেষ পর্যন্ত আমি দৌড়েছি ( আবার আগের কমান্ডটি চালানোর পরে )
tar xvf myAndroidBackup.tar
এখন এটি লক্ষণীয় গুরুত্বপূর্ণ যে আপনি যদি কেবলমাত্র রান্না এবং বিড়ালটিকে চালাতে পারেন তবে এটি অনেক দ্রুত। এক, আপনি কেবল নিজের পছন্দ মতো ফাইল পাবেন এবং পুরো অ্যাপ্লিকেশনটি নয়। দুই, আরও ফাইল (আমার জন্য + এনক্রিপশন) স্থানান্তর করা ধীর করে দেয়। সুতরাং আপনার যদি ওএসএক্স-এ রান-অজ না থাকে তবে এই পদ্ধতিটি করা জেনে রাখা গুরুত্বপূর্ণ, তবে স্ক্রিপ্টটি প্রথমে ডিবাগ অ্যাপ্লিকেশনটির জন্য হওয়া উচিত।
মনে মনে আমি এটি আজ লিখেছি এবং এটি কয়েকবার পরীক্ষা করেছি, সুতরাং দয়া করে আমাকে কোনও বাগ সম্পর্কে অবহিত করুন!