ব্যাকআপ পরীক্ষা করুন এবং পুনরুদ্ধার করুন

এই পৃষ্ঠাটি আপনাকে দেখায় কিভাবে আপনার অ্যাপের জন্য ক্লাউড ব্যাকআপ এবং ডিভাইস-টু-ডিভাইস (D2D) স্থানান্তর প্রক্রিয়া পরীক্ষা করতে হয়। আপনার ব্যবহারকারীরা একটি নতুন ডিভাইসে আপনার অ্যাপ ব্যবহার করা চালিয়ে যেতে পারে তা নিশ্চিত করতে সাহায্য করার জন্য আপনার অ্যাপের প্রতিটি বড় রিলিজের সাথে এই দুটি পরীক্ষা করা গুরুত্বপূর্ণ। যদিও ব্যাকআপ এবং ট্রান্সফার উভয়ই একই রকম, তবে Android 12 (API লেভেল 31) এবং উচ্চতর উভয়ের মধ্যে গুরুত্বপূর্ণ পার্থক্য রয়েছে—সবচেয়ে উল্লেখযোগ্যভাবে যে ট্রান্সফারে ক্লাউড ব্যাকআপের জন্য 25 MB এর তুলনায় অনেক বড় ডেটা সাইজ 2 GB রয়েছে।

এই নির্দেশিকা আপনাকে দেখায় কিভাবে আপনি ক্লাউড ব্যাকআপ এবং পুনরুদ্ধার এবং D2D স্থানান্তর উভয়ই পরীক্ষা করতে পারেন পুরো বিকাশ চক্র জুড়ে।

কিভাবে টেস্টিং ব্যাকআপ কাজ করে

এই বিভাগটি Android ব্যাকআপ ফ্রেমওয়ার্কের বিভিন্ন অংশ বর্ণনা করে এবং কীভাবে তারা অটো ব্যাকআপ এবং কী-মান ব্যাকআপ সমর্থন করে এমন অ্যাপগুলির সাথে ইন্টারঅ্যাক্ট করে। অ্যাপ ডেভেলপমেন্ট পর্বের সময়, ফ্রেমওয়ার্কের বেশিরভাগ অভ্যন্তরীণ কাজগুলি বিমূর্ত হয়ে যায়, তাই আপনাকে এই তথ্য জানার দরকার নেই। যাইহোক, পরীক্ষার পর্যায়ে, এই ধারণাগুলির বোঝা আরও গুরুত্বপূর্ণ হয়ে ওঠে।

নিম্নলিখিত চিত্রটি ক্লাউড ব্যাকআপ এবং পুনরুদ্ধারের সময় কীভাবে ডেটা প্রবাহিত হয় তা ব্যাখ্যা করে। পরীক্ষার উদ্দেশ্যে, একই ডিভাইস ক্লাউড ব্যাকআপ এবং পুনরুদ্ধারের জন্য ব্যবহার করা যেতে পারে।

ব্যাকআপ ফ্রেমওয়ার্ক ডেটা ফ্লো

একটি D2D স্থানান্তরের সময় ডেটা কীভাবে প্রবাহিত হয় তা নিম্নলিখিত চিত্রটি ব্যাখ্যা করে:

ফ্রেমওয়ার্ক ডেটা ফ্লো স্থানান্তর করুন

ক্লাউড ব্যাকআপ এবং পুনরুদ্ধার পরীক্ষার বিপরীতে, D2D পরীক্ষার জন্য একটি উৎস ডিভাইস এবং একটি লক্ষ্য ডিভাইস থেকে অনুলিপি করা প্রয়োজন।

ব্যাকআপ ম্যানেজার পরিষেবা হল একটি অ্যান্ড্রয়েড সিস্টেম পরিষেবা যা ব্যাকআপ এবং পুনরুদ্ধারের ক্রিয়াকলাপগুলি অর্কেস্ট্রেট করে এবং শুরু করে৷ পরিষেবাটি Backup Manager API-এর মাধ্যমে অ্যাক্সেসযোগ্য।

একটি ব্যাকআপ অপারেশন চলাকালীন, পরিষেবাটি ব্যাকআপ ডেটার জন্য আপনার অ্যাপকে জিজ্ঞাসা করে, তারপরে এটি ব্যাকআপ পরিবহনের কাছে হস্তান্তর করে, যা তারপরে ক্লাউডে ডেটা সংরক্ষণাগারভুক্ত করে৷ একটি পুনরুদ্ধার অপারেশন চলাকালীন, ব্যাকআপ ম্যানেজার পরিষেবা ব্যাকআপ পরিবহন থেকে ব্যাকআপ ডেটা পুনরুদ্ধার করে এবং ডিভাইসে ডেটা পুনরুদ্ধার করে৷ একটি D2D স্থানান্তরের জন্য, ব্যাকআপ ম্যানেজার পরিষেবা ব্যাকআপ ডেটার জন্য আপনার অ্যাপকে জিজ্ঞাসা করে এবং নতুন ডিভাইসে এটিকে সরাসরি ব্যাকআপ ম্যানেজার পরিষেবাতে পাঠায়, যা এটিকে আপনার অ্যাপে লোড করে।

ব্যাকআপ ট্রান্সপোর্টগুলি হল Android উপাদান যা আপনার অ্যাপ ডেটা সংরক্ষণ এবং পুনরুদ্ধারের জন্য দায়ী৷ একটি অ্যান্ড্রয়েড-চালিত ডিভাইসে শূন্য বা তার বেশি ব্যাকআপ ট্রান্সপোর্ট থাকতে পারে, কিন্তু সেই ট্রান্সপোর্টগুলির মধ্যে শুধুমাত্র একটিকে সক্রিয় হিসেবে চিহ্নিত করা যেতে পারে। ডিভাইস প্রস্তুতকারক এবং পরিষেবা প্রদানকারীদের দ্বারা কাস্টমাইজেশনের কারণে উপলব্ধ ব্যাকআপ ট্রান্সপোর্টগুলি ডিভাইস থেকে ডিভাইসে আলাদা, তবে বেশিরভাগ Google Play-সক্ষম ডিভাইসগুলি নিম্নলিখিত পরিবহনগুলির সাথে পাঠানো হয়:

  • জিএমএস ট্রান্সপোর্ট: বেশিরভাগ ডিভাইসে সক্রিয় ক্লাউড ব্যাকআপ পরিবহন, Google মোবাইল পরিষেবার অংশ। এই পরিবহন Android ব্যাকআপ পরিষেবাতে ডেটা সঞ্চয় করে৷
  • D2D পরিবহন: এই পরিবহনটি D2D মাইগ্রেশনে ডাটা সরাসরি এক ডিভাইস থেকে অন্য ডিভাইসে স্থানান্তর করতে ব্যবহার করা হয়।

টুলস

আপনার ব্যাকআপ পরীক্ষা করতে এবং অপারেশনগুলি পুনরুদ্ধার করতে, আপনাকে নিম্নলিখিত সরঞ্জামগুলি সম্পর্কে কিছুটা জানতে হবে৷

  • adb : ডিভাইস বা এমুলেটরে কমান্ড চালানোর জন্য।
  • bmgr : বিভিন্ন ব্যাকআপ এবং পুনরুদ্ধার করার জন্য।
  • logcat : ব্যাকআপের আউটপুট দেখতে এবং অপারেশনগুলি পুনরুদ্ধার করতে।

ক্লাউড ব্যাকআপ পরীক্ষা করুন

এই বিভাগের ধাপগুলি অনুসরণ করে একটি একক ডিভাইস ব্যবহার করে ক্লাউড ব্যাকআপ এবং পুনরুদ্ধার করা যেতে পারে।

ক্লাউড ব্যাকআপের জন্য আপনার ডিভাইস বা এমুলেটর প্রস্তুত করুন

নিম্নলিখিত চেকলিস্টের মাধ্যমে কাজ করে ব্যাকআপ পরীক্ষার জন্য আপনার ডিভাইস বা এমুলেটর প্রস্তুত করুন:

  1. স্বয়ংক্রিয় ব্যাকআপের জন্য, আপনি Android 6.0 (API স্তর 23) বা উচ্চতর চলমান একটি ডিভাইস বা এমুলেটর ব্যবহার করছেন কিনা তা পরীক্ষা করুন৷
  2. কী-মানের ব্যাকআপের জন্য, আপনি Android 2.2 (API লেভেল 8) বা উচ্চতর চলমান ডিভাইস বা এমুলেটর ব্যবহার করছেন কিনা তা পরীক্ষা করুন।
  3. ক্লাউড ব্যাকআপ পরীক্ষা করতে আপনার অবশ্যই ইন্টারনেট অ্যাক্সেস থাকতে হবে।
  4. একটি Google অ্যাকাউন্ট দিয়ে ডিভাইসে লগ ইন করুন এবং সেটিংস -> Google -> ব্যাকআপে এটিকে ব্যাকআপ অ্যাকাউন্ট হিসাবে সেট করুন।

ক্লাউড ব্যাকআপ পরীক্ষা করতে, একটি ক্লাউড ব্যাকআপ ট্রিগার করুন, তারপরে অ্যাপটি আনইনস্টল করুন এবং পুনরায় ইনস্টল করুন। এই পদক্ষেপগুলি পুনরাবৃত্তিযোগ্য করতে, আপনি নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করতে পারেন, test_cloud_backup.sh , যা আপনার অ্যাপের ব্যাক আপ করে, স্থানীয়ভাবে APK ডাউনলোড করে, এটি আনইনস্টল করে এবং APK পুনরায় ইনস্টল করে:

#!/bin/bash -eu
: "${1?"Usage: $0 package name"}"

# Initialize and create a backup
adb shell bmgr enable true
adb shell bmgr transport com.android.localtransport/.LocalTransport | grep -q "Selected transport" || (echo "Error: error selecting local transport"; exit 1)
adb shell settings put secure backup_local_transport_parameters 'is_encrypted=true'
adb shell bmgr backupnow "$1" | grep -F "Package $1 with result: Success" || (echo "Backup failed"; exit 1)

# Uninstall and reinstall the app to clear the data and trigger a restore
apk_path_list=$(adb shell pm path "$1")
OIFS=$IFS
IFS=$'\n'
apk_number=0
for apk_line in $apk_path_list
do
    (( ++apk_number ))
    apk_path=${apk_line:8:1000}
    adb pull "$apk_path" "myapk${apk_number}.apk"
done
IFS=$OIFS
adb shell pm uninstall --user 0 "$1"
apks=$(seq -f 'myapk%.f.apk' 1 $apk_number)
adb install-multiple -t --user 0 $apks

# Clean up
adb shell bmgr transport com.google.android.gms/.backup.BackupTransportService
rm $apks

echo "Done"

পরীক্ষার ধাপ

  1. আপনার অ্যাপ খুলুন, লগ ইন করুন এবং সমস্ত সেটিংস পরিবর্তন করুন।
  2. আপনার প্যাকেজের নাম দিয়ে স্ক্রিপ্টটি চালান, যেমন test_cloud_backup.sh com.example.myapp
  3. অ্যাপটি পুনরায় খুলুন এবং যাচাই করুন যে এটি সঠিকভাবে কাজ করে, সমস্ত ডেটা বজায় রেখে।

আপনি চান না যে আপনার ব্যবহারকারীদের লগ ইন করতে হবে, এবং তাদের সমস্ত সেটিংস, অগ্রগতি এবং অ্যাপ ডেটা আগের মতোই থাকতে হবে। যদি আপনার পরীক্ষার ফলাফলগুলি এই মানদণ্ডগুলি পূরণ না করে, তবে নিশ্চিত করুন যে আপনি সঠিকভাবে ব্যাকআপগুলি কনফিগার করেছেন, ডেটার মূল অংশগুলি বাদ না দিয়ে, এবং আপনি ব্যাকআপ থেকে বাদ দেওয়া কোনও ক্যাশে করা ডেটার রিক্রিয়েশনও পরিচালনা করছেন৷ প্রতিটি পরীক্ষার পুনরাবৃত্তির জন্য ধাপ 1-3 পুনরাবৃত্তি করুন।

D2D স্থানান্তর পরীক্ষা করুন

D2D ট্রান্সফার পরীক্ষা করার সবচেয়ে ব্যাপক উপায় হল আপনার ফোনের সমস্ত বিষয়বস্তু একটি নতুন, ফ্যাক্টরি-রিসেট ডিভাইসে স্থানান্তর করা এবং এটি সঠিকভাবে কাজ করছে কিনা তা যাচাই করা। যাইহোক, এটি অসুবিধাজনক এবং সময়সাপেক্ষ হতে পারে যদি আপনাকে প্রক্রিয়াটি একাধিকবার পুনরাবৃত্তি করতে হয়। এই পদক্ষেপগুলি আপনাকে দেখায় যে ডিভাইসে বারবার ফ্যাক্টরি রিসেট না করে কীভাবে একটি একক ডিভাইসের সাথে একটি স্থানান্তর অনুকরণ করা যায়৷

D2D পরীক্ষার জন্য আপনার ডিভাইস প্রস্তুত করুন

একটি একক ডিভাইসে D2D স্থানান্তর পরীক্ষা করতে, এটি নিম্নরূপ প্রস্তুত করুন:

  1. আপনার ডিভাইসে অবশ্যই Android 12 (API লেভেল 31) বা উচ্চতর চলমান থাকতে হবে।
  2. D2D-এর লেটেস্ট ভার্সন পরীক্ষা করতে, আপনার অ্যাপে Android 12 (API লেভেল 31) বা তার উচ্চতরকে টার্গেট করুন।
  3. পরীক্ষার পুনরাবৃত্তি সমর্থন করতে নিম্নলিখিত স্ক্রিপ্ট, test_d2d.sh তৈরি করুন:
#!/bin/bash -eu
: "${1?"Usage: $0 package name"}"

# Initialize and create a backup
adb shell bmgr enable true
adb shell settings put secure backup_enable_d2d_test_mode 1
adb shell bmgr transport com.google.android.gms/.backup.migrate.service.D2dTransport
adb shell bmgr init com.google.android.gms/.backup.migrate.service.D2dTransport
adb shell bmgr list transports | grep -q -F "  * com.google.android.gms/.backup.migrate.service.D2dTransport" || (echo "Failed to select and initialize backup transport"; exit 1)
adb shell bmgr backupnow "$1" | grep -F "Package $1 with result: Success" || (echo "Backup failed"; exit 1)

# Uninstall and reinstall the app to clear the data and trigger a restore
apk_path_list=$(adb shell pm path "$1")
OIFS=$IFS
IFS=$'\n'
apk_number=0
for apk_line in $apk_path_list
do
    (( ++apk_number ))
    apk_path=${apk_line:8:1000}
    adb pull "$apk_path" "myapk${apk_number}.apk"
done
IFS=$OIFS
adb shell pm uninstall --user 0 "$1"
adb shell bmgr transport com.google.android.gms/.backup.BackupTransportService
apks=$(seq -f 'myapk%.f.apk' 1 $apk_number)
adb install-multiple -t --user 0 $apks

# Clean up
adb shell bmgr init com.google.android.gms/.backup.migrate.service.D2dTransport
adb shell settings put secure backup_enable_d2d_test_mode 0
adb shell bmgr transport com.google.android.gms/.backup.BackupTransportService
rm $apks

echo "Done"

পরীক্ষার ধাপ

  1. আপনি ডিভাইসে যে অ্যাপটি পরীক্ষা করতে চান সেটি ইনস্টল করুন।
  2. আপনার অ্যাপ খুলুন, লগ ইন করুন এবং আপনার অ্যাপের সেটিংস পরিবর্তন করুন।
  3. আপনার ডিভাইসে স্ক্রিপ্টটি চালান, আপনার প্যাকেজের নাম দিয়ে, যেমন test_d2d.sh com.example.myapp
  4. স্ক্রিপ্টটি সম্পূর্ণ হয়ে গেলে, ডিভাইসে অ্যাপটি খুলুন এবং যাচাই করুন যে এটি সঠিকভাবে কাজ করে, সমস্ত ডেটা বজায় রেখে।

আপনি চান না যে আপনার ব্যবহারকারীদের লগ ইন করতে হবে, এবং তাদের সমস্ত সেটিংস, অগ্রগতি এবং অ্যাপ ডেটা অবশ্যই স্ক্রিপ্ট চালানোর আগে প্রদর্শিত হবে। যদি আপনার পরীক্ষার ফলাফলগুলি এই মানদণ্ডগুলি পূরণ না করে, তবে নিশ্চিত করুন যে আপনি ডেটার মূল অংশগুলি বাদ না দিয়ে সঠিকভাবে স্থানান্তর কনফিগার করেছেন এবং আপনি স্থানান্তর থেকে বাদ দেওয়া কোনও ক্যাশে করা ডেটার বিনোদন পরিচালনা করছেন। প্রতিটি পরীক্ষার পুনরাবৃত্তির জন্য ধাপ 2-4 পুনরাবৃত্তি করুন।

ব্যাকআপ এবং পুনরুদ্ধারের সমস্যা সমাধান করুন

এই বিভাগটি আপনাকে কিছু সাধারণ সমস্যার সমাধান করতে সাহায্য করে।

পরিবহন কোটা ছাড়িয়ে গেছে

Logcat-এ নিম্নলিখিত বার্তাগুলি নির্দেশ করে যে আপনার অ্যাপ পরিবহন কোটা অতিক্রম করেছে:

I/PFTBT: Transport rejected backup of <PACKAGE>, skipping

--- or ---

I/PFTBT: Transport quota exceeded for package: <PACKAGE>

ব্যাকআপ ডেটার পরিমাণ কমিয়ে আবার চেষ্টা করুন। উদাহরণস্বরূপ, যাচাই করুন যে আপনি শুধুমাত্র আপনার অ্যাপের ক্যাশে ডিরেক্টরিতে ডেটা ক্যাশে করছেন। ক্যাশে ডিরেক্টরি ব্যাকআপে অন্তর্ভুক্ত করা হয় না।

সম্পূর্ণ ব্যাকআপ সম্ভব নয়

Logcat-এ নিম্নলিখিত বার্তাটি নির্দেশ করে যে সম্পূর্ণ ব্যাকআপ অপারেশন ব্যর্থ হয়েছে কারণ ডিভাইসে এখনও কোন কী-মান ব্যাকআপ অপারেশন হয়নি:

I/BackupManagerService: Full backup not currently possible -- key/value backup
not yet run?

bmgr run কমান্ড দিয়ে একটি কী-মান ব্যাকআপ ট্রিগার করুন এবং তারপর আবার চেষ্টা করুন।

এজেন্টের জন্য অপেক্ষার সময়সীমা

লগক্যাটে নিম্নলিখিত বার্তাটি নির্দেশ করে যে আপনার অ্যাপটি ব্যাকআপের জন্য চালু হতে 10 সেকেন্ডের বেশি সময় নিচ্ছে:

12-05 18:59:02.033  1910  2251 D BackupManagerService:
    awaiting agent for ApplicationInfo{5c7cde0 com.your.app.package}
12-05 18:59:12.117  1910  2251 W BackupManagerService:
    Timeout waiting for agent ApplicationInfo{5c7cde0 com.your.app.package}
12-05 18:59:12.117  1910  2251 W BackupManagerService:
    Can't find backup agent for com.your.app.package

লগ আউটপুট টাইমস্ট্যাম্প পার্থক্য লক্ষ্য করুন. এই ত্রুটিটি সাধারণত ঘটে যখন আপনার অ্যাপ ProGuard ছাড়া একটি মাল্টিডেক্স কনফিগারেশন ব্যবহার করে।

শুরু না করা ব্যাকআপ অ্যাকাউন্ট

Logcat-এ নিম্নলিখিত বার্তাগুলি নির্দেশ করে যে ব্যাকআপ বন্ধ করা হয়েছিল কারণ ব্যাকআপ ডেটাসেট আরম্ভ করা হয়নি:

01-31 14:32:45.698 17280 17292 I Backup: [GmsBackupTransport] Try to backup for
an uninitialized backup account.
01-31 14:32:45.699  1043 18255 W PFTBT: Transport failed; aborting backup: -1001
01-31 14:32:45.699  1043 18255 I PFTBT: Full backup completed with status: -1000

adb shell bmgr run কমান্ড দিয়ে ব্যাকআপ ম্যানেজার চালান, এবং তারপর আবার ব্যাকআপ করার চেষ্টা করুন।

অ্যাপ পদ্ধতি বলা হয় না

যেহেতু স্বয়ংক্রিয় ব্যাকআপ আপনার অ্যাপ্লিকেশানটিকে একটি বেস ক্লাস Application সহ লঞ্চ করে, আপনার অ্যাপের সেটআপ পদ্ধতিগুলিকে বলা নাও হতে পারে৷ স্বয়ংক্রিয় ব্যাকআপ আপনার অ্যাপের কোনো ক্রিয়াকলাপও চালু করে না, তাই আপনার অ্যাপটি কোনো কার্যকলাপে সেটআপ করলে আপনি ত্রুটি দেখতে পারেন। আরও জানতে, ব্যাকআপএজেন্ট বাস্তবায়ন পড়ুন।

বিপরীতে, কী-মান ব্যাকআপ আপনার অ্যাপটিকে আপনার অ্যাপ ম্যানিফেস্ট ফাইলে ঘোষণা করা যেকোনো Application সাবক্লাসের সাথে চালু করে।

ব্যাক আপ করার জন্য কোন ডেটা নেই

Logcat-এ নিম্নলিখিত বার্তাগুলি নির্দেশ করে যে আপনার অ্যাপের ব্যাক আপ করার জন্য কোনও ডেটা নেই:

I Backup  : [FullBackupSession] Package com.your.app.package doesn't have any backup data.

--- or ---

I Backup  : [D2dTransport] Package com.your.app.package doesn't have any backup data.

আপনি যদি নিজের BackupAgent প্রয়োগ করেন , তাহলে সম্ভবত আপনি ব্যাকআপে কোনো ডেটা বা ফাইল যোগ করেননি।