इस पेज पर, अपने ऐप्लिकेशन के लिए क्लाउड बैकअप और डिवाइस से डिवाइस (D2D) ट्रांसफ़र की प्रोसेस की जांच करने का तरीका बताया गया है. अपने ऐप्लिकेशन की हर बड़ी रिलीज़ के साथ, इन दोनों की जांच करना ज़रूरी है. इससे यह पक्का करने में मदद मिलती है कि आपके उपयोगकर्ता नए डिवाइस पर भी आपके ऐप्लिकेशन का इस्तेमाल कर पाएं. बैकअप और ट्रांसफ़र, दोनों एक जैसे होते हैं. हालांकि, Android 12 (एपीआई लेवल 31) और उसके बाद के वर्शन में, इन दोनों के बीच कुछ अहम अंतर हैं. सबसे अहम अंतर यह है कि क्लाउड बैकअप के लिए डेटा का साइज़ 25 एमबी है, जबकि ट्रांसफ़र के लिए डेटा का साइज़ 2 जीबी है.
इस गाइड में बताया गया है कि डेवलपमेंट साइकल के दौरान क्लाउड बैकअप, डेटा वापस पाने, और D2D ट्रांसफ़र, दोनों को बेहतर तरीके से कैसे टेस्ट किया जा सकता है.
बैकअप की जांच करने की सुविधा कैसे काम करती है
इस सेक्शन में, Android बैकअप फ़्रेमवर्क के अलग-अलग हिस्सों के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि ये हिस्से, अपने-आप बैकअप लेने की सुविधा और कुंजी-वैल्यू बैकअप की सुविधा देने वाले ऐप्लिकेशन के साथ कैसे इंटरैक्ट करते हैं. ऐप्लिकेशन डेवलपमेंट के दौरान, फ़्रेमवर्क के अंदर की ज़्यादातर काम करने की प्रोसेस को अलग रखा जाता है. इसलिए, आपको इस जानकारी की ज़रूरत नहीं है. हालांकि, टेस्टिंग के दौरान इन सिद्धांतों को समझना और भी ज़रूरी हो जाता है.
इस डायग्राम में दिखाया गया है कि क्लाउड बैकअप और रीस्टोर के दौरान, डेटा कैसे फ़्लो करता है. जांच के लिए, एक ही डिवाइस का इस्तेमाल क्लाउड बैकअप और डेटा वापस पाने के लिए किया जा सकता है.
इस डायग्राम में दिखाया गया है कि डी2डी ट्रांसफ़र के दौरान डेटा कैसे फ़्लो करता है:
क्लाउड बैकअप और डेटा वापस लाने की जांच के मुकाबले, डी2डी जांच के लिए सोर्स डिवाइस और टारगेट डिवाइस की ज़रूरत होती है.
बैकअप मैनेजर सेवा, Android सिस्टम की एक ऐसी सेवा है जो बैक अप लेने और उसे वापस पाने की
संरचना शुरू करती है. इस सेवा को Backup Manager
एपीआई के ज़रिए ऐक्सेस किया जा सकता है.
बैकअप लेने के दौरान, यह सेवा आपके ऐप्लिकेशन से बैकअप डेटा के लिए क्वेरी करती है. इसके बाद, उसे बैकअप ट्रांसपोर्ट को सौंप देती है. इसके बाद, यह डेटा को क्लाउड में संग्रहित करती है. डेटा को वापस लाने के दौरान, Backup Manager Service, बैकअप ट्रांसपोर्ट से बैकअप डेटा वापस लाती है और उसे डिवाइस में वापस लाती है. डिवाइस से डिवाइस पर डेटा ट्रांसफ़र करने के लिए, बैकअप मैनेजर सेवा आपके ऐप्लिकेशन से बैकअप डेटा के लिए क्वेरी करती है और उसे सीधे नए डिवाइस पर बैकअप मैनेजर सेवा को भेजती है. इसके बाद, बैकअप मैनेजर सेवा उसे आपके ऐप्लिकेशन में लोड करती है.
बैकअप ट्रांसपोर्ट, Android कॉम्पोनेंट होते हैं. इनकी मदद से, आपके ऐप्लिकेशन के डेटा को सेव और फिर से पाया जा सकता है. Android डिवाइस में, बैकअप ट्रांसपोर्ट के तौर पर कोई भी या एक से ज़्यादा ट्रांसपोर्ट हो सकते हैं. हालांकि, उनमें से सिर्फ़ एक ट्रांसपोर्ट को चालू के तौर पर मार्क किया जा सकता है. डिवाइस बनाने वाली कंपनियों और सेवा देने वाली कंपनियों के हिसाब से, डिवाइस के हिसाब से बैकअप ट्रांसपोर्ट अलग-अलग होते हैं. हालांकि, Google Play की सुविधा वाले ज़्यादातर डिवाइसों में ये ट्रांसपोर्ट शामिल होते हैं:
- GMS ट्रांसपोर्ट: ज़्यादातर डिवाइसों पर, क्लाउड बैकअप ट्रांसपोर्ट की सुविधा चालू रहती है. यह Google Mobile Services का हिस्सा है. यह ट्रांसपोर्ट, Android Backup Service में डेटा सेव करता है.
- D2D ट्रांसपोर्ट: इस ट्रांसपोर्ट का इस्तेमाल, D2D माइग्रेशन में किया जाता है, ताकि डेटा को सीधे एक डिवाइस से दूसरे डिवाइस पर ट्रांसफ़र किया जा सके.
टूल
बैकअप लेने और उसे वापस लाने की प्रोसेस की जांच करने के लिए, आपको इन टूल के बारे में थोड़ी जानकारी होनी चाहिए.
adb
: डिवाइस या एमुलेटर पर निर्देश चलाने के लिए.bmgr
: बैकअप लेने और फिर से सेट अप करने के अलग-अलग काम करने के लिए.logcat
: बैकअप और फिर से सेट अप करने की प्रोसेस का आउटपुट देखने के लिए.
क्लाउड बैकअप की जांच करना
इस सेक्शन में दिए गए निर्देशों का पालन करके, किसी एक डिवाइस का इस्तेमाल करके क्लाउड में बैकअप लिया जा सकता है और उसे वापस लाया जा सकता है.
अपने डिवाइस या एमुलेटर को क्लाउड बैकअप के लिए तैयार करना
बैकअप की जांच के लिए, अपने डिवाइस या एम्युलेटर को तैयार करने के लिए, नीचे दी गई चेकलिस्ट देखें:
- ऑटो बैकअप के लिए, जांचें कि आप Android 6.0 (एपीआई लेवल 23) या इसके बाद के वर्शन पर चलने वाले डिवाइस या एम्युलेटर का इस्तेमाल कर रहे हैं.
- पासकोड के बैकअप के लिए, पक्का करें कि आपके पास Android 2.2 (एपीआई लेवल 8) या इसके बाद के वर्शन पर काम करने वाला डिवाइस या एमुलेटर हो.
- क्लाउड बैकअप की जांच करने के लिए, आपके पास इंटरनेट कनेक्शन होना चाहिए.
- डिवाइस में किसी 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"
चरणों की जांच करें
- अपना ऐप्लिकेशन खोलें, लॉग इन करें, और सभी सेटिंग में बदलाव करें.
- अपने पैकेज नाम में पास करके स्क्रिप्ट चलाएं, जैसे कि
test_cloud_backup.sh com.example.myapp
- ऐप्लिकेशन को फिर से खोलें और पुष्टि करें कि वह ठीक से काम कर रहा है और उसका सारा डेटा बरकरार है.
आपको अपने उपयोगकर्ताओं को लॉग इन करने की ज़रूरत नहीं है. साथ ही, उनकी सभी सेटिंग, प्रोग्रेस, और ऐप्लिकेशन का डेटा पहले जैसा ही होना चाहिए. अगर जांच के नतीजे इन शर्तों के मुताबिक नहीं हैं, तो पक्का करें कि आपने बैकअप को सही तरीके से कॉन्फ़िगर किया हो. साथ ही, आपने डेटा के अहम हिस्सों को शामिल किया हो. यह भी पक्का करें कि आपने कैश मेमोरी में सेव किए गए उस डेटा को फिर से तैयार किया हो जिसे आपने बैकअप से बाहर रखा था. हर टेस्ट के लिए, पहला से तीसरा चरण दोहराएं.
डिवाइस से डिवाइस पर डेटा ट्रांसफ़र करने की सुविधा की जांच करना
डिवाइस से डिवाइस पर डेटा ट्रांसफ़र करने की सुविधा की जांच करने का सबसे बेहतर तरीका यह है कि अपने फ़ोन का सारा कॉन्टेंट, फ़ैक्ट्री रीसेट किए गए नए डिवाइस पर ट्रांसफ़र करें. साथ ही, यह पुष्टि करें कि यह सुविधा सही तरीके से काम कर रही है. हालांकि, अगर आपको इस प्रोसेस को कई बार दोहराना है, तो इसमें दिक्कत आ सकती है और इसमें ज़्यादा समय लग सकता है. यहां बताया गया है कि किसी डिवाइस को बार-बार फ़ैक्ट्री रीसेट किए बिना, एक डिवाइस से डेटा ट्रांसफ़र करने का अनुकरण कैसे किया जा सकता है.
अपने डिवाइस को डी2डी टेस्टिंग के लिए तैयार करना
किसी एक डिवाइस पर D2D ट्रांसफ़र की जांच करने के लिए, इसे इस तरह तैयार करें:
- आपके डिवाइस पर Android 12 (एपीआई लेवल 31) या उसके बाद का वर्शन होना चाहिए.
- D2D के नए वर्शन की जांच करने के लिए, अपने ऐप्लिकेशन में Android 12 (एपीआई लेवल 31) या उसके बाद के वर्शन को टारगेट करें.
- टेस्ट को दोहराने की सुविधा देने के लिए, यह स्क्रिप्ट
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"
टेस्ट करने का तरीका
- उस ऐप्लिकेशन को डिवाइस पर इंस्टॉल करें जिसकी आपको जांच करनी है.
- अपना ऐप्लिकेशन खोलें, लॉग इन करें, और ऐप्लिकेशन की सेटिंग में बदलाव करें.
- अपने डिवाइस पर स्क्रिप्ट चलाएं. इसके लिए, अपने पैकेज का नाम डालें, जैसे कि
test_d2d.sh com.example.myapp
. - स्क्रिप्ट पूरी होने के बाद, डिवाइस पर ऐप्लिकेशन खोलें और पुष्टि करें कि वह सही तरीके से काम कर रहा है और उसका सारा डेटा मौजूद है.
आपको अपने उपयोगकर्ताओं को लॉग इन करने की ज़रूरत नहीं है. साथ ही, उनकी सभी सेटिंग, प्रोग्रेस, और ऐप्लिकेशन का डेटा वैसा ही दिखना चाहिए जैसा स्क्रिप्ट चलाने से पहले दिखता था. अगर जांच के नतीजे इन शर्तों के मुताबिक नहीं हैं, तो पक्का करें कि आपने डेटा ट्रांसफ़र को सही तरीके से कॉन्फ़िगर किया हो. साथ ही, डेटा के अहम हिस्सों को शामिल किया हो. यह भी पक्का करें कि आपने कैश मेमोरी में सेव किए गए उस डेटा को फिर से तैयार किया हो जिसे आपने ट्रांसफ़र से बाहर रखा था. हर टेस्ट के लिए, दूसरे से चौथे चरण तक की प्रक्रिया दोहराएं.
बैकअप लेने और डेटा वापस पाने से जुड़ी समस्या हल करना
इस सेक्शन में, कुछ सामान्य समस्याओं को हल करने के बारे में बताया गया है.
बस, मेट्रो वगैरह के लिए तय कोटा पूरा हो गया है
लॉगकैट में दिए गए ये मैसेज बताते हैं कि आपके ऐप्लिकेशन ने ट्रांसपोर्ट कोटा से ज़्यादा डेटा भेजा है:
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 के बिना मल्टीडेक्स कॉन्फ़िगरेशन का इस्तेमाल करता है.
इनिटिलाइज़ नहीं किया गया बैकअप खाता
लॉगकैट में दिए गए इन मैसेज से पता चलता है कि बैकअप डेटासेट को शुरू न किए जाने की वजह से, बैकअप रुक गया था:
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
लागू किया है, तो इसका मतलब है कि आपने बैकअप में कोई डेटा या फ़ाइल नहीं जोड़ी है.