बैकअप और पहले जैसा करने की सुविधा की जांच करें

इस पेज पर, आपके ऐप्लिकेशन के लिए क्लाउड बैकअप और डिवाइस-से-डिवाइस (D2D) पर डेटा ट्रांसफ़र करने की प्रोसेस को टेस्ट करने का तरीका बताया गया है. इन दोनों को अपने ऐप्लिकेशन की हर मुख्य रिलीज़ के साथ टेस्ट करना ज़रूरी है. इससे यह पक्का करने में मदद मिलती है कि आपके उपयोगकर्ता, नए डिवाइस पर आपके ऐप्लिकेशन का इस्तेमाल जारी रख सकें. बैकअप लेने और ट्रांसफ़र करने की प्रोसेस एक जैसी होती है. हालांकि, Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन में, इन दोनों के बीच कुछ अहम अंतर हैं. इनमें सबसे अहम अंतर यह है कि क्लाउड पर बैकअप लेने के लिए, डेटा का साइज़ 25 एमबी से ज़्यादा नहीं होना चाहिए. वहीं, ट्रांसफ़र करने के लिए, डेटा का साइज़ 2 जीबी से ज़्यादा नहीं होना चाहिए.

इस गाइड में बताया गया है कि डेवलपमेंट साइकल के दौरान, क्लाउड बैकअप और रीस्टोर करने की सुविधा के साथ-साथ D2D ट्रांसफ़र की सुविधा को कैसे असरदार तरीके से टेस्ट किया जा सकता है.

बैकअप की जांच करने की सुविधा कैसे काम करती है

इस सेक्शन में, Android बैकअप फ़्रेमवर्क के अलग-अलग कॉम्पोनेंट के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि ये कॉम्पोनेंट, ऑटो बैकअप और कुंजी-वैल्यू बैकअप की सुविधा देने वाले ऐप्लिकेशन के साथ कैसे इंटरैक्ट करते हैं. ऐप्लिकेशन डेवलपमेंट के दौरान, फ़्रेमवर्क के ज़्यादातर इंटरनल काम को ऐब्स्ट्रैक्ट कर दिया जाता है. इसलिए, आपको इस जानकारी की ज़रूरत नहीं होती. हालांकि, टेस्टिंग के दौरान इन कॉन्सेप्ट को समझना ज़्यादा ज़रूरी हो जाता है.

इस डायग्राम में, क्लाउड बैकअप और रीस्टोर के दौरान डेटा के फ़्लो का तरीका बताया गया है. जांच करने के लिए, क्लाउड बैकअप और डेटा वापस लाने के लिए एक ही डिवाइस का इस्तेमाल किया जा सकता है.

बैकअप फ़्रेमवर्क का डेटा फ़्लो

इस डायग्राम में दिखाया गया है कि D2D ट्रांसफ़र के दौरान डेटा कैसे ट्रांसफ़र होता है:

ट्रांसफ़र फ़्रेमवर्क का डेटा फ़्लो

क्लाउड बैकअप और वापस लाने की सुविधा की टेस्टिंग के उलट, D2D टेस्टिंग के लिए एक सोर्स डिवाइस और एक टारगेट डिवाइस की ज़रूरत होती है.

Backup Manager Service, Android सिस्टम की एक सेवा है. यह बैकअप लेने और डेटा वापस लाने की प्रोसेस को मैनेज करती है और इसे शुरू करती है. इस सेवा को Backup Manager एपीआई के ज़रिए ऐक्सेस किया जा सकता है.

बैकअप की प्रोसेस के दौरान, सेवा आपके ऐप्लिकेशन से बैकअप डेटा के लिए क्वेरी करती है. इसके बाद, उसे बैकअप ट्रांसपोर्ट को सौंप देती है. यह डेटा को क्लाउड में सेव करता है. डेटा वापस पाने की प्रोसेस के दौरान, Backup Manager Service, बैकअप ट्रांसपोर्ट से बैकअप डेटा वापस लाती है. इसके बाद, यह डेटा को डिवाइस में वापस लाती है. D2D ट्रांसफ़र के लिए, Backup Manager Service आपके ऐप्लिकेशन से बैकअप डेटा के बारे में क्वेरी करती है. इसके बाद, वह इसे सीधे नए डिवाइस पर मौजूद Backup Manager Service को भेजती है. यह सेवा, आपके ऐप्लिकेशन में डेटा लोड करती है.

बैकअप ट्रांसपोर्ट, Android के ऐसे कॉम्पोनेंट होते हैं जो आपके ऐप्लिकेशन के डेटा को सेव करने और वापस पाने के लिए ज़िम्मेदार होते हैं. Android डिवाइस में, बैकअप के तौर पर इस्तेमाल किए जाने वाले एक या उससे ज़्यादा ट्रांसपोर्ट हो सकते हैं. हालांकि, उनमें से सिर्फ़ एक ट्रांसपोर्ट को चालू के तौर पर मार्क किया जा सकता है. डिवाइस बनाने वाली कंपनियों और सेवा देने वाली कंपनियों की ओर से किए गए बदलावों की वजह से, बैकअप ट्रांसफ़र करने के लिए उपलब्ध तरीके अलग-अलग डिवाइसों पर अलग-अलग होते हैं. हालांकि, Google Play की सुविधा वाले ज़्यादातर डिवाइसों में, बैकअप ट्रांसफ़र करने के लिए ये तरीके उपलब्ध होते हैं:

  • GMS Transport: यह ज़्यादातर डिवाइसों पर क्लाउड बैकअप ट्रांसफ़र करने की सुविधा देता है. यह Google Mobile Services का हिस्सा है. यह ट्रांसपोर्ट, Android Backup Service में डेटा सेव करता है.
  • D2D ट्रांसपोर्ट: इसका इस्तेमाल D2D माइग्रेशन में किया जाता है. इससे डेटा को सीधे एक डिवाइस से दूसरे डिवाइस में ट्रांसफ़र किया जा सकता है.

टूल

बैकअप लेने और डेटा वापस पाने की कार्रवाइयों को टेस्ट करने के लिए, आपको इन टूल के बारे में थोड़ी जानकारी होनी चाहिए.

  • adb: डिवाइस या एम्युलेटर पर निर्देश चलाने के लिए.
  • bmgr: बैकअप लेने और डेटा वापस लाने से जुड़ी अलग-अलग कार्रवाइयां करने के लिए.
  • logcat: बैकअप लेने और डेटा वापस लाने की कार्रवाइयों का आउटपुट देखने के लिए.

क्लाउड बैकअप की जांच करना

इस सेक्शन में दिए गए निर्देशों का पालन करके, एक ही डिवाइस से क्लाउड बैकअप लिया जा सकता है और उसे वापस लाया जा सकता है.

क्लाउड पर बैकअप लेने के लिए, अपने डिवाइस या एम्युलेटर को तैयार करना

अपने डिवाइस या एम्युलेटर को बैकअप की जांच के लिए तैयार करें. इसके लिए, यहां दी गई चेकलिस्ट का इस्तेमाल करें:

  1. ऑटो बैकअप की सुविधा के लिए, पक्का करें कि आपके डिवाइस या एम्युलेटर में Android 6.0 (एपीआई लेवल 23) या इसके बाद का वर्शन हो.
  2. की-वैल्यू के बैकअप के लिए, पक्का करें कि आपके पास Android 2.2 (एपीआई लेवल 8) या इसके बाद के वर्शन वाला डिवाइस या एम्युलेटर हो.
  3. क्लाउड बैकअप की सुविधा को आज़माने के लिए, आपके पास इंटरनेट का ऐक्सेस होना चाहिए.
  4. डिवाइस में किसी Google खाते से लॉग इन करें. इसके बाद, सेटिंग -> Google -> बैकअप में जाकर, इसे बैकअप खाते के तौर पर सेट करें.

क्लाउड बैकअप की जांच करने के लिए, क्लाउड बैकअप ट्रिगर करें. इसके बाद, ऐप्लिकेशन को अनइंस्टॉल करके फिर से इंस्टॉल करें. इन चरणों को दोहराने के लिए, test_cloud_backup.sh वाली इस स्क्रिप्ट का इस्तेमाल किया जा सकता है. यह स्क्रिप्ट आपके ऐप्लिकेशन का बैक अप लेती है, 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. ऐप्लिकेशन को फिर से खोलें और पुष्टि करें कि यह ठीक से काम कर रहा है. साथ ही, यह भी पुष्टि करें कि सभी डेटा को सुरक्षित रखा गया है.

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

D2D ट्रांसफ़र की जांच करना

D2D ट्रांसफ़र की जांच करने का सबसे अच्छा तरीका यह है कि अपने फ़ोन का पूरा डेटा, फ़ैक्ट्री रीसेट किए गए नए डिवाइस पर ट्रांसफ़र करें. इसके बाद, यह पुष्टि करें कि डेटा सही तरीके से ट्रांसफ़र हुआ है. हालांकि, अगर आपको यह प्रोसेस कई बार दोहरानी पड़े, तो यह मुश्किल हो सकती है और इसमें समय भी लग सकता है. यहां बताया गया है कि किसी एक डिवाइस पर ट्रांसफ़र की प्रोसेस को कैसे सिम्युलेट किया जा सकता है. इसके लिए, डिवाइस को बार-बार फ़ैक्ट्री रीसेट करने की ज़रूरत नहीं होती.

D2D टेस्टिंग के लिए अपने डिवाइस को तैयार करना

एक ही डिवाइस पर D2D ट्रांसफ़र की जांच करने के लिए, उसे इस तरह तैयार करें:

  1. आपके डिवाइस पर Android 12 (एपीआई लेवल 31) या इसके बाद का वर्शन होना चाहिए.
  2. D2D के नए वर्शन को आज़माने के लिए, अपने ऐप्लिकेशन में Android 12 (एपीआई लेवल 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. स्क्रिप्ट पूरी होने के बाद, डिवाइस पर ऐप्लिकेशन खोलें और पुष्टि करें कि वह सही तरीके से काम कर रहा है. साथ ही, यह भी पुष्टि करें कि सारा डेटा सुरक्षित है.

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

बैकअप लेने और डेटा वापस पाने से जुड़ी समस्याएं हल करना

इस सेक्शन में, आम तौर पर होने वाली कुछ समस्याओं को हल करने के बारे में बताया गया है.

ट्रांसफ़र करने का कोटा पूरा हो गया है

Logcat में मौजूद इन मैसेज से पता चलता है कि आपके ऐप्लिकेशन ने ट्रांसपोर्ट कोटा पार कर लिया है:

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

--- or ---

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

बैकअप के लिए डेटा की मात्रा कम करें और फिर से कोशिश करें. उदाहरण के लिए, पुष्टि करें कि डेटा को सिर्फ़ अपने ऐप्लिकेशन की कैश मेमोरी वाली डायरेक्ट्री में सेव किया जा रहा हो. कैश मेमोरी वाली डायरेक्ट्री को बैकअप में शामिल नहीं किया जाता.

पूरा बैकअप नहीं लिया जा सकता

लॉगकैट में मौजूद इस मैसेज से पता चलता है कि पूरे बैकअप की प्रोसेस पूरी नहीं हुई. ऐसा इसलिए हुआ, क्योंकि डिवाइस पर अब तक कोई भी कुंजी-वैल्यू बैकअप प्रोसेस नहीं हुई है:

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

bmgr run कमांड का इस्तेमाल करके, कुंजी-वैल्यू के बैकअप को ट्रिगर करें. इसके बाद, फिर से कोशिश करें.

एजेंट के जवाब का इंतज़ार करने का समय खत्म हो गया है

Logcat में मौजूद इस मैसेज से पता चलता है कि आपके ऐप्लिकेशन को बैकअप के लिए लॉन्च होने में 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 के बेस क्लास के साथ लॉन्च करता है. इसलिए, हो सकता है कि आपके ऐप्लिकेशन के सेटअप के तरीकों को कॉल न किया जाए. अपने-आप बैकअप लेने की सुविधा, आपके ऐप्लिकेशन की किसी भी गतिविधि को लॉन्च नहीं करती है. इसलिए, अगर आपका ऐप्लिकेशन किसी गतिविधि में सेटअप करता है, तो आपको गड़बड़ियां दिख सकती हैं. ज़्यादा जानने के लिए, BackupAgent लागू करना लेख पढ़ें.

इसके उलट, कुंजी-वैल्यू बैकअप की सुविधा, आपके ऐप्लिकेशन को किसी भी 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, तो इसका मतलब है कि आपने बैकअप में कोई डेटा या फ़ाइलें नहीं जोड़ी हैं.