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

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

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

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

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

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

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

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

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

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

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

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

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

  • GMS ट्रांसपोर्ट: यह Google मोबाइल सेवाओं का हिस्सा है. यह ज़्यादातर डिवाइसों पर चालू क्लाउड बैकअप ट्रांसपोर्ट है. यह ट्रांसपोर्ट, Android बैकअप सेवा में डेटा सेव करता है.
  • 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 टेस्टिंग के लिए तैयार करना

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

  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. स्क्रिप्ट पूरी होने के बाद, डिवाइस पर ऐप्लिकेशन खोलें और पुष्टि करें कि वह सही तरीके से काम कर रहा है और उसका सारा डेटा मौजूद है.

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

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

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

बस, मेट्रो वगैरह के लिए तय कोटा पूरा हो गया है

लॉगकैट में दिए गए ये मैसेज बताते हैं कि आपके ऐप्लिकेशन ने ट्रांसपोर्ट कोटा से ज़्यादा डेटा भेजा है:

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 कमांड की मदद से, कुंजी-वैल्यू का बैकअप ट्रिगर करें. इसके बाद, फिर से कोशिश करें.

एजेंट के इंतज़ार का समय खत्म

लॉगकैट में दिया गया यह मैसेज बताता है कि आपके ऐप्लिकेशन को बैकअप के लिए लॉन्च होने में 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 के बिना मल्टीडेक्स कॉन्फ़िगरेशन का इस्तेमाल करता है.

बैकअप खाता शुरू नहीं किया गया

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

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 सबक्लास के साथ लॉन्च करता है जिसका एलान आपने अपनी ऐप्लिकेशन मेनिफ़ेस्ट फ़ाइल में किया है.

बैक अप लेने के लिए कोई डेटा नहीं है

लॉगकैट में ये मैसेज बताते हैं कि आपके ऐप्लिकेशन में बैक अप लेने के लिए कोई डेटा नहीं है:

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