پشتیبانگیری خودکار برای برنامهها بهطور خودکار از دادههای کاربر از برنامههایی که Android 6.0 (سطح API 23) یا بالاتر را هدف قرار داده و اجرا میکنند، نسخه پشتیبان تهیه میکند. Android دادههای برنامه را با آپلود آن در Google Drive کاربر حفظ میکند، جایی که توسط اعتبار حساب Google کاربر محافظت میشود. پشتیبانگیری در دستگاههای دارای Android 9 یا بالاتر با استفاده از پین، الگو یا رمز عبور دستگاه، رمزگذاری شده است. هر برنامه می تواند حداکثر 25 مگابایت داده پشتیبان را برای هر کاربر برنامه اختصاص دهد. هیچ هزینه ای برای ذخیره سازی داده های پشتیبان وجود ندارد. برنامه شما میتواند فرآیند پشتیبانگیری را سفارشی کند یا با غیرفعال کردن پشتیبانگیری، از آن انصراف دهد.
برای مروری بر گزینههای پشتیبانگیری Android و راهنمایی درباره اینکه کدام دادهها باید پشتیبانگیری و بازیابی شوند، به نمای کلی پشتیبانگیری از دادهها مراجعه کنید.
فایل هایی که بک آپ گرفته شده اند
به طور پیشفرض، پشتیبانگیری خودکار شامل فایلهایی در بیشتر فهرستهای راهنمای سیستم میشود که به برنامه شما اختصاص داده شدهاند:
فایل های ترجیحی مشترک
فایلهایی که در حافظه داخلی برنامه شما ذخیره میشوند و توسط
getFilesDir()
یاgetDir(String, int)
قابل دسترسی هستند.فایلهای موجود در دایرکتوری که توسط
getDatabasePath(String)
برگردانده میشوند، که شامل فایلهای ایجاد شده با کلاسSQLiteOpenHelper
نیز میشود.فایلهای موجود در حافظه خارجی در دایرکتوری که توسط
getExternalFilesDir(String)
برگردانده شدهاند.
پشتیبانگیری خودکار فایلهای موجود در فهرستهای بازگردانده شده توسط getCacheDir()
، getCodeCacheDir()
و getNoBackupFilesDir()
را مستثنی میکند. فایلهای ذخیرهشده در این مکانها فقط بهطور موقت مورد نیاز هستند و عمداً از عملیات پشتیبانگیری حذف میشوند.
میتوانید برنامه خود را طوری پیکربندی کنید که فایلهای خاصی را شامل و حذف کند. برای اطلاعات بیشتر به بخش Include and Exclude files مراجعه کنید.
مکان پشتیبان گیری
داده های پشتیبان در یک پوشه خصوصی در حساب کاربری گوگل درایو کاربر ذخیره می شود که به ازای هر برنامه 25 مگابایت محدود می شود. داده های ذخیره شده در سهمیه Google Drive شخصی کاربر به حساب نمی آید. فقط آخرین نسخه پشتیبان ذخیره می شود. هنگامی که یک نسخه پشتیبان تهیه می شود، هر نسخه پشتیبان قبلی حذف می شود. داده های پشتیبان توسط کاربر یا سایر برنامه های دستگاه قابل خواندن نیست.
کاربران میتوانند فهرستی از برنامههایی را که در برنامه اندروید Google Drive پشتیبانگیری شدهاند، مشاهده کنند. در دستگاههای مجهز به Android، کاربران میتوانند این فهرست را در کشوی پیمایش برنامه Drive در زیر تنظیمات > پشتیبانگیری و بازنشانی پیدا کنند.
پشتیبانگیریها از هر دستگاه-setup-lifetime در مجموعه دادههای جداگانه ذخیره میشوند، همانطور که در مثالهای زیر توضیح داده شده است:
اگر کاربر دارای دو دستگاه باشد، یک مجموعه داده پشتیبان برای هر دستگاه وجود دارد.
اگر کاربر دستگاهی را به تنظیمات کارخانه بازنشانی کند و سپس دستگاه را با همان حساب راهاندازی کند، نسخه پشتیبان در یک مجموعه داده جدید ذخیره میشود. مجموعه داده های منسوخ شده به طور خودکار پس از یک دوره عدم فعالیت حذف می شوند.
برنامه پشتیبان گیری
پشتیبان گیری به طور خودکار زمانی انجام می شود که تمام شرایط زیر برآورده شود:
- کاربر پشتیبان گیری را در دستگاه فعال کرده است. در Android 9، این تنظیم در Settings > System > Backup قرار دارد.
- حداقل 24 ساعت از آخرین پشتیبان گیری گذشته است.
- دستگاه بیکار است.
- دستگاه به یک شبکه Wi-Fi متصل است (اگر کاربر دستگاه از تهیه نسخه پشتیبان از داده های تلفن همراه استفاده نکرده باشد).
در عمل، این شرایط تقریباً هر شب اتفاق میافتد، اما ممکن است دستگاه هرگز پشتیبانگیری نکند (مثلاً اگر هرگز به شبکه وصل نشود). برای حفظ پهنای باند شبکه، آپلود فقط در صورتی انجام میشود که دادههای برنامه تغییر کرده باشد.
در طول پشتیبانگیری خودکار، سیستم برنامه را خاموش میکند تا مطمئن شود که دیگر در سیستم فایل نمینویسد. بهطور پیشفرض، سیستم پشتیبانگیری برنامههایی را که در پیشزمینه اجرا میشوند نادیده میگیرد تا از تجربه کاربری ضعیف جلوگیری کند. میتوانید با تنظیم ویژگی android:backupInForeground
روی true، رفتار پیشفرض را لغو کنید.
برای سادهسازی تست، اندروید شامل ابزارهایی میشود که به شما امکان میدهد به صورت دستی یک نسخه پشتیبان از برنامه خود را شروع کنید. برای اطلاعات بیشتر، تست پشتیبانگیری و بازیابی را ببینید.
بازیابی برنامه زمانی
هر زمان که برنامه نصب شود، داده ها بازیابی می شوند، چه از فروشگاه Play، در حین راه اندازی دستگاه (زمانی که سیستم برنامه های نصب شده قبلی را نصب می کند)، یا با اجرای نصب adb
. عملیات بازیابی پس از نصب APK اما قبل از در دسترس قرار گرفتن برنامه برای راه اندازی توسط کاربر انجام می شود.
در طول ویزارد اولیه راه اندازی دستگاه، به کاربر لیستی از مجموعه داده های پشتیبان در دسترس نشان داده می شود و از آنها خواسته می شود که داده ها را از کدام یک بازیابی کند. هر کدام از مجموعه داده های پشتیبان انتخاب شود، به مجموعه داده اجدادی دستگاه تبدیل می شود. این دستگاه میتواند از پشتیبانهای خود یا مجموعه دادههای اجدادی خود را بازیابی کند. اگر نسخههای پشتیبان از هر دو منبع موجود باشد، دستگاه پشتیبانگیری خود را در اولویت قرار میدهد. اگر کاربر از طریق جادوگر راه اندازی دستگاه نرفته باشد، دستگاه فقط می تواند از نسخه پشتیبان خود بازیابی کند.
برای سادهسازی تست، اندروید شامل ابزارهایی است که به شما امکان میدهد بازیابی برنامه خود را به صورت دستی شروع کنید. برای اطلاعات بیشتر، تست پشتیبانگیری و بازیابی را ببینید.
بک آپ را فعال و غیرفعال کنید
برنامههایی که Android 6.0 (سطح API 23) یا بالاتر را هدف قرار میدهند، بهطور خودکار در پشتیبانگیری خودکار شرکت میکنند. در فایل مانیفست برنامه خود، مقدار بولی android:allowBackup
برای فعال یا غیرفعال کردن پشتیبانگیری تنظیم کنید. مقدار پیشفرض true
است، اما توصیه میکنیم که مشخصه را به صراحت در مانیفست خود تنظیم کنید، همانطور که در مثال زیر نشان داده شده است:
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
با تنظیم android:allowBackup
روی false
می توانید پشتیبان گیری را غیرفعال کنید. اگر برنامه شما بتواند وضعیت خود را از طریق مکانیسم دیگری بازسازی کند یا اگر برنامه شما با اطلاعات حساس سروکار دارد، ممکن است بخواهید این کار را انجام دهید.
شامل و حذف فایل ها
به طور پیش فرض، سیستم تقریباً از تمام داده های برنامه نسخه پشتیبان تهیه می کند. برای اطلاعات بیشتر، به بخش مربوط به فایلهایی که پشتیبانگیری میشوند، مراجعه کنید.
این بخش به شما نشان میدهد که چگونه قوانین XML سفارشی را برای کنترل موارد پشتیبانگیری شده تعریف کنید. اگر برنامه شما Android 12 (سطح API 31) یا بالاتر را هدف قرار میدهد، باید مجموعه دیگری از قوانین پشتیبانگیری XML را مشخص کنید ، همانطور که در این بخش توضیح داده شده است تا از تغییرات بازیابی نسخه پشتیبان که برای دستگاههایی که این نسخههای Android را اجرا میکنند، پشتیبانی کند.
پشتیبانگیری را در اندروید ۱۱ و پایینتر کنترل کنید
مراحل این بخش را دنبال کنید تا کنترل کنید از کدام فایلها در دستگاههای دارای Android 11 (سطح API 30) یا پایینتر پشتیبانگیری شود.
همانطور که در مثال زیر نشان داده شده است، در فایل
AndroidManifest.xml
، ویژگیandroid:fullBackupContent
را به عنصر<application>
اضافه کنید. این ویژگی به یک فایل XML اشاره می کند که حاوی قوانین پشتیبان است.<application ... android:fullBackupContent="@xml/backup_rules"> </application>
یک فایل XML به نام
@xml/ backup_rules
در دایرکتوریres/xml/
ایجاد کنید. در این فایل قوانینی را با عناصر<include>
و<exclude>
اضافه کنید. نمونه زیر از تمام تنظیمات برگزیده مشترک به جزdevice.xml
نسخه پشتیبان تهیه می کند:<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/> </full-backup-content>
شرایط دستگاه مورد نیاز برای تهیه نسخه پشتیبان را تعریف کنید
اگر برنامه شما اطلاعات حساس را در دستگاه ذخیره می کند، می توانید شرایطی را مشخص کنید که تحت آن داده های برنامه شما در پشتیبان گیری کاربر گنجانده شود. میتوانید شرایط زیر را در Android 9 (سطح API 28) یا بالاتر اضافه کنید:
-
clientSideEncryption
: نسخه پشتیبان کاربر با یک راز سمت سرویس گیرنده رمزگذاری می شود. این شکل از رمزگذاری در دستگاههای دارای Android 9 یا بالاتر تا زمانی فعال میشود که کاربر پشتیبانگیری را در Android 9 یا بالاتر فعال کرده باشد و قفل صفحه (PIN، الگو، یا رمز عبور) را برای دستگاه خود تنظیم کرده باشد. -
deviceToDeviceTransfer
: کاربر در حال انتقال نسخه پشتیبان خود به دستگاه دیگری است که از انتقال محلی دستگاه به دستگاه پشتیبانی می کند (مثلاً Google Pixel).
اگر دستگاههای توسعهدهنده خود را به اندروید 9 ارتقا دادهاید، باید پشتیبانگیری از دادهها را غیرفعال کرده و پس از ارتقا دوباره فعال کنید. این به این دلیل است که اندروید تنها پس از اطلاع دادن به کاربران در تنظیمات یا جادوگر راهاندازی، پشتیبانگیریها را با یک راز سمت کلاینت رمزگذاری میکند.
برای اعلام شرایط گنجاندن، ویژگی requireFlags
را روی یک مقدار یا مقادیر انتخابی در عناصر <include>
در مجموعه قوانین پشتیبان خود تنظیم کنید:
<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <!-- App data isn't included in user's backup unless client-side encryption is enabled. --> <include domain="file" path="." requireFlags="clientSideEncryption" /> </full-backup-content>
اگر برنامه شما یک سیستم پشتیبان با مقدار کلید را پیادهسازی میکند یا اگر خودتان BackupAgent
پیادهسازی میکنید ، میتوانید با انجام یک مقایسه بیتی بین مجموعه پرچمهای حملونقل یک شی BackupDataOutput
و FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED
یا Flagهای_ FLAG_DEVICE_TO_DEVICE_TRANSFER
این الزامات شرطی را برای منطق پشتیبانگیری خود اعمال کنید. .
قطعه کد زیر نمونه ای از استفاده از این روش را نشان می دهد:
کاتلین
class CustomBackupAgent : BackupAgent() { override fun onBackup(oldState: ParcelFileDescriptor?, data: BackupDataOutput?, newState: ParcelFileDescriptor?) { if (data != null) { if ((data.transportFlags and FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.transportFlags and FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } } // Implementation of onRestore() here. }
جاوا
public class CustomBackupAgent extends BackupAgent { @Override public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException { if ((data.getTransportFlags() & FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.getTransportFlags() & FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } // Implementation of onRestore() here. }
پشتیبانگیری را در Android 12 یا بالاتر کنترل کنید
اگر برنامه شما Android 12 (سطح API 31) یا بالاتر را هدف قرار میدهد، مراحل این بخش را دنبال کنید تا کنترل کنید از کدام فایلها در دستگاههای دارای Android 12 یا بالاتر پشتیبانگیری شود.
همانطور که در مثال زیر نشان داده شده است، در فایل
AndroidManifest.xml
، ویژگیandroid:dataExtractionRules
را به عنصر<application>
اضافه کنید. این ویژگی به یک فایل XML اشاره می کند که حاوی قوانین پشتیبان است.<application ... android:dataExtractionRules="backup_rules.xml"> </application>
یک فایل XML به نام
backup_rules .xml
در دایرکتوریres/xml/
ایجاد کنید. در این فایل قوانینی را با عناصر<include>
و<exclude>
اضافه کنید. نمونه زیر از تمام تنظیمات برگزیده مشترک به جزdevice.xml
نسخه پشتیبان تهیه می کند:<?xml version="1.0" encoding="utf-8"?> <data-extraction-rules> <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/> </cloud-backup> </data-extraction-rules>
نحو پیکربندی XML
دستور XML برای فایل پیکربندی بسته به نسخه اندرویدی که برنامه شما در آن هدف قرار داده و اجرا میشود، متفاوت است.
اندروید 11 یا پایین تر
از دستور XML زیر برای فایل پیکربندی استفاده کنید که پشتیبانگیری را برای دستگاههای دارای Android 11 یا پایینتر کنترل میکند .
<full-backup-content> <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string" requireFlags=["clientSideEncryption" | "deviceToDeviceTransfer"] /> <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string" /> </full-backup-content>
اندروید 12 یا بالاتر
اگر برنامه شما Android 12 (سطح API 31) یا بالاتر را هدف قرار میدهد، از دستور XML زیر برای فایل پیکربندی استفاده کنید که پشتیبانگیری را برای دستگاههای دارای Android 12 یا بالاتر کنترل میکند .
<data-extraction-rules> <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]> ... <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... </cloud-backup> <device-transfer> ... <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... </device-transfer> </data-extraction-rules>
هر بخش از پیکربندی ( <cloud-backup>
، <device-transfer>
) حاوی قوانینی است که فقط برای آن نوع انتقال اعمال می شود. این جداسازی به شما امکان میدهد، برای مثال، یک فایل یا دایرکتوری را از پشتیبانگیری Google Drive حذف کنید، در حالی که همچنان آن را در حین انتقال دستگاه به دستگاه (D2D) منتقل میکنید. اگر فایلهایی دارید که برای پشتیبانگیری در فضای ابری خیلی بزرگ هستند، اما میتوانند بدون مشکل بین دستگاهها منتقل شوند، مفید است.
اگر قوانینی برای یک حالت پشتیبان خاص وجود نداشته باشد، مثلاً اگر بخش <device-transfer>
وجود نداشته باشد، آن حالت برای همه محتوا به جز دایرکتوریهای no-backup
و cache
کاملاً فعال میشود، همانطور که در فایلهایی که پشتیبانگیری میشوند توضیح داده شده است. بخش
برنامه شما میتواند پرچم disableIfNoEncryptionCapabilities
را در بخش <cloud-backup>
تنظیم کند تا مطمئن شود که پشتیبانگیری تنها در صورتی انجام میشود که بتوان آن را رمزگذاری کرد، مانند زمانی که کاربر صفحه قفل داشته باشد. اگر دستگاه کاربر نتواند از رمزگذاری پشتیبانی کند، تنظیم این محدودیت، ارسال نسخه پشتیبان به ابر را متوقف میکند، اما از آنجایی که انتقالهای D2D به سرور ارسال نمیشوند، حتی در دستگاههایی که از رمزگذاری پشتیبانی نمیکنند به کار خود ادامه میدهند.
نحو برای شامل و حذف عناصر
در داخل تگهای <full-backup-content>
، <cloud-backup>
و <device-transfer>
(بسته به نسخه Android دستگاه و targetSDKVersion
برنامه شما)، میتوانید عناصر <include>
و <exclude>
را تعریف کنید:
-
<include>
یک فایل یا پوشه را برای پشتیبان گیری مشخص می کند. به طور پیش فرض، پشتیبان گیری خودکار تقریباً همه فایل های برنامه را شامل می شود. اگر عنصر
<include>
را مشخص کنید، سیستم دیگر به طور پیشفرض شامل هیچ فایلی نمیشود و فقط از فایلهای مشخصشده نسخه پشتیبان تهیه میکند. برای گنجاندن چندین فایل، از چندین عنصر<include>
استفاده کنید.در اندروید 11 و نسخههای پایینتر ، این عنصر همچنین میتواند حاوی ویژگیهای
requireFlags
باشد، که در قسمتی که نحوه تعریف الزامات شرطی برای پشتیبانگیری را توضیح میدهد، با جزئیات بیشتری به آن پرداخته میشود.فایلهای موجود در دایرکتوریهایی که توسط
getCacheDir()
،getCodeCacheDir()
یاgetNoBackupFilesDir()
بازگردانده میشوند، همیشه حذف میشوند، حتی اگر بخواهید آنها را اضافه کنید.-
<exclude>
فایل یا پوشه ای را برای حذف در حین پشتیبان گیری مشخص می کند. در اینجا چند فایل وجود دارد که معمولاً از پشتیبانگیری حذف میشوند:
فایلهایی که دارای شناسههای خاص دستگاه هستند، یا توسط سرور صادر شده یا در دستگاه تولید شدهاند. به عنوان مثال، Firebase Cloud Messaging (FCM) باید هر بار که کاربر برنامه شما را روی دستگاه جدیدی نصب میکند، یک نشانه ثبت نام ایجاد کند. اگر رمز ثبت نام قدیمی بازیابی شود، برنامه ممکن است غیرمنتظره عمل کند.
فایل های مربوط به اشکال زدایی برنامه
فایلهای بزرگی که باعث میشوند برنامه از سهمیه پشتیبان 25 مگابایتی فراتر رود.
هر عنصر <include>
و <exclude>
باید شامل دو ویژگی زیر باشد:
-
domain
محل منبع را مشخص می کند. مقادیر معتبر برای این ویژگی شامل موارد زیر است:
-
root
: دایرکتوری در سیستم فایل که در آن همه فایل های خصوصی متعلق به این برنامه ذخیره می شوند. -
file
: دایرکتوری هایی که توسطgetFilesDir()
برگردانده شده اند. -
database
: دایرکتوری هایی که توسطgetDatabasePath()
برگردانده شده اند. پایگاه های داده ایجاد شده باSQLiteOpenHelper
در اینجا ذخیره می شوند. -
sharedpref
: دایرکتوری که در آنSharedPreferences
ذخیره می شود. -
external
: فهرستی که توسطgetExternalFilesDir()
برگردانده شده است. -
device_root
: مانندroot
اما برای ذخیره سازی محافظت شده توسط دستگاه. -
device_file
: مانندfile
اما برای ذخیره سازی محافظت شده توسط دستگاه. -
device_database
: مانندdatabase
اما برای ذخیره سازی محافظت شده توسط دستگاه. -
device_sharedpref
: مانندsharedpref
اما برای ذخیره سازی محافظت شده توسط دستگاه.
-
-
path
فایل یا پوشه ای را برای گنجاندن یا حذف از پشتیبان تعیین می کند. به موارد زیر توجه کنید:
- این ویژگی از دستور عام یا دستور عبارت منظم پشتیبانی نمی کند.
- شما می توانید با استفاده از
./
به دایرکتوری فعلی ارجاع دهید، اما به دلایل امنیتی نمی توانید به دایرکتوری والد ارجاع دهید، مانند استفاده از..
. - اگر دایرکتوری را مشخص کنید، این قانون برای همه فایلهای دایرکتوری و زیر شاخههای بازگشتی اعمال میشود.
BackupAgent را پیاده سازی کنید
برنامههایی که پشتیبانگیری خودکار را پیادهسازی میکنند، نیازی به اجرای BackupAgent
ندارند. با این حال، می توانید به صورت اختیاری یک BackupAgent
سفارشی را پیاده سازی کنید. به طور معمول، دو دلیل برای انجام این کار وجود دارد:
می خواهید اعلان رویدادهای پشتیبان، مانند
onRestoreFinished()
وonQuotaExceeded(long, long)
دریافت کنید. این روشهای پاسخ به تماس حتی اگر برنامه در حال اجرا نباشد اجرا میشوند.شما نمی توانید به راحتی مجموعه فایل هایی را که می خواهید از آنها نسخه پشتیبان تهیه کنید با قوانین XML بیان کنید. در این موارد نادر، میتوانید یک
BackupAgent
پیادهسازی کنید کهonFullBackup(FullBackupDataOutput)
را لغو میکند تا آنچه را که میخواهید ذخیره کند. برای حفظ اجرای پیشفرض سیستم، متد مربوطه را در superclass باsuper.onFullBackup()
فراخوانی کنید.
اگر یک BackupAgent
پیادهسازی میکنید، بهطور پیشفرض سیستم انتظار دارد که برنامه شما پشتیبانگیری و بازیابی کلید-مقدار را انجام دهد. برای استفاده از پشتیبانگیری خودکار مبتنی بر فایل، ویژگی android:fullBackupOnly
را در مانیفست برنامهتان روی true
تنظیم کنید.
در طول عملیات پشتیبانگیری و بازیابی خودکار، سیستم برنامه را در حالت محدود راهاندازی میکند تا هم از دسترسی برنامه به فایلهایی که ممکن است باعث تداخل میشود جلوگیری کند و هم به برنامه اجازه دهد روشهای برگشت به تماس را در BackupAgent
خود اجرا کند. در این حالت محدود، فعالیت اصلی برنامه بهطور خودکار راهاندازی نمیشود، ارائهدهندگان محتوای آن مقداردهی اولیه نمیشوند، و بهجای هر زیرکلاس اعلامشده در مانیفست برنامه، Application
کلاس پایه نمونهسازی میشود.
BackupAgent
شما باید متدهای انتزاعی onBackup()
و onRestore()
را پیاده سازی کند که برای پشتیبان گیری کلید-مقدار استفاده می شود. اگر نمیخواهید پشتیبانگیری با مقدار کلید انجام دهید، میتوانید پیادهسازی آن روشها را خالی بگذارید.
برای اطلاعات بیشتر، به Extend BackupAgent مراجعه کنید.
،پشتیبانگیری خودکار برای برنامهها بهطور خودکار از دادههای کاربر از برنامههایی که Android 6.0 (سطح API 23) یا بالاتر را هدف قرار داده و اجرا میکنند، نسخه پشتیبان تهیه میکند. Android دادههای برنامه را با آپلود آن در Google Drive کاربر حفظ میکند، جایی که توسط اعتبار حساب Google کاربر محافظت میشود. پشتیبانگیری در دستگاههای دارای Android 9 یا بالاتر با استفاده از پین، الگو یا رمز عبور دستگاه، رمزگذاری شده است. هر برنامه می تواند حداکثر 25 مگابایت داده پشتیبان را برای هر کاربر برنامه اختصاص دهد. هیچ هزینه ای برای ذخیره سازی داده های پشتیبان وجود ندارد. برنامه شما میتواند فرآیند پشتیبانگیری را سفارشی کند یا با غیرفعال کردن پشتیبانگیری، از آن انصراف دهد.
برای مروری بر گزینههای پشتیبانگیری Android و راهنمایی درباره اینکه کدام دادهها باید پشتیبانگیری و بازیابی شوند، به نمای کلی پشتیبانگیری از دادهها مراجعه کنید.
فایل هایی که بک آپ گرفته شده اند
به طور پیشفرض، پشتیبانگیری خودکار شامل فایلهایی در بیشتر فهرستهای راهنمای سیستم میشود که به برنامه شما اختصاص داده شدهاند:
فایل های ترجیحی مشترک
فایلهایی که در حافظه داخلی برنامه شما ذخیره میشوند و توسط
getFilesDir()
یاgetDir(String, int)
قابل دسترسی هستند.فایلهای موجود در دایرکتوری که توسط
getDatabasePath(String)
برگردانده میشوند، که شامل فایلهای ایجاد شده با کلاسSQLiteOpenHelper
نیز میشود.فایلهای موجود در حافظه خارجی در دایرکتوری که توسط
getExternalFilesDir(String)
برگردانده شدهاند.
پشتیبانگیری خودکار فایلهای موجود در فهرستهای بازگردانده شده توسط getCacheDir()
، getCodeCacheDir()
و getNoBackupFilesDir()
را مستثنی میکند. فایلهای ذخیرهشده در این مکانها فقط بهطور موقت مورد نیاز هستند و عمداً از عملیات پشتیبانگیری حذف میشوند.
میتوانید برنامه خود را طوری پیکربندی کنید که فایلهای خاصی را شامل و حذف کند. برای اطلاعات بیشتر به بخش Include and Exclude files مراجعه کنید.
مکان پشتیبان گیری
داده های پشتیبان در یک پوشه خصوصی در حساب کاربری گوگل درایو کاربر ذخیره می شود که به ازای هر برنامه 25 مگابایت محدود می شود. داده های ذخیره شده در سهمیه Google Drive شخصی کاربر به حساب نمی آید. فقط آخرین نسخه پشتیبان ذخیره می شود. هنگامی که یک نسخه پشتیبان تهیه می شود، هر نسخه پشتیبان قبلی حذف می شود. داده های پشتیبان توسط کاربر یا سایر برنامه های دستگاه قابل خواندن نیست.
کاربران میتوانند فهرستی از برنامههایی را که در برنامه اندروید Google Drive پشتیبانگیری شدهاند، مشاهده کنند. در دستگاههای مجهز به Android، کاربران میتوانند این فهرست را در کشوی پیمایش برنامه Drive در زیر تنظیمات > پشتیبانگیری و بازنشانی پیدا کنند.
پشتیبانگیریها از هر دستگاه-setup-lifetime در مجموعه دادههای جداگانه ذخیره میشوند، همانطور که در مثالهای زیر توضیح داده شده است:
اگر کاربر دارای دو دستگاه باشد، یک مجموعه داده پشتیبان برای هر دستگاه وجود دارد.
اگر کاربر دستگاهی را به تنظیمات کارخانه بازنشانی کند و سپس دستگاه را با همان حساب راهاندازی کند، نسخه پشتیبان در یک مجموعه داده جدید ذخیره میشود. مجموعه داده های منسوخ شده به طور خودکار پس از یک دوره عدم فعالیت حذف می شوند.
برنامه پشتیبان گیری
پشتیبان گیری به طور خودکار زمانی انجام می شود که تمام شرایط زیر برآورده شود:
- کاربر پشتیبان گیری را در دستگاه فعال کرده است. در Android 9، این تنظیم در Settings > System > Backup قرار دارد.
- حداقل 24 ساعت از آخرین پشتیبان گیری گذشته است.
- دستگاه بیکار است.
- دستگاه به یک شبکه Wi-Fi متصل است (اگر کاربر دستگاه از تهیه نسخه پشتیبان از داده های تلفن همراه استفاده نکرده باشد).
در عمل، این شرایط تقریباً هر شب اتفاق میافتد، اما ممکن است دستگاه هرگز پشتیبانگیری نکند (مثلاً اگر هرگز به شبکه وصل نشود). برای حفظ پهنای باند شبکه، آپلود فقط در صورتی انجام میشود که دادههای برنامه تغییر کرده باشد.
در طول پشتیبانگیری خودکار، سیستم برنامه را خاموش میکند تا مطمئن شود که دیگر در سیستم فایل نمینویسد. بهطور پیشفرض، سیستم پشتیبانگیری برنامههایی را که در پیشزمینه اجرا میشوند نادیده میگیرد تا از تجربه کاربری ضعیف جلوگیری کند. میتوانید با تنظیم ویژگی android:backupInForeground
روی true، رفتار پیشفرض را لغو کنید.
برای سادهسازی تست، اندروید شامل ابزارهایی میشود که به شما امکان میدهد به صورت دستی یک نسخه پشتیبان از برنامه خود را شروع کنید. برای اطلاعات بیشتر، تست پشتیبانگیری و بازیابی را ببینید.
بازیابی برنامه زمانی
هر زمان که برنامه نصب شود، داده ها بازیابی می شوند، چه از فروشگاه Play، در حین راه اندازی دستگاه (زمانی که سیستم برنامه های نصب شده قبلی را نصب می کند)، یا با اجرای نصب adb
. عملیات بازیابی پس از نصب APK اما قبل از در دسترس قرار گرفتن برنامه برای راه اندازی توسط کاربر انجام می شود.
در طول ویزارد اولیه راه اندازی دستگاه، به کاربر لیستی از مجموعه داده های پشتیبان در دسترس نشان داده می شود و از آنها خواسته می شود که داده ها را از کدام یک بازیابی کند. هر کدام از مجموعه داده های پشتیبان انتخاب شود، به مجموعه داده اجدادی دستگاه تبدیل می شود. این دستگاه میتواند از پشتیبانهای خود یا مجموعه دادههای اجدادی خود را بازیابی کند. اگر نسخههای پشتیبان از هر دو منبع موجود باشد، دستگاه پشتیبانگیری خود را در اولویت قرار میدهد. اگر کاربر از طریق جادوگر راه اندازی دستگاه نرفته باشد، دستگاه فقط می تواند از نسخه پشتیبان خود بازیابی کند.
برای سادهسازی تست، اندروید شامل ابزارهایی است که به شما امکان میدهد بازیابی برنامه خود را به صورت دستی شروع کنید. برای اطلاعات بیشتر، تست پشتیبانگیری و بازیابی را ببینید.
بک آپ را فعال و غیرفعال کنید
برنامههایی که Android 6.0 (سطح API 23) یا بالاتر را هدف قرار میدهند، بهطور خودکار در پشتیبانگیری خودکار شرکت میکنند. در فایل مانیفست برنامه خود، مقدار بولی android:allowBackup
برای فعال یا غیرفعال کردن پشتیبانگیری تنظیم کنید. مقدار پیشفرض true
است، اما توصیه میکنیم که مشخصه را به صراحت در مانیفست خود تنظیم کنید، همانطور که در مثال زیر نشان داده شده است:
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
با تنظیم android:allowBackup
روی false
می توانید پشتیبان گیری را غیرفعال کنید. اگر برنامه شما بتواند وضعیت خود را از طریق مکانیسم دیگری بازسازی کند یا اگر برنامه شما با اطلاعات حساس سروکار دارد، ممکن است بخواهید این کار را انجام دهید.
شامل و حذف فایل ها
به طور پیش فرض، سیستم تقریباً از تمام داده های برنامه نسخه پشتیبان تهیه می کند. برای اطلاعات بیشتر، به بخش مربوط به فایلهایی که پشتیبانگیری میشوند، مراجعه کنید.
این بخش به شما نشان میدهد که چگونه قوانین XML سفارشی را برای کنترل موارد پشتیبانگیری شده تعریف کنید. اگر برنامه شما Android 12 (سطح API 31) یا بالاتر را هدف قرار میدهد، باید مجموعه دیگری از قوانین پشتیبانگیری XML را مشخص کنید ، همانطور که در این بخش توضیح داده شده است تا از تغییرات بازیابی نسخه پشتیبان که برای دستگاههایی که این نسخههای Android را اجرا میکنند، پشتیبانی کند.
پشتیبانگیری را در اندروید ۱۱ و پایینتر کنترل کنید
مراحل این بخش را دنبال کنید تا کنترل کنید از کدام فایلها در دستگاههای دارای Android 11 (سطح API 30) یا پایینتر پشتیبانگیری شود.
همانطور که در مثال زیر نشان داده شده است، در فایل
AndroidManifest.xml
، ویژگیandroid:fullBackupContent
را به عنصر<application>
اضافه کنید. این ویژگی به یک فایل XML اشاره می کند که حاوی قوانین پشتیبان است.<application ... android:fullBackupContent="@xml/backup_rules"> </application>
یک فایل XML به نام
@xml/ backup_rules
در دایرکتوریres/xml/
ایجاد کنید. در این فایل قوانینی را با عناصر<include>
و<exclude>
اضافه کنید. نمونه زیر از تمام تنظیمات برگزیده مشترک به جزdevice.xml
نسخه پشتیبان تهیه می کند:<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/> </full-backup-content>
شرایط دستگاه مورد نیاز برای تهیه نسخه پشتیبان را تعریف کنید
اگر برنامه شما اطلاعات حساس را در دستگاه ذخیره می کند، می توانید شرایطی را مشخص کنید که تحت آن داده های برنامه شما در پشتیبان گیری کاربر گنجانده شود. میتوانید شرایط زیر را در Android 9 (سطح API 28) یا بالاتر اضافه کنید:
-
clientSideEncryption
: نسخه پشتیبان کاربر با یک راز سمت سرویس گیرنده رمزگذاری می شود. این شکل از رمزگذاری در دستگاههای دارای Android 9 یا بالاتر تا زمانی فعال میشود که کاربر پشتیبانگیری را در Android 9 یا بالاتر فعال کرده باشد و قفل صفحه (PIN، الگو، یا رمز عبور) را برای دستگاه خود تنظیم کرده باشد. -
deviceToDeviceTransfer
: کاربر در حال انتقال نسخه پشتیبان خود به دستگاه دیگری است که از انتقال محلی دستگاه به دستگاه پشتیبانی می کند (مثلاً Google Pixel).
اگر دستگاههای توسعهدهنده خود را به اندروید 9 ارتقا دادهاید، باید پشتیبانگیری از دادهها را غیرفعال کرده و پس از ارتقا دوباره فعال کنید. این به این دلیل است که اندروید تنها پس از اطلاع دادن به کاربران در تنظیمات یا جادوگر راهاندازی، پشتیبانگیریها را با یک راز سمت کلاینت رمزگذاری میکند.
برای اعلام شرایط گنجاندن، ویژگی requireFlags
را روی یک مقدار یا مقادیر انتخابی در عناصر <include>
در مجموعه قوانین پشتیبان خود تنظیم کنید:
<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <!-- App data isn't included in user's backup unless client-side encryption is enabled. --> <include domain="file" path="." requireFlags="clientSideEncryption" /> </full-backup-content>
اگر برنامه شما یک سیستم پشتیبان با مقدار کلید را پیادهسازی میکند یا اگر خودتان BackupAgent
پیادهسازی میکنید ، میتوانید با انجام یک مقایسه بیتی بین مجموعه پرچمهای حملونقل یک شی BackupDataOutput
و FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED
یا Flagهای_ FLAG_DEVICE_TO_DEVICE_TRANSFER
این الزامات شرطی را برای منطق پشتیبانگیری خود اعمال کنید. .
قطعه کد زیر نمونه ای از استفاده از این روش را نشان می دهد:
کاتلین
class CustomBackupAgent : BackupAgent() { override fun onBackup(oldState: ParcelFileDescriptor?, data: BackupDataOutput?, newState: ParcelFileDescriptor?) { if (data != null) { if ((data.transportFlags and FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.transportFlags and FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } } // Implementation of onRestore() here. }
جاوا
public class CustomBackupAgent extends BackupAgent { @Override public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException { if ((data.getTransportFlags() & FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.getTransportFlags() & FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } // Implementation of onRestore() here. }
پشتیبانگیری را در Android 12 یا بالاتر کنترل کنید
اگر برنامه شما Android 12 (سطح API 31) یا بالاتر را هدف قرار میدهد، مراحل این بخش را دنبال کنید تا کنترل کنید از کدام فایلها در دستگاههای دارای Android 12 یا بالاتر پشتیبانگیری شود.
همانطور که در مثال زیر نشان داده شده است، در فایل
AndroidManifest.xml
، ویژگیandroid:dataExtractionRules
را به عنصر<application>
اضافه کنید. این ویژگی به یک فایل XML اشاره می کند که حاوی قوانین پشتیبان است.<application ... android:dataExtractionRules="backup_rules.xml"> </application>
یک فایل XML به نام
backup_rules .xml
در دایرکتوریres/xml/
ایجاد کنید. در این فایل قوانینی را با عناصر<include>
و<exclude>
اضافه کنید. نمونه زیر از تمام تنظیمات برگزیده مشترک به جزdevice.xml
نسخه پشتیبان تهیه می کند:<?xml version="1.0" encoding="utf-8"?> <data-extraction-rules> <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/> </cloud-backup> </data-extraction-rules>
نحو پیکربندی XML
دستور XML برای فایل پیکربندی بسته به نسخه اندرویدی که برنامه شما در آن هدف قرار داده و اجرا میشود، متفاوت است.
اندروید 11 یا پایین تر
از دستور XML زیر برای فایل پیکربندی استفاده کنید که پشتیبانگیری را برای دستگاههای دارای Android 11 یا پایینتر کنترل میکند .
<full-backup-content> <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string" requireFlags=["clientSideEncryption" | "deviceToDeviceTransfer"] /> <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string" /> </full-backup-content>
اندروید 12 یا بالاتر
اگر برنامه شما Android 12 (سطح API 31) یا بالاتر را هدف قرار میدهد، از دستور XML زیر برای فایل پیکربندی استفاده کنید که پشتیبانگیری را برای دستگاههای دارای Android 12 یا بالاتر کنترل میکند .
<data-extraction-rules> <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]> ... <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... </cloud-backup> <device-transfer> ... <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... </device-transfer> </data-extraction-rules>
هر بخش از پیکربندی ( <cloud-backup>
، <device-transfer>
) حاوی قوانینی است که فقط برای آن نوع انتقال اعمال می شود. این جداسازی به شما امکان میدهد، برای مثال، یک فایل یا دایرکتوری را از پشتیبانگیری Google Drive حذف کنید، در حالی که همچنان آن را در حین انتقال دستگاه به دستگاه (D2D) منتقل میکنید. اگر فایلهایی دارید که برای پشتیبانگیری در فضای ابری خیلی بزرگ هستند، اما میتوانند بدون مشکل بین دستگاهها منتقل شوند، مفید است.
اگر قوانینی برای یک حالت پشتیبان خاص وجود نداشته باشد، مثلاً اگر بخش <device-transfer>
وجود نداشته باشد، آن حالت برای همه محتوا به جز دایرکتوریهای no-backup
و cache
کاملاً فعال میشود، همانطور که در فایلهایی که پشتیبانگیری میشوند توضیح داده شده است. بخش
برنامه شما میتواند پرچم disableIfNoEncryptionCapabilities
را در بخش <cloud-backup>
تنظیم کند تا مطمئن شود که پشتیبانگیری تنها در صورتی انجام میشود که بتوان آن را رمزگذاری کرد، مانند زمانی که کاربر صفحه قفل داشته باشد. اگر دستگاه کاربر نتواند از رمزگذاری پشتیبانی کند، تنظیم این محدودیت، ارسال نسخه پشتیبان به ابر را متوقف میکند، اما از آنجایی که انتقالهای D2D به سرور ارسال نمیشوند، حتی در دستگاههایی که از رمزگذاری پشتیبانی نمیکنند به کار خود ادامه میدهند.
نحو برای شامل و حذف عناصر
در داخل تگهای <full-backup-content>
، <cloud-backup>
و <device-transfer>
(بسته به نسخه Android دستگاه و targetSDKVersion
برنامه شما)، میتوانید عناصر <include>
و <exclude>
را تعریف کنید:
-
<include>
یک فایل یا پوشه را برای پشتیبان گیری مشخص می کند. به طور پیش فرض، پشتیبان گیری خودکار تقریباً همه فایل های برنامه را شامل می شود. اگر عنصر
<include>
را مشخص کنید، سیستم دیگر به طور پیشفرض شامل هیچ فایلی نمیشود و فقط از فایلهای مشخصشده نسخه پشتیبان تهیه میکند. برای گنجاندن چندین فایل، از چندین عنصر<include>
استفاده کنید.در اندروید 11 و نسخههای پایینتر ، این عنصر همچنین میتواند حاوی ویژگیهای
requireFlags
باشد، که در قسمتی که نحوه تعریف الزامات شرطی برای پشتیبانگیری را توضیح میدهد، با جزئیات بیشتری به آن پرداخته میشود.فایلهای موجود در دایرکتوریهایی که توسط
getCacheDir()
،getCodeCacheDir()
یاgetNoBackupFilesDir()
بازگردانده میشوند، همیشه حذف میشوند، حتی اگر بخواهید آنها را اضافه کنید.-
<exclude>
فایل یا پوشه ای را برای حذف در حین پشتیبان گیری مشخص می کند. در اینجا چند فایل وجود دارد که معمولاً از پشتیبانگیری حذف میشوند:
فایلهایی که دارای شناسههای خاص دستگاه هستند، یا توسط سرور صادر شده یا در دستگاه تولید شدهاند. به عنوان مثال، Firebase Cloud Messaging (FCM) باید هر بار که کاربر برنامه شما را روی دستگاه جدیدی نصب میکند، یک نشانه ثبت نام ایجاد کند. اگر رمز ثبت نام قدیمی بازیابی شود، برنامه ممکن است غیرمنتظره عمل کند.
فایل های مربوط به اشکال زدایی برنامه
فایلهای بزرگی که باعث میشوند برنامه از سهمیه پشتیبان 25 مگابایتی فراتر رود.
هر عنصر <include>
و <exclude>
باید شامل دو ویژگی زیر باشد:
-
domain
محل منبع را مشخص می کند. مقادیر معتبر برای این ویژگی شامل موارد زیر است:
-
root
: دایرکتوری در سیستم فایل که در آن همه فایل های خصوصی متعلق به این برنامه ذخیره می شوند. -
file
: دایرکتوری هایی که توسطgetFilesDir()
برگردانده شده اند. -
database
: دایرکتوری هایی که توسطgetDatabasePath()
برگردانده شده اند. پایگاه های داده ایجاد شده باSQLiteOpenHelper
در اینجا ذخیره می شوند. -
sharedpref
: دایرکتوری که در آنSharedPreferences
ذخیره می شود. -
external
: فهرستی که توسطgetExternalFilesDir()
برگردانده شده است. -
device_root
: مانندroot
اما برای ذخیره سازی محافظت شده توسط دستگاه. -
device_file
: مانندfile
اما برای ذخیره سازی محافظت شده توسط دستگاه. -
device_database
: مانندdatabase
اما برای ذخیره سازی محافظت شده توسط دستگاه. -
device_sharedpref
: مانندsharedpref
اما برای ذخیره سازی محافظت شده توسط دستگاه.
-
-
path
فایل یا پوشه ای را برای گنجاندن یا حذف از پشتیبان تعیین می کند. به موارد زیر توجه کنید:
- این ویژگی از دستور عام یا دستور عبارت منظم پشتیبانی نمی کند.
- شما می توانید با استفاده از
./
به دایرکتوری فعلی ارجاع دهید، اما به دلایل امنیتی نمی توانید به دایرکتوری والد ارجاع دهید، مانند استفاده از..
. - اگر دایرکتوری را مشخص کنید، این قانون برای همه فایلهای دایرکتوری و زیر شاخههای بازگشتی اعمال میشود.
BackupAgent را پیاده سازی کنید
برنامههایی که پشتیبانگیری خودکار را پیادهسازی میکنند، نیازی به اجرای BackupAgent
ندارند. با این حال، می توانید به صورت اختیاری یک BackupAgent
سفارشی را پیاده سازی کنید. به طور معمول، دو دلیل برای انجام این کار وجود دارد:
می خواهید اعلان رویدادهای پشتیبان، مانند
onRestoreFinished()
وonQuotaExceeded(long, long)
دریافت کنید. این روشهای پاسخ به تماس حتی اگر برنامه در حال اجرا نباشد اجرا میشوند.شما نمی توانید به راحتی مجموعه فایل هایی را که می خواهید از آنها نسخه پشتیبان تهیه کنید با قوانین XML بیان کنید. در این موارد نادر، میتوانید یک
BackupAgent
پیادهسازی کنید کهonFullBackup(FullBackupDataOutput)
را لغو میکند تا آنچه را که میخواهید ذخیره کند. برای حفظ اجرای پیشفرض سیستم، متد مربوطه را در superclass باsuper.onFullBackup()
فراخوانی کنید.
اگر یک BackupAgent
پیادهسازی میکنید، بهطور پیشفرض سیستم انتظار دارد که برنامه شما پشتیبانگیری و بازیابی کلید-مقدار را انجام دهد. برای استفاده از پشتیبانگیری خودکار مبتنی بر فایل، ویژگی android:fullBackupOnly
را در مانیفست برنامهتان روی true
تنظیم کنید.
در طول عملیات پشتیبانگیری و بازیابی خودکار، سیستم برنامه را در حالت محدود راهاندازی میکند تا هم از دسترسی برنامه به فایلهایی که ممکن است باعث تداخل میشود جلوگیری کند و هم به برنامه اجازه دهد روشهای برگشت به تماس را در BackupAgent
خود اجرا کند. در این حالت محدود، فعالیت اصلی برنامه بهطور خودکار راهاندازی نمیشود، ارائهدهندگان محتوای آن مقداردهی اولیه نمیشوند، و بهجای هر زیرکلاس اعلامشده در مانیفست برنامه، Application
کلاس پایه نمونهسازی میشود.
BackupAgent
شما باید متدهای انتزاعی onBackup()
و onRestore()
را پیاده سازی کند که برای پشتیبان گیری کلید-مقدار استفاده می شود. اگر نمیخواهید پشتیبانگیری با مقدار کلید انجام دهید، میتوانید پیادهسازی آن روشها را خالی بگذارید.
برای اطلاعات بیشتر، به Extend BackupAgent مراجعه کنید.
،پشتیبانگیری خودکار برای برنامهها بهطور خودکار از دادههای کاربر از برنامههایی که Android 6.0 (سطح API 23) یا بالاتر را هدف قرار داده و اجرا میکنند، نسخه پشتیبان تهیه میکند. Android دادههای برنامه را با آپلود آن در Google Drive کاربر حفظ میکند، جایی که توسط اعتبار حساب Google کاربر محافظت میشود. پشتیبانگیری در دستگاههای دارای Android 9 یا بالاتر با استفاده از پین، الگو یا رمز عبور دستگاه، رمزگذاری شده است. هر برنامه می تواند حداکثر 25 مگابایت داده پشتیبان را برای هر کاربر برنامه اختصاص دهد. هیچ هزینه ای برای ذخیره سازی داده های پشتیبان وجود ندارد. برنامه شما میتواند فرآیند پشتیبانگیری را سفارشی کند یا با غیرفعال کردن پشتیبانگیری، از آن انصراف دهد.
برای مروری بر گزینههای پشتیبانگیری Android و راهنمایی درباره اینکه کدام دادهها باید پشتیبانگیری و بازیابی شوند، به نمای کلی پشتیبانگیری از دادهها مراجعه کنید.
فایل هایی که بک آپ گرفته شده اند
به طور پیشفرض، پشتیبانگیری خودکار شامل فایلهایی در بیشتر فهرستهای راهنمای سیستم میشود که به برنامه شما اختصاص داده شدهاند:
فایل های ترجیحی مشترک
فایلهایی که در حافظه داخلی برنامه شما ذخیره میشوند و توسط
getFilesDir()
یاgetDir(String, int)
قابل دسترسی هستند.فایلهای موجود در دایرکتوری که توسط
getDatabasePath(String)
برگردانده میشوند، که شامل فایلهای ایجاد شده با کلاسSQLiteOpenHelper
نیز میشود.فایلهای موجود در حافظه خارجی در دایرکتوری که توسط
getExternalFilesDir(String)
برگردانده شدهاند.
پشتیبانگیری خودکار فایلهای موجود در فهرستهای بازگردانده شده توسط getCacheDir()
، getCodeCacheDir()
و getNoBackupFilesDir()
را مستثنی میکند. فایلهای ذخیرهشده در این مکانها فقط بهطور موقت مورد نیاز هستند و عمداً از عملیات پشتیبانگیری حذف میشوند.
میتوانید برنامه خود را طوری پیکربندی کنید که فایلهای خاصی را شامل و حذف کند. برای اطلاعات بیشتر به بخش Include and Exclude files مراجعه کنید.
مکان پشتیبان گیری
داده های پشتیبان در یک پوشه خصوصی در حساب کاربری گوگل درایو کاربر ذخیره می شود که به ازای هر برنامه 25 مگابایت محدود می شود. داده های ذخیره شده در سهمیه Google Drive شخصی کاربر به حساب نمی آید. فقط آخرین نسخه پشتیبان ذخیره می شود. هنگامی که یک نسخه پشتیبان تهیه می شود، هر نسخه پشتیبان قبلی حذف می شود. داده های پشتیبان توسط کاربر یا سایر برنامه های دستگاه قابل خواندن نیست.
کاربران میتوانند فهرستی از برنامههایی را که در برنامه اندروید Google Drive پشتیبانگیری شدهاند، مشاهده کنند. در دستگاههای مجهز به Android، کاربران میتوانند این فهرست را در کشوی پیمایش برنامه Drive در زیر تنظیمات > پشتیبانگیری و بازنشانی پیدا کنند.
پشتیبانگیریها از هر دستگاه-setup-lifetime در مجموعه دادههای جداگانه ذخیره میشوند، همانطور که در مثالهای زیر توضیح داده شده است:
اگر کاربر دارای دو دستگاه باشد، یک مجموعه داده پشتیبان برای هر دستگاه وجود دارد.
اگر کاربر دستگاهی را به تنظیمات کارخانه بازنشانی کند و سپس دستگاه را با همان حساب راهاندازی کند، نسخه پشتیبان در یک مجموعه داده جدید ذخیره میشود. مجموعه داده های منسوخ شده به طور خودکار پس از یک دوره عدم فعالیت حذف می شوند.
برنامه پشتیبان گیری
پشتیبان گیری به طور خودکار زمانی انجام می شود که تمام شرایط زیر برآورده شود:
- کاربر پشتیبان گیری را در دستگاه فعال کرده است. در Android 9، این تنظیم در Settings > System > Backup قرار دارد.
- حداقل 24 ساعت از آخرین پشتیبان گیری گذشته است.
- دستگاه بیکار است.
- دستگاه به یک شبکه Wi-Fi متصل است (اگر کاربر دستگاه از تهیه نسخه پشتیبان از داده های تلفن همراه استفاده نکرده باشد).
در عمل، این شرایط تقریباً هر شب اتفاق میافتد، اما ممکن است دستگاه هرگز پشتیبانگیری نکند (مثلاً اگر هرگز به شبکه وصل نشود). برای حفظ پهنای باند شبکه، آپلود فقط در صورتی انجام میشود که دادههای برنامه تغییر کرده باشد.
در طول پشتیبانگیری خودکار، سیستم برنامه را خاموش میکند تا مطمئن شود که دیگر در سیستم فایل نمینویسد. بهطور پیشفرض، سیستم پشتیبانگیری برنامههایی را که در پیشزمینه اجرا میشوند نادیده میگیرد تا از تجربه کاربری ضعیف جلوگیری کند. میتوانید با تنظیم ویژگی android:backupInForeground
روی true، رفتار پیشفرض را لغو کنید.
برای سادهسازی تست، اندروید شامل ابزارهایی میشود که به شما امکان میدهد به صورت دستی یک نسخه پشتیبان از برنامه خود را شروع کنید. برای اطلاعات بیشتر، تست پشتیبانگیری و بازیابی را ببینید.
بازیابی برنامه زمانی
هر زمان که برنامه نصب شود، داده ها بازیابی می شوند، چه از فروشگاه Play، در حین راه اندازی دستگاه (زمانی که سیستم برنامه های نصب شده قبلی را نصب می کند)، یا با اجرای نصب adb
. عملیات بازیابی پس از نصب APK اما قبل از در دسترس قرار گرفتن برنامه برای راه اندازی توسط کاربر انجام می شود.
در طول ویزارد اولیه راه اندازی دستگاه، به کاربر لیستی از مجموعه داده های پشتیبان در دسترس نشان داده می شود و از آنها خواسته می شود که داده ها را از کدام یک بازیابی کند. هر کدام از مجموعه داده های پشتیبان انتخاب شود، به مجموعه داده اجدادی دستگاه تبدیل می شود. این دستگاه میتواند از پشتیبانهای خود یا مجموعه دادههای اجدادی خود را بازیابی کند. اگر نسخههای پشتیبان از هر دو منبع موجود باشد، دستگاه پشتیبانگیری خود را در اولویت قرار میدهد. اگر کاربر از طریق جادوگر راه اندازی دستگاه نرفته باشد، دستگاه فقط می تواند از نسخه پشتیبان خود بازیابی کند.
برای سادهسازی تست، اندروید شامل ابزارهایی است که به شما امکان میدهد بازیابی برنامه خود را به صورت دستی شروع کنید. برای اطلاعات بیشتر، تست پشتیبانگیری و بازیابی را ببینید.
بک آپ را فعال و غیرفعال کنید
برنامههایی که Android 6.0 (سطح API 23) یا بالاتر را هدف قرار میدهند، بهطور خودکار در پشتیبانگیری خودکار شرکت میکنند. در فایل مانیفست برنامه خود، مقدار بولی android:allowBackup
برای فعال یا غیرفعال کردن پشتیبانگیری تنظیم کنید. مقدار پیشفرض true
است، اما توصیه میکنیم که مشخصه را به صراحت در مانیفست خود تنظیم کنید، همانطور که در مثال زیر نشان داده شده است:
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
با تنظیم android:allowBackup
روی false
می توانید پشتیبان گیری را غیرفعال کنید. اگر برنامه شما بتواند وضعیت خود را از طریق مکانیسم دیگری بازسازی کند یا اگر برنامه شما با اطلاعات حساس سروکار دارد، ممکن است بخواهید این کار را انجام دهید.
شامل و حذف فایل ها
به طور پیش فرض، سیستم تقریباً از تمام داده های برنامه نسخه پشتیبان تهیه می کند. برای اطلاعات بیشتر، به بخش مربوط به فایلهایی که پشتیبانگیری میشوند، مراجعه کنید.
این بخش به شما نشان میدهد که چگونه قوانین XML سفارشی را برای کنترل موارد پشتیبانگیری شده تعریف کنید. اگر برنامه شما Android 12 (سطح API 31) یا بالاتر را هدف قرار میدهد، باید مجموعه دیگری از قوانین پشتیبانگیری XML را مشخص کنید ، همانطور که در این بخش توضیح داده شده است تا از تغییرات بازیابی نسخه پشتیبان که برای دستگاههایی که این نسخههای Android را اجرا میکنند، پشتیبانی کند.
پشتیبانگیری را در اندروید ۱۱ و پایینتر کنترل کنید
مراحل این بخش را دنبال کنید تا کنترل کنید از کدام فایلها در دستگاههای دارای Android 11 (سطح API 30) یا پایینتر پشتیبانگیری شود.
همانطور که در مثال زیر نشان داده شده است، در فایل
AndroidManifest.xml
، ویژگیandroid:fullBackupContent
را به عنصر<application>
اضافه کنید. این ویژگی به یک فایل XML اشاره می کند که حاوی قوانین پشتیبان است.<application ... android:fullBackupContent="@xml/backup_rules"> </application>
یک فایل XML به نام
@xml/ backup_rules
در دایرکتوریres/xml/
ایجاد کنید. در این فایل قوانینی را با عناصر<include>
و<exclude>
اضافه کنید. نمونه زیر از تمام تنظیمات برگزیده مشترک به جزdevice.xml
نسخه پشتیبان تهیه می کند:<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/> </full-backup-content>
شرایط دستگاه مورد نیاز برای تهیه نسخه پشتیبان را تعریف کنید
اگر برنامه شما اطلاعات حساس را در دستگاه ذخیره می کند، می توانید شرایطی را مشخص کنید که تحت آن داده های برنامه شما در پشتیبان گیری کاربر گنجانده شود. میتوانید شرایط زیر را در Android 9 (سطح API 28) یا بالاتر اضافه کنید:
-
clientSideEncryption
: نسخه پشتیبان کاربر با یک راز سمت سرویس گیرنده رمزگذاری می شود. این شکل از رمزگذاری در دستگاههای دارای Android 9 یا بالاتر تا زمانی فعال میشود که کاربر پشتیبانگیری را در Android 9 یا بالاتر فعال کرده باشد و قفل صفحه (PIN، الگو، یا رمز عبور) را برای دستگاه خود تنظیم کرده باشد. -
deviceToDeviceTransfer
: کاربر در حال انتقال نسخه پشتیبان خود به دستگاه دیگری است که از انتقال محلی دستگاه به دستگاه پشتیبانی می کند (مثلاً Google Pixel).
اگر دستگاههای توسعهدهنده خود را به اندروید 9 ارتقا دادهاید، باید پشتیبانگیری از دادهها را غیرفعال کرده و پس از ارتقا دوباره فعال کنید. این به این دلیل است که اندروید تنها پس از اطلاع دادن به کاربران در تنظیمات یا جادوگر راهاندازی، پشتیبانگیریها را با یک راز سمت کلاینت رمزگذاری میکند.
برای اعلام شرایط گنجاندن، ویژگی requireFlags
را روی یک مقدار یا مقادیر انتخابی در عناصر <include>
در مجموعه قوانین پشتیبان خود تنظیم کنید:
<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <!-- App data isn't included in user's backup unless client-side encryption is enabled. --> <include domain="file" path="." requireFlags="clientSideEncryption" /> </full-backup-content>
اگر برنامه شما یک سیستم پشتیبان با مقدار کلید را پیادهسازی میکند یا اگر خودتان BackupAgent
پیادهسازی میکنید ، میتوانید با انجام یک مقایسه بیتی بین مجموعه پرچمهای حملونقل یک شی BackupDataOutput
و FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED
یا Flagهای_ FLAG_DEVICE_TO_DEVICE_TRANSFER
این الزامات شرطی را برای منطق پشتیبانگیری خود اعمال کنید. .
قطعه کد زیر نمونه ای از استفاده از این روش را نشان می دهد:
کاتلین
class CustomBackupAgent : BackupAgent() { override fun onBackup(oldState: ParcelFileDescriptor?, data: BackupDataOutput?, newState: ParcelFileDescriptor?) { if (data != null) { if ((data.transportFlags and FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.transportFlags and FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } } // Implementation of onRestore() here. }
جاوا
public class CustomBackupAgent extends BackupAgent { @Override public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException { if ((data.getTransportFlags() & FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.getTransportFlags() & FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } // Implementation of onRestore() here. }
پشتیبانگیری را در Android 12 یا بالاتر کنترل کنید
اگر برنامه شما Android 12 (سطح API 31) یا بالاتر را هدف قرار میدهد، مراحل این بخش را دنبال کنید تا کنترل کنید از کدام فایلها در دستگاههای دارای Android 12 یا بالاتر پشتیبانگیری شود.
همانطور که در مثال زیر نشان داده شده است، در فایل
AndroidManifest.xml
، ویژگیandroid:dataExtractionRules
را به عنصر<application>
اضافه کنید. این ویژگی به یک فایل XML اشاره می کند که حاوی قوانین پشتیبان است.<application ... android:dataExtractionRules="backup_rules.xml"> </application>
یک فایل XML به نام
backup_rules .xml
در دایرکتوریres/xml/
ایجاد کنید. در این فایل قوانینی را با عناصر<include>
و<exclude>
اضافه کنید. نمونه زیر از تمام تنظیمات برگزیده مشترک به جزdevice.xml
نسخه پشتیبان تهیه می کند:<?xml version="1.0" encoding="utf-8"?> <data-extraction-rules> <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/> </cloud-backup> </data-extraction-rules>
نحو پیکربندی XML
دستور XML برای فایل پیکربندی بسته به نسخه اندرویدی که برنامه شما در آن هدف قرار داده و اجرا میشود، متفاوت است.
اندروید 11 یا پایین تر
از دستور XML زیر برای فایل پیکربندی استفاده کنید که پشتیبانگیری را برای دستگاههای دارای Android 11 یا پایینتر کنترل میکند .
<full-backup-content> <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string" requireFlags=["clientSideEncryption" | "deviceToDeviceTransfer"] /> <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string" /> </full-backup-content>
اندروید 12 یا بالاتر
اگر برنامه شما Android 12 (سطح API 31) یا بالاتر را هدف قرار میدهد، از دستور XML زیر برای فایل پیکربندی استفاده کنید که پشتیبانگیری را برای دستگاههای دارای Android 12 یا بالاتر کنترل میکند .
<data-extraction-rules> <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]> ... <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... </cloud-backup> <device-transfer> ... <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... </device-transfer> </data-extraction-rules>
هر بخش از پیکربندی ( <cloud-backup>
، <device-transfer>
) حاوی قوانینی است که فقط برای آن نوع انتقال اعمال می شود. این جداسازی به شما امکان میدهد، برای مثال، یک فایل یا دایرکتوری را از پشتیبانگیری Google Drive حذف کنید، در حالی که همچنان آن را در حین انتقال دستگاه به دستگاه (D2D) منتقل میکنید. اگر فایلهایی دارید که برای پشتیبانگیری در فضای ابری خیلی بزرگ هستند، اما میتوانند بدون مشکل بین دستگاهها منتقل شوند، مفید است.
اگر قوانینی برای یک حالت پشتیبان خاص وجود نداشته باشد، مثلاً اگر بخش <device-transfer>
وجود نداشته باشد، آن حالت برای همه محتوا به جز دایرکتوریهای no-backup
و cache
کاملاً فعال میشود، همانطور که در فایلهایی که پشتیبانگیری میشوند توضیح داده شده است. بخش
برنامه شما میتواند پرچم disableIfNoEncryptionCapabilities
را در بخش <cloud-backup>
تنظیم کند تا مطمئن شود که پشتیبانگیری تنها در صورتی انجام میشود که بتوان آن را رمزگذاری کرد، مانند زمانی که کاربر صفحه قفل داشته باشد. اگر دستگاه کاربر نتواند از رمزگذاری پشتیبانی کند، تنظیم این محدودیت، ارسال نسخه پشتیبان به ابر را متوقف میکند، اما از آنجایی که انتقالهای D2D به سرور ارسال نمیشوند، حتی در دستگاههایی که از رمزگذاری پشتیبانی نمیکنند به کار خود ادامه میدهند.
نحو برای شامل و حذف عناصر
در داخل تگهای <full-backup-content>
، <cloud-backup>
و <device-transfer>
(بسته به نسخه Android دستگاه و targetSDKVersion
برنامه شما)، میتوانید عناصر <include>
و <exclude>
را تعریف کنید:
-
<include>
یک فایل یا پوشه را برای پشتیبان گیری مشخص می کند. به طور پیش فرض، پشتیبان گیری خودکار تقریباً همه فایل های برنامه را شامل می شود. اگر عنصر
<include>
را مشخص کنید، سیستم دیگر به طور پیشفرض شامل هیچ فایلی نمیشود و فقط از فایلهای مشخصشده نسخه پشتیبان تهیه میکند. برای گنجاندن چندین فایل، از چندین عنصر<include>
استفاده کنید.در اندروید 11 و نسخههای پایینتر ، این عنصر همچنین میتواند حاوی ویژگیهای
requireFlags
باشد، که در قسمتی که نحوه تعریف الزامات شرطی برای پشتیبانگیری را توضیح میدهد، با جزئیات بیشتری به آن پرداخته میشود.فایلهای موجود در دایرکتوریهایی که توسط
getCacheDir()
،getCodeCacheDir()
یاgetNoBackupFilesDir()
بازگردانده میشوند، همیشه حذف میشوند، حتی اگر بخواهید آنها را اضافه کنید.-
<exclude>
فایل یا پوشه ای را برای حذف در حین پشتیبان گیری مشخص می کند. در اینجا چند فایل وجود دارد که معمولاً از پشتیبانگیری حذف میشوند:
فایلهایی که دارای شناسههای خاص دستگاه هستند، یا توسط سرور صادر شده یا در دستگاه تولید شدهاند. به عنوان مثال، Firebase Cloud Messaging (FCM) باید هر بار که کاربر برنامه شما را روی دستگاه جدیدی نصب میکند، یک نشانه ثبت نام ایجاد کند. اگر رمز ثبت نام قدیمی بازیابی شود، برنامه ممکن است غیرمنتظره عمل کند.
فایل های مربوط به اشکال زدایی برنامه
فایلهای بزرگی که باعث میشوند برنامه از سهمیه پشتیبان 25 مگابایتی فراتر رود.
هر عنصر <include>
و <exclude>
باید شامل دو ویژگی زیر باشد:
-
domain
محل منبع را مشخص می کند. مقادیر معتبر برای این ویژگی شامل موارد زیر است:
-
root
: دایرکتوری در سیستم فایل که در آن همه فایل های خصوصی متعلق به این برنامه ذخیره می شوند. -
file
: دایرکتوری هایی که توسطgetFilesDir()
برگردانده شده اند. -
database
: دایرکتوری هایی که توسطgetDatabasePath()
برگردانده شده اند. پایگاه های داده ایجاد شده باSQLiteOpenHelper
در اینجا ذخیره می شوند. -
sharedpref
: دایرکتوری که در آنSharedPreferences
ذخیره می شود. -
external
: فهرستی که توسطgetExternalFilesDir()
برگردانده شده است. -
device_root
: مانندroot
اما برای ذخیره سازی محافظت شده توسط دستگاه. -
device_file
: مانندfile
اما برای ذخیره سازی محافظت شده توسط دستگاه. -
device_database
: مانندdatabase
اما برای ذخیره سازی محافظت شده توسط دستگاه. -
device_sharedpref
: مانندsharedpref
اما برای ذخیره سازی محافظت شده توسط دستگاه.
-
-
path
فایل یا پوشه ای را برای گنجاندن یا حذف از پشتیبان تعیین می کند. به موارد زیر توجه کنید:
- این ویژگی از دستور عام یا دستور عبارت منظم پشتیبانی نمی کند.
- شما می توانید با استفاده از
./
به دایرکتوری فعلی ارجاع دهید، اما به دلایل امنیتی نمی توانید به دایرکتوری والد ارجاع دهید، مانند استفاده از..
. - اگر دایرکتوری را مشخص کنید، این قانون برای همه فایلهای دایرکتوری و زیر شاخههای بازگشتی اعمال میشود.
BackupAgent را پیاده سازی کنید
برنامههایی که پشتیبانگیری خودکار را پیادهسازی میکنند، نیازی به اجرای BackupAgent
ندارند. با این حال، می توانید به صورت اختیاری یک BackupAgent
سفارشی را پیاده سازی کنید. به طور معمول، دو دلیل برای انجام این کار وجود دارد:
می خواهید اعلان رویدادهای پشتیبان، مانند
onRestoreFinished()
وonQuotaExceeded(long, long)
دریافت کنید. این روشهای پاسخ به تماس حتی اگر برنامه در حال اجرا نباشد اجرا میشوند.شما نمی توانید به راحتی مجموعه فایل هایی را که می خواهید از آنها نسخه پشتیبان تهیه کنید با قوانین XML بیان کنید. در این موارد نادر، میتوانید یک
BackupAgent
پیادهسازی کنید کهonFullBackup(FullBackupDataOutput)
را لغو میکند تا آنچه را که میخواهید ذخیره کند. برای حفظ اجرای پیشفرض سیستم، متد مربوطه را در superclass باsuper.onFullBackup()
فراخوانی کنید.
اگر یک BackupAgent
پیادهسازی میکنید، بهطور پیشفرض سیستم انتظار دارد که برنامه شما پشتیبانگیری و بازیابی کلید-مقدار را انجام دهد. برای استفاده از پشتیبانگیری خودکار مبتنی بر فایل، ویژگی android:fullBackupOnly
را در مانیفست برنامهتان روی true
تنظیم کنید.
در طول عملیات پشتیبانگیری و بازیابی خودکار، سیستم برنامه را در حالت محدود راهاندازی میکند تا هم از دسترسی برنامه به فایلهایی که ممکن است باعث تداخل میشود جلوگیری کند و هم به برنامه اجازه دهد روشهای برگشت به تماس را در BackupAgent
خود اجرا کند. در این حالت محدود، فعالیت اصلی برنامه بهطور خودکار راهاندازی نمیشود، ارائهدهندگان محتوای آن مقداردهی اولیه نمیشوند، و بهجای هر زیرکلاس اعلامشده در مانیفست برنامه، Application
کلاس پایه نمونهسازی میشود.
BackupAgent
شما باید متدهای انتزاعی onBackup()
و onRestore()
را پیاده سازی کند که برای پشتیبان گیری کلید-مقدار استفاده می شود. اگر نمیخواهید پشتیبانگیری با مقدار کلید انجام دهید، میتوانید پیادهسازی آن روشها را خالی بگذارید.
برای اطلاعات بیشتر، به Extend BackupAgent مراجعه کنید.
،پشتیبانگیری خودکار برای برنامهها بهطور خودکار از دادههای کاربر از برنامههایی که Android 6.0 (سطح API 23) یا بالاتر را هدف قرار داده و اجرا میکنند، نسخه پشتیبان تهیه میکند. Android دادههای برنامه را با آپلود آن در Google Drive کاربر حفظ میکند، جایی که توسط اعتبار حساب Google کاربر محافظت میشود. پشتیبانگیری در دستگاههای دارای Android 9 یا بالاتر با استفاده از پین، الگو یا رمز عبور دستگاه، رمزگذاری شده است. هر برنامه می تواند حداکثر 25 مگابایت داده پشتیبان را برای هر کاربر برنامه اختصاص دهد. هیچ هزینه ای برای ذخیره سازی داده های پشتیبان وجود ندارد. برنامه شما میتواند فرآیند پشتیبانگیری را سفارشی کند یا با غیرفعال کردن پشتیبانگیری، از آن انصراف دهد.
برای مروری بر گزینههای پشتیبانگیری Android و راهنمایی درباره اینکه کدام دادهها باید پشتیبانگیری و بازیابی شوند، به نمای کلی پشتیبانگیری از دادهها مراجعه کنید.
فایل هایی که بک آپ گرفته شده اند
به طور پیشفرض، پشتیبانگیری خودکار شامل فایلهایی در بیشتر فهرستهای راهنمای سیستم میشود که به برنامه شما اختصاص داده شدهاند:
فایل های ترجیحی مشترک
فایلهایی که در حافظه داخلی برنامه شما ذخیره میشوند و توسط
getFilesDir()
یاgetDir(String, int)
قابل دسترسی هستند.فایلهای موجود در دایرکتوری که توسط
getDatabasePath(String)
برگردانده میشوند، که شامل فایلهای ایجاد شده با کلاسSQLiteOpenHelper
نیز میشود.فایلهای موجود در حافظه خارجی در دایرکتوری که توسط
getExternalFilesDir(String)
برگردانده شدهاند.
پشتیبانگیری خودکار فایلهای موجود در فهرستهای بازگردانده شده توسط getCacheDir()
، getCodeCacheDir()
و getNoBackupFilesDir()
را مستثنی میکند. فایلهای ذخیرهشده در این مکانها فقط بهطور موقت مورد نیاز هستند و عمداً از عملیات پشتیبانگیری حذف میشوند.
میتوانید برنامه خود را طوری پیکربندی کنید که فایلهای خاصی را شامل و حذف کند. برای اطلاعات بیشتر به بخش Include and Exclude files مراجعه کنید.
مکان پشتیبان گیری
داده های پشتیبان در یک پوشه خصوصی در حساب کاربری گوگل درایو کاربر ذخیره می شود که به ازای هر برنامه 25 مگابایت محدود می شود. داده های ذخیره شده در سهمیه Google Drive شخصی کاربر به حساب نمی آید. فقط آخرین نسخه پشتیبان ذخیره می شود. هنگامی که یک نسخه پشتیبان تهیه می شود، هر نسخه پشتیبان قبلی حذف می شود. داده های پشتیبان توسط کاربر یا سایر برنامه های دستگاه قابل خواندن نیست.
کاربران میتوانند فهرستی از برنامههایی را که در برنامه اندروید Google Drive پشتیبانگیری شدهاند، مشاهده کنند. در دستگاههای مجهز به Android، کاربران میتوانند این فهرست را در کشوی پیمایش برنامه Drive در زیر تنظیمات > پشتیبانگیری و بازنشانی پیدا کنند.
پشتیبانگیریها از هر دستگاه-setup-lifetime در مجموعه دادههای جداگانه ذخیره میشوند، همانطور که در مثالهای زیر توضیح داده شده است:
اگر کاربر دارای دو دستگاه باشد، یک مجموعه داده پشتیبان برای هر دستگاه وجود دارد.
اگر کاربر دستگاهی را به تنظیمات کارخانه بازنشانی کند و سپس دستگاه را با همان حساب راهاندازی کند، نسخه پشتیبان در یک مجموعه داده جدید ذخیره میشود. مجموعه داده های منسوخ شده به طور خودکار پس از یک دوره عدم فعالیت حذف می شوند.
برنامه پشتیبان گیری
پشتیبان گیری به طور خودکار زمانی انجام می شود که تمام شرایط زیر برآورده شود:
- کاربر پشتیبان گیری را در دستگاه فعال کرده است. در Android 9، این تنظیم در Settings > System > Backup قرار دارد.
- حداقل 24 ساعت از آخرین پشتیبان گیری گذشته است.
- دستگاه بیکار است.
- دستگاه به یک شبکه Wi-Fi متصل است (اگر کاربر دستگاه از تهیه نسخه پشتیبان از داده های تلفن همراه استفاده نکرده باشد).
در عمل، این شرایط تقریباً هر شب اتفاق میافتد، اما ممکن است دستگاه هرگز پشتیبانگیری نکند (مثلاً اگر هرگز به شبکه وصل نشود). برای حفظ پهنای باند شبکه، آپلود فقط در صورتی انجام میشود که دادههای برنامه تغییر کرده باشد.
در طول پشتیبانگیری خودکار، سیستم برنامه را خاموش میکند تا مطمئن شود که دیگر در سیستم فایل نمینویسد. بهطور پیشفرض، سیستم پشتیبانگیری برنامههایی را که در پیشزمینه اجرا میشوند نادیده میگیرد تا از تجربه کاربری ضعیف جلوگیری کند. میتوانید با تنظیم ویژگی android:backupInForeground
روی true، رفتار پیشفرض را لغو کنید.
برای سادهسازی تست، اندروید شامل ابزارهایی میشود که به شما امکان میدهد به صورت دستی یک نسخه پشتیبان از برنامه خود را شروع کنید. برای اطلاعات بیشتر، تست پشتیبانگیری و بازیابی را ببینید.
بازیابی برنامه زمانی
هر زمان که برنامه نصب شود، داده ها بازیابی می شوند، چه از فروشگاه Play، در حین راه اندازی دستگاه (زمانی که سیستم برنامه های نصب شده قبلی را نصب می کند)، یا با اجرای نصب adb
. عملیات بازیابی پس از نصب APK اما قبل از در دسترس قرار گرفتن برنامه برای راه اندازی توسط کاربر انجام می شود.
در طول ویزارد اولیه راه اندازی دستگاه، به کاربر لیستی از مجموعه داده های پشتیبان در دسترس نشان داده می شود و از آنها خواسته می شود که داده ها را از کدام یک بازیابی کند. هر کدام از مجموعه داده های پشتیبان انتخاب شود، به مجموعه داده اجدادی دستگاه تبدیل می شود. این دستگاه میتواند از پشتیبانهای خود یا مجموعه دادههای اجدادی خود را بازیابی کند. اگر نسخههای پشتیبان از هر دو منبع موجود باشد، دستگاه پشتیبانگیری خود را در اولویت قرار میدهد. اگر کاربر از طریق جادوگر راه اندازی دستگاه نرفته باشد، دستگاه فقط می تواند از نسخه پشتیبان خود بازیابی کند.
برای سادهسازی تست، اندروید شامل ابزارهایی است که به شما امکان میدهد بازیابی برنامه خود را به صورت دستی شروع کنید. برای اطلاعات بیشتر، تست پشتیبانگیری و بازیابی را ببینید.
بک آپ را فعال و غیرفعال کنید
برنامههایی که Android 6.0 (سطح API 23) یا بالاتر را هدف قرار میدهند، بهطور خودکار در پشتیبانگیری خودکار شرکت میکنند. در فایل مانیفست برنامه خود، مقدار بولی android:allowBackup
برای فعال یا غیرفعال کردن پشتیبانگیری تنظیم کنید. مقدار پیشفرض true
است، اما توصیه میکنیم که مشخصه را به صراحت در مانیفست خود تنظیم کنید، همانطور که در مثال زیر نشان داده شده است:
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
با تنظیم android:allowBackup
روی false
می توانید پشتیبان گیری را غیرفعال کنید. اگر برنامه شما بتواند وضعیت خود را از طریق مکانیسم دیگری بازسازی کند یا اگر برنامه شما با اطلاعات حساس سروکار دارد، ممکن است بخواهید این کار را انجام دهید.
شامل و حذف فایل ها
به طور پیش فرض، سیستم تقریباً از تمام داده های برنامه نسخه پشتیبان تهیه می کند. برای اطلاعات بیشتر، به بخش مربوط به فایلهایی که پشتیبانگیری میشوند، مراجعه کنید.
این بخش به شما نشان میدهد که چگونه قوانین XML سفارشی را برای کنترل موارد پشتیبانگیری شده تعریف کنید. اگر برنامه شما Android 12 (سطح API 31) یا بالاتر را هدف قرار میدهد، باید مجموعه دیگری از قوانین پشتیبانگیری XML را مشخص کنید ، همانطور که در این بخش توضیح داده شده است تا از تغییرات بازیابی نسخه پشتیبان که برای دستگاههایی که این نسخههای Android را اجرا میکنند، پشتیبانی کند.
پشتیبانگیری را در اندروید ۱۱ و پایینتر کنترل کنید
مراحل این بخش را دنبال کنید تا کنترل کنید از کدام فایلها در دستگاههای دارای Android 11 (سطح API 30) یا پایینتر پشتیبانگیری شود.
همانطور که در مثال زیر نشان داده شده است، در فایل
AndroidManifest.xml
، ویژگیandroid:fullBackupContent
را به عنصر<application>
اضافه کنید. این ویژگی به یک فایل XML اشاره می کند که حاوی قوانین پشتیبان است.<application ... android:fullBackupContent="@xml/backup_rules"> </application>
یک فایل XML به نام
@xml/ backup_rules
در دایرکتوریres/xml/
ایجاد کنید. در این فایل قوانینی را با عناصر<include>
و<exclude>
اضافه کنید. نمونه زیر از تمام تنظیمات برگزیده مشترک به جزdevice.xml
نسخه پشتیبان تهیه می کند:<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/> </full-backup-content>
شرایط دستگاه مورد نیاز برای تهیه نسخه پشتیبان را تعریف کنید
اگر برنامه شما اطلاعات حساس را در دستگاه ذخیره می کند، می توانید شرایطی را مشخص کنید که تحت آن داده های برنامه شما در پشتیبان گیری کاربر گنجانده شود. میتوانید شرایط زیر را در Android 9 (سطح API 28) یا بالاتر اضافه کنید:
-
clientSideEncryption
: نسخه پشتیبان کاربر با یک راز سمت سرویس گیرنده رمزگذاری می شود. این شکل از رمزگذاری در دستگاههای دارای Android 9 یا بالاتر تا زمانی فعال میشود که کاربر پشتیبانگیری را در Android 9 یا بالاتر فعال کرده باشد و قفل صفحه (PIN، الگو، یا رمز عبور) را برای دستگاه خود تنظیم کرده باشد. -
deviceToDeviceTransfer
: کاربر در حال انتقال نسخه پشتیبان خود به دستگاه دیگری است که از انتقال محلی دستگاه به دستگاه پشتیبانی می کند (مثلاً Google Pixel).
اگر دستگاههای توسعهدهنده خود را به اندروید 9 ارتقا دادهاید، باید پشتیبانگیری از دادهها را غیرفعال کرده و پس از ارتقا دوباره فعال کنید. این به این دلیل است که اندروید تنها پس از اطلاع دادن به کاربران در تنظیمات یا جادوگر راهاندازی، پشتیبانگیریها را با یک راز سمت کلاینت رمزگذاری میکند.
برای اعلام شرایط گنجاندن، ویژگی requireFlags
را روی یک مقدار یا مقادیر انتخابی در عناصر <include>
در مجموعه قوانین پشتیبان خود تنظیم کنید:
<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <!-- App data isn't included in user's backup unless client-side encryption is enabled. --> <include domain="file" path="." requireFlags="clientSideEncryption" /> </full-backup-content>
اگر برنامه شما یک سیستم پشتیبان با مقدار کلید را پیادهسازی میکند یا اگر خودتان BackupAgent
پیادهسازی میکنید ، میتوانید با انجام یک مقایسه بیتی بین مجموعه پرچمهای حملونقل یک شی BackupDataOutput
و FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED
یا Flagهای_ FLAG_DEVICE_TO_DEVICE_TRANSFER
این الزامات شرطی را برای منطق پشتیبانگیری خود اعمال کنید. .
قطعه کد زیر نمونه ای از استفاده از این روش را نشان می دهد:
کاتلین
class CustomBackupAgent : BackupAgent() { override fun onBackup(oldState: ParcelFileDescriptor?, data: BackupDataOutput?, newState: ParcelFileDescriptor?) { if (data != null) { if ((data.transportFlags and FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.transportFlags and FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } } // Implementation of onRestore() here. }
جاوا
public class CustomBackupAgent extends BackupAgent { @Override public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException { if ((data.getTransportFlags() & FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.getTransportFlags() & FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } // Implementation of onRestore() here. }
پشتیبانگیری را در Android 12 یا بالاتر کنترل کنید
اگر برنامه شما Android 12 (سطح API 31) یا بالاتر را هدف قرار میدهد، مراحل این بخش را دنبال کنید تا کنترل کنید از کدام فایلها در دستگاههای دارای Android 12 یا بالاتر پشتیبانگیری شود.
همانطور که در مثال زیر نشان داده شده است، در فایل
AndroidManifest.xml
، ویژگیandroid:dataExtractionRules
را به عنصر<application>
اضافه کنید. این ویژگی به یک فایل XML اشاره می کند که حاوی قوانین پشتیبان است.<application ... android:dataExtractionRules="backup_rules.xml"> </application>
یک فایل XML به نام
backup_rules .xml
در دایرکتوریres/xml/
ایجاد کنید. در این فایل قوانینی را با عناصر<include>
و<exclude>
اضافه کنید. نمونه زیر از تمام تنظیمات برگزیده مشترک به جزdevice.xml
نسخه پشتیبان تهیه می کند:<?xml version="1.0" encoding="utf-8"?> <data-extraction-rules> <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/> </cloud-backup> </data-extraction-rules>
نحو پیکربندی XML
دستور XML برای فایل پیکربندی بسته به نسخه اندرویدی که برنامه شما در آن هدف قرار داده و اجرا میشود، متفاوت است.
اندروید 11 یا پایین تر
از دستور XML زیر برای فایل پیکربندی استفاده کنید که پشتیبانگیری را برای دستگاههای دارای Android 11 یا پایینتر کنترل میکند .
<full-backup-content> <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string" requireFlags=["clientSideEncryption" | "deviceToDeviceTransfer"] /> <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string" /> </full-backup-content>
اندروید 12 یا بالاتر
اگر برنامه شما Android 12 (سطح API 31) یا بالاتر را هدف قرار میدهد، از دستور XML زیر برای فایل پیکربندی استفاده کنید که پشتیبانگیری را برای دستگاههای دارای Android 12 یا بالاتر کنترل میکند .
<data-extraction-rules> <cloud-backup [disableIfNoEncryptionCapabilities="true|false"]> ... <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... </cloud-backup> <device-transfer> ... <include domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... <exclude domain=["file" | "database" | "sharedpref" | "external" | "root" | "device_file" | "device_database" | "device_sharedpref" | "device_root" ] path="string"/> ... </device-transfer> </data-extraction-rules>
هر بخش از پیکربندی ( <cloud-backup>
، <device-transfer>
) حاوی قوانینی است که فقط برای آن نوع انتقال اعمال می شود. این جداسازی به شما امکان میدهد، برای مثال، یک فایل یا دایرکتوری را از پشتیبانگیری Google Drive حذف کنید، در حالی که همچنان آن را در حین انتقال دستگاه به دستگاه (D2D) منتقل میکنید. اگر فایلهایی دارید که برای پشتیبانگیری در فضای ابری خیلی بزرگ هستند، اما میتوانند بدون مشکل بین دستگاهها منتقل شوند، مفید است.
اگر قوانینی برای یک حالت پشتیبان خاص وجود نداشته باشد، مثلاً اگر بخش <device-transfer>
وجود نداشته باشد، آن حالت برای همه محتوا به جز دایرکتوریهای no-backup
و cache
کاملاً فعال میشود، همانطور که در فایلهایی که پشتیبانگیری میشوند توضیح داده شده است. بخش
برنامه شما میتواند پرچم disableIfNoEncryptionCapabilities
را در بخش <cloud-backup>
تنظیم کند تا مطمئن شود که پشتیبانگیری تنها در صورتی انجام میشود که بتوان آن را رمزگذاری کرد، مانند زمانی که کاربر صفحه قفل داشته باشد. اگر دستگاه کاربر نتواند از رمزگذاری پشتیبانی کند، تنظیم این محدودیت، ارسال نسخه پشتیبان به ابر را متوقف میکند، اما از آنجایی که انتقالهای D2D به سرور ارسال نمیشوند، حتی در دستگاههایی که از رمزگذاری پشتیبانی نمیکنند به کار خود ادامه میدهند.
نحو برای شامل و حذف عناصر
در داخل تگهای <full-backup-content>
، <cloud-backup>
و <device-transfer>
(بسته به نسخه Android دستگاه و targetSDKVersion
برنامه شما)، میتوانید عناصر <include>
و <exclude>
را تعریف کنید:
-
<include>
یک فایل یا پوشه را برای پشتیبان گیری مشخص می کند. به طور پیش فرض، پشتیبان گیری خودکار تقریباً همه فایل های برنامه را شامل می شود. اگر عنصر
<include>
را مشخص کنید، سیستم دیگر به طور پیشفرض شامل هیچ فایلی نمیشود و فقط از فایلهای مشخصشده نسخه پشتیبان تهیه میکند. برای گنجاندن چندین فایل، از چندین عنصر<include>
استفاده کنید.در اندروید 11 و نسخههای پایینتر ، این عنصر همچنین میتواند حاوی ویژگیهای
requireFlags
باشد، که در قسمتی که نحوه تعریف الزامات شرطی برای پشتیبانگیری را توضیح میدهد، با جزئیات بیشتری به آن پرداخته میشود.فایلهای موجود در دایرکتوریهایی که توسط
getCacheDir()
،getCodeCacheDir()
یاgetNoBackupFilesDir()
بازگردانده میشوند، همیشه حذف میشوند، حتی اگر بخواهید آنها را اضافه کنید.-
<exclude>
فایل یا پوشه ای را برای حذف در حین پشتیبان گیری مشخص می کند. در اینجا چند فایل وجود دارد که معمولاً از پشتیبانگیری حذف میشوند:
فایلهایی که دارای شناسههای خاص دستگاه هستند، یا توسط سرور صادر شده یا در دستگاه تولید شدهاند. به عنوان مثال، Firebase Cloud Messaging (FCM) باید هر بار که کاربر برنامه شما را روی دستگاه جدیدی نصب میکند، یک نشانه ثبت نام ایجاد کند. اگر رمز ثبت نام قدیمی بازیابی شود، برنامه ممکن است غیرمنتظره عمل کند.
فایل های مربوط به اشکال زدایی برنامه
فایلهای بزرگی که باعث میشوند برنامه از سهمیه پشتیبان 25 مگابایتی فراتر رود.
هر عنصر <include>
و <exclude>
باید شامل دو ویژگی زیر باشد:
-
domain
محل منبع را مشخص می کند. مقادیر معتبر برای این ویژگی شامل موارد زیر است:
-
root
: دایرکتوری در سیستم فایل که در آن همه فایل های خصوصی متعلق به این برنامه ذخیره می شوند. -
file
: دایرکتوری هایی که توسطgetFilesDir()
برگردانده شده اند. -
database
: دایرکتوری هایی که توسطgetDatabasePath()
برگردانده شده اند. پایگاه های داده ایجاد شده باSQLiteOpenHelper
در اینجا ذخیره می شوند. -
sharedpref
: دایرکتوری که در آنSharedPreferences
ذخیره می شود. -
external
: فهرستی که توسطgetExternalFilesDir()
برگردانده شده است. -
device_root
: مانندroot
اما برای ذخیره سازی محافظت شده توسط دستگاه. -
device_file
: مانندfile
اما برای ذخیره سازی محافظت شده توسط دستگاه. -
device_database
: مانندdatabase
اما برای ذخیره سازی محافظت شده توسط دستگاه. -
device_sharedpref
: مانندsharedpref
اما برای ذخیره سازی محافظت شده توسط دستگاه.
-
-
path
فایل یا پوشه ای را برای گنجاندن یا حذف از پشتیبان تعیین می کند. به موارد زیر توجه کنید:
- این ویژگی از دستور عام یا دستور عبارت منظم پشتیبانی نمی کند.
- شما می توانید با استفاده از
./
به دایرکتوری فعلی ارجاع دهید، اما به دلایل امنیتی نمی توانید به دایرکتوری والد ارجاع دهید، مانند استفاده از..
. - اگر دایرکتوری را مشخص کنید، این قانون برای همه فایلهای دایرکتوری و زیر شاخههای بازگشتی اعمال میشود.
BackupAgent را پیاده سازی کنید
برنامههایی که پشتیبانگیری خودکار را پیادهسازی میکنند، نیازی به اجرای BackupAgent
ندارند. با این حال، می توانید به صورت اختیاری یک BackupAgent
سفارشی را پیاده سازی کنید. به طور معمول، دو دلیل برای انجام این کار وجود دارد:
می خواهید اعلان رویدادهای پشتیبان، مانند
onRestoreFinished()
وonQuotaExceeded(long, long)
دریافت کنید. این روشهای پاسخ به تماس حتی اگر برنامه در حال اجرا نباشد اجرا میشوند.شما نمی توانید به راحتی مجموعه فایل هایی را که می خواهید از آنها نسخه پشتیبان تهیه کنید با قوانین XML بیان کنید. در این موارد نادر، میتوانید یک
BackupAgent
پیادهسازی کنید کهonFullBackup(FullBackupDataOutput)
را لغو میکند تا آنچه را که میخواهید ذخیره کند. برای حفظ اجرای پیشفرض سیستم، متد مربوطه را در superclass باsuper.onFullBackup()
فراخوانی کنید.
اگر یک BackupAgent
پیادهسازی میکنید، بهطور پیشفرض سیستم انتظار دارد که برنامه شما پشتیبانگیری و بازیابی کلید-مقدار را انجام دهد. برای استفاده از پشتیبانگیری خودکار مبتنی بر فایل، ویژگی android:fullBackupOnly
را در مانیفست برنامهتان روی true
تنظیم کنید.
در طول عملیات پشتیبانگیری و بازیابی خودکار، سیستم برنامه را در حالت محدود راهاندازی میکند تا هم از دسترسی برنامه به فایلهایی که ممکن است باعث تداخل میشود جلوگیری کند و هم به برنامه اجازه دهد روشهای برگشت به تماس را در BackupAgent
خود اجرا کند. در این حالت محدود، فعالیت اصلی برنامه بهطور خودکار راهاندازی نمیشود، ارائهدهندگان محتوای آن مقداردهی اولیه نمیشوند، و بهجای هر زیرکلاس اعلامشده در مانیفست برنامه، Application
کلاس پایه نمونهسازی میشود.
BackupAgent
شما باید متدهای انتزاعی onBackup()
و onRestore()
را پیاده سازی کند که برای پشتیبان گیری کلید-مقدار استفاده می شود. اگر نمیخواهید پشتیبانگیری با مقدار کلید انجام دهید، میتوانید پیادهسازی آن روشها را خالی بگذارید.
برای اطلاعات بیشتر، به Extend BackupAgent مراجعه کنید.