স্বয়ংক্রিয় ব্যাকআপ দিয়ে ব্যবহারকারীর ডেটা ব্যাক আপ করুন

অ্যাপ্লিকেশানগুলির জন্য স্বয়ংক্রিয় ব্যাকআপ স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশানগুলি থেকে ব্যবহারকারীর ডেটা ব্যাক আপ করে যেগুলি লক্ষ্য করে এবং Android 6.0 (API স্তর 23) বা তার উপরে চলে৷ অ্যান্ড্রয়েড অ্যাপ ডেটা সংরক্ষণ করে ব্যবহারকারীর Google ড্রাইভে আপলোড করে, যেখানে এটি ব্যবহারকারীর Google অ্যাকাউন্টের শংসাপত্র দ্বারা সুরক্ষিত থাকে। ব্যাকআপটি ডিভাইসের পিন, প্যাটার্ন বা পাসওয়ার্ড ব্যবহার করে Android 9 বা উচ্চতর সংস্করণে চলমান ডিভাইসগুলিতে এন্ড-টু-এন্ড এনক্রিপ্ট করা হয়। প্রতিটি অ্যাপ ব্যবহারকারী প্রতি 25 MB পর্যন্ত ব্যাকআপ ডেটা বরাদ্দ করতে পারে। ব্যাকআপ ডেটা সঞ্চয় করার জন্য কোন চার্জ নেই। আপনার অ্যাপ ব্যাকআপ প্রক্রিয়া কাস্টমাইজ করতে পারে বা ব্যাকআপ অক্ষম করে অপ্ট আউট করতে পারে৷

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

ব্যাক আপ করা হয় যে ফাইল

ডিফল্টরূপে, অটো ব্যাকআপ সিস্টেমের দ্বারা আপনার অ্যাপে বরাদ্দ করা বেশিরভাগ ডিরেক্টরির ফাইলগুলিকে অন্তর্ভুক্ত করে:

  • ভাগ করা পছন্দ ফাইল

  • ফাইলগুলি আপনার অ্যাপের অভ্যন্তরীণ সঞ্চয়স্থানে সংরক্ষিত এবং getFilesDir() বা getDir(String, int) দ্বারা অ্যাক্সেস করা হয়েছে

  • getDatabasePath(String) দ্বারা প্রত্যাবর্তিত ডিরেক্টরির ফাইলগুলি, যা SQLiteOpenHelper ক্লাসের সাথে তৈরি ফাইলগুলিও অন্তর্ভুক্ত করে

  • getExternalFilesDir(String) দ্বারা প্রত্যাবর্তিত ডিরেক্টরিতে বাহ্যিক সঞ্চয়স্থানের ফাইলগুলি

স্বয়ংক্রিয় ব্যাকআপ getCacheDir() , getCodeCacheDir() , এবং getNoBackupFilesDir() দ্বারা প্রত্যাবর্তিত ডিরেক্টরিগুলিতে ফাইলগুলিকে বাদ দেয়৷ এই অবস্থানগুলিতে সংরক্ষিত ফাইলগুলি শুধুমাত্র অস্থায়ীভাবে প্রয়োজন এবং ইচ্ছাকৃতভাবে ব্যাকআপ অপারেশন থেকে বাদ দেওয়া হয়৷

আপনি নির্দিষ্ট ফাইল অন্তর্ভুক্ত এবং বাদ দিতে আপনার অ্যাপ কনফিগার করতে পারেন। আরও তথ্যের জন্য, ফাইলগুলি অন্তর্ভুক্ত করুন এবং বাদ দিন দেখুন।

ব্যাকআপ অবস্থান

ব্যাকআপ ডেটা ব্যবহারকারীর Google ড্রাইভ অ্যাকাউন্টে একটি ব্যক্তিগত ফোল্ডারে সংরক্ষণ করা হয়, প্রতি অ্যাপে 25 MB পর্যন্ত সীমাবদ্ধ৷ সংরক্ষিত ডেটা ব্যবহারকারীর ব্যক্তিগত Google ড্রাইভ কোটার দিকে গণনা করা হয় না। শুধুমাত্র সাম্প্রতিক ব্যাকআপ সংরক্ষণ করা হয়. যখন একটি ব্যাকআপ তৈরি করা হয়, তখন আগের যেকোনো ব্যাকআপ মুছে ফেলা হয়। ব্যাকআপ ডেটা ব্যবহারকারী বা ডিভাইসে থাকা অন্যান্য অ্যাপ পড়তে পারে না।

ব্যবহারকারীরা গুগল ড্রাইভ অ্যান্ড্রয়েড অ্যাপে ব্যাক আপ নেওয়া অ্যাপগুলির একটি তালিকা দেখতে পারেন। একটি Android-চালিত ডিভাইসে, ব্যবহারকারীরা সেটিংস > ব্যাকআপ এবং রিসেট এর অধীনে ড্রাইভ অ্যাপের নেভিগেশন ড্রয়ারে এই তালিকাটি খুঁজে পেতে পারেন৷

প্রতিটি ডিভাইস-সেটআপ-লাইফটাইম থেকে ব্যাকআপগুলি পৃথক ডেটাসেটে সংরক্ষণ করা হয়, যেমনটি নিম্নলিখিত উদাহরণগুলিতে বর্ণিত হয়েছে:

  • ব্যবহারকারী যদি দুটি ডিভাইসের মালিক হন, তাহলে প্রতিটি ডিভাইসের জন্য একটি ব্যাকআপ ডেটাসেট বিদ্যমান থাকে।

  • যদি ব্যবহারকারী একটি ডিভাইস ফ্যাক্টরি-রিসেট করে এবং তারপরে একই অ্যাকাউন্টের সাথে ডিভাইসটি সেট আপ করে তবে ব্যাকআপটি একটি নতুন ডেটাসেটে সংরক্ষণ করা হয়। অপ্রচলিত ডেটাসেটগুলি নিষ্ক্রিয়তার সময়ের পরে স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়।

ব্যাকআপ সময়সূচী

নিম্নলিখিত সমস্ত শর্ত পূরণ হলে ব্যাকআপগুলি স্বয়ংক্রিয়ভাবে ঘটে:

  • ব্যবহারকারী ডিভাইসে ব্যাকআপ সক্ষম করেছেন৷ Android 9-এ, এই সেটিংটি সেটিংস > সিস্টেম > ব্যাকআপে রয়েছে।
  • শেষ ব্যাকআপ থেকে কমপক্ষে 24 ঘন্টা অতিবাহিত হয়েছে৷
  • ডিভাইসটি নিষ্ক্রিয়।
  • ডিভাইসটি একটি Wi-Fi নেটওয়ার্কের সাথে সংযুক্ত রয়েছে (যদি ডিভাইস ব্যবহারকারী মোবাইল-ডেটা ব্যাকআপ নির্বাচন না করে থাকে)।

অনুশীলনে, এই অবস্থাগুলি মোটামুটিভাবে প্রতি রাতে ঘটে, কিন্তু একটি ডিভাইস কখনই ব্যাক আপ করতে পারে না (উদাহরণস্বরূপ, যদি এটি কোনও নেটওয়ার্কের সাথে সংযোগ না করে)। নেটওয়ার্ক ব্যান্ডউইথ সংরক্ষণ করতে, অ্যাপের ডেটা পরিবর্তিত হলেই আপলোড করা হয়।

স্বয়ংক্রিয় ব্যাকআপের সময়, সিস্টেমটি অ্যাপটিকে বন্ধ করে দেয় যাতে এটি আর ফাইল সিস্টেমে লিখছে না। ডিফল্টরূপে, ব্যাকআপ সিস্টেম দুর্বল ব্যবহারকারীর অভিজ্ঞতা এড়াতে অগ্রভাগে চলমান অ্যাপগুলিকে উপেক্ষা করে। আপনি android:backupInForeground অ্যাট্রিবিউটটিকে true এ সেট করে ডিফল্ট আচরণ ওভাররাইড করতে পারেন।

পরীক্ষাকে সহজ করার জন্য, Android-এ এমন সরঞ্জাম রয়েছে যা আপনাকে ম্যানুয়ালি আপনার অ্যাপের একটি ব্যাকআপ শুরু করতে দেয়। আরও তথ্যের জন্য, পরীক্ষা ব্যাকআপ এবং পুনরুদ্ধার দেখুন।

সময়সূচী পুনরুদ্ধার করুন

যখনই অ্যাপটি ইনস্টল করা হয় তখনই ডেটা পুনরুদ্ধার করা হয়, তা প্লে স্টোর থেকে, ডিভাইস সেটআপের সময় (যখন সিস্টেম পূর্বে ইনস্টল করা অ্যাপগুলি ইনস্টল করে), বা adb ইনস্টল চালিয়ে। পুনরুদ্ধার অপারেশনটি APK ইনস্টল করার পরে ঘটে তবে ব্যবহারকারীর দ্বারা অ্যাপটি চালু করার জন্য উপলব্ধ হওয়ার আগে।

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

পরীক্ষাকে সহজ করার জন্য, Android-এ এমন সরঞ্জাম রয়েছে যা আপনাকে ম্যানুয়ালি আপনার অ্যাপের পুনরুদ্ধার শুরু করতে দেয়। আরও তথ্যের জন্য, পরীক্ষা ব্যাকআপ এবং পুনরুদ্ধার দেখুন।

ব্যাকআপ সক্ষম এবং অক্ষম করুন

যে অ্যাপগুলি Android 6.0 (API স্তর 23) বা উচ্চতরকে লক্ষ্য করে সেগুলি স্বয়ংক্রিয়ভাবে অটো ব্যাকআপে অংশগ্রহণ করে৷ আপনার অ্যাপ ম্যানিফেস্ট ফাইলে, বুলিয়ান মান সেট করুন android:allowBackup ব্যাকআপ সক্ষম বা অক্ষম করতে। ডিফল্ট মান true , কিন্তু আমরা আপনার ম্যানিফেস্টে স্পষ্টভাবে বৈশিষ্ট্য সেট করার পরামর্শ দিই, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<manifest ... >
    ...
    <application android:allowBackup="true" ... >
        ...
    </application>
</manifest>

আপনি android:allowBackup to false সেট করে ব্যাকআপ নিষ্ক্রিয় করতে পারেন। আপনি এটি করতে চাইতে পারেন যদি আপনার অ্যাপ্লিকেশান অন্য কোনও প্রক্রিয়ার মাধ্যমে তার অবস্থা পুনরায় তৈরি করতে পারে বা যদি আপনার অ্যাপটি সংবেদনশীল তথ্য নিয়ে কাজ করে।

ফাইলগুলি অন্তর্ভুক্ত করুন এবং বাদ দিন

ডিফল্টরূপে, সিস্টেমটি প্রায় সমস্ত অ্যাপ ডেটা ব্যাক আপ করে। আরও তথ্যের জন্য, ব্যাক আপ করা ফাইলগুলি সম্পর্কে বিভাগটি দেখুন।

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

অ্যান্ড্রয়েড 11 এবং তার নিচের সংস্করণে ব্যাকআপ নিয়ন্ত্রণ করুন

অ্যান্ড্রয়েড 11 (API লেভেল 30) বা তার নিচের ডিভাইসে কোন ফাইলের ব্যাক আপ নেওয়া হবে তা নিয়ন্ত্রণ করতে এই বিভাগে দেওয়া ধাপগুলি অনুসরণ করুন।

  1. আপনার AndroidManifest.xml ফাইলে, <application> উপাদানটিতে android:fullBackupContent অ্যাট্রিবিউট যোগ করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে। এই বৈশিষ্ট্যটি একটি XML ফাইলের দিকে নির্দেশ করে যাতে ব্যাকআপ নিয়ম রয়েছে।

    <application ...
     android:fullBackupContent="@xml/backup_rules">
    </application>
  2. res/xml/ ডিরেক্টরিতে @xml/ backup_rules নামে একটি 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) বা উচ্চতর এ নিম্নলিখিত শর্তগুলি যোগ করতে পারেন:

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

অন্তর্ভুক্তির শর্তগুলি ঘোষণা করতে, আপনার ব্যাকআপ নিয়মগুলির সেটের মধ্যে <include> উপাদানগুলির মধ্যে একটি নির্বাচিত মান বা মানগুলিতে requireFlags বৈশিষ্ট্য সেট করুন:

backup_rules.xml

<?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_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 বা উচ্চতর চলমান ডিভাইসগুলিতে কোন ফাইলগুলির ব্যাক আপ নেওয়া হবে তা নিয়ন্ত্রণ করতে এই বিভাগে দেওয়া পদক্ষেপগুলি অনুসরণ করুন৷

  1. আপনার AndroidManifest.xml ফাইলে, <application> উপাদানটিতে android:dataExtractionRules অ্যাট্রিবিউট যোগ করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে। এই বৈশিষ্ট্যটি একটি XML ফাইলের দিকে নির্দেশ করে যাতে ব্যাকআপ নিয়ম রয়েছে।

    <application ...
     android:dataExtractionRules="backup_rules.xml">
    </application>
  2. res/xml/ ডিরেক্টরিতে backup_rules .xml নামে একটি 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 সিনট্যাক্স পরিবর্তিত হয় অ্যান্ড্রয়েডের সংস্করণের উপর নির্ভর করে যা আপনার অ্যাপটি লক্ষ্য করছে এবং চলছে৷

Android 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>

Android 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> ট্রান্সফার>) নিয়ম রয়েছে যা শুধুমাত্র সেই ধরনের স্থানান্তরের ক্ষেত্রে প্রযোজ্য। এই বিচ্ছেদ আপনাকে, উদাহরণস্বরূপ, ডিভাইস-টু-ডিভাইস (D2D) স্থানান্তরের সময় এটি স্থানান্তর করার সময় Google ড্রাইভ ব্যাকআপ থেকে একটি ফাইল বা ডিরেক্টরি বাদ দিতে দেয়৷ যদি আপনার কাছে ক্লাউডে ব্যাক আপ করার জন্য খুব বড় ফাইল থাকে তবে সমস্যা ছাড়াই ডিভাইসগুলির মধ্যে স্থানান্তর করা যেতে পারে তবে এটি কার্যকর।

যদি কোনো নির্দিষ্ট ব্যাকআপ মোডের জন্য কোনো নিয়ম না থাকে, যেমন <device-transfer> বিভাগটি অনুপস্থিত থাকলে, সেই মোডটি no-backup এবং cache ডিরেক্টরি ব্যতীত সমস্ত সামগ্রীর জন্য সম্পূর্ণরূপে সক্ষম করা হয়, যেমন ব্যাক আপ করা ফাইলগুলিতে বর্ণনা করা হয়েছে। বিভাগ

আপনার অ্যাপটি <cloud-backup> বিভাগে disableIfNoEncryptionCapabilities পতাকা সেট করতে পারে যাতে ব্যাকআপটি এনক্রিপ্ট করা যায়, যেমন ব্যবহারকারীর লক স্ক্রিন থাকলেই হয়। ব্যবহারকারীর ডিভাইস যদি এনক্রিপশন সমর্থন করতে না পারে তবে এই সীমাবদ্ধতা সেট করা ব্যাকআপগুলিকে ক্লাউডে পাঠানো বন্ধ করে দেয়, কিন্তু যেহেতু D2D স্থানান্তরগুলি সার্ভারে পাঠানো হয় না, তারা এনক্রিপশন সমর্থন করে না এমন ডিভাইসগুলিতেও কাজ চালিয়ে যায়।

উপাদান অন্তর্ভুক্ত এবং বাদ দেওয়ার জন্য সিনট্যাক্স

<full-backup-content> , <cloud-backup> , এবং <device-transfer> ট্যাগের ভিতরে (ডিভাইসের Android সংস্করণ এবং আপনার অ্যাপের targetSDKVersion উপর নির্ভর করে), আপনি <include> এবং <exclude> উপাদানগুলিকে সংজ্ঞায়িত করতে পারেন:

<include>

ব্যাকআপ করার জন্য একটি ফাইল বা ফোল্ডার নির্দিষ্ট করে। ডিফল্টরূপে, অটো ব্যাকআপে প্রায় সমস্ত অ্যাপ ফাইল অন্তর্ভুক্ত থাকে। আপনি যদি একটি <include> উপাদান নির্দিষ্ট করেন, সিস্টেমটি আর ডিফল্টরূপে কোনো ফাইল অন্তর্ভুক্ত করে না এবং শুধুমাত্র নির্দিষ্ট করা ফাইলগুলির ব্যাক আপ করে। একাধিক ফাইল অন্তর্ভুক্ত করতে, একাধিক <include> উপাদান ব্যবহার করুন।

অ্যান্ড্রয়েড 11 এবং তার নিচের সংস্করণে, এই উপাদানটিতে requireFlags বৈশিষ্ট্যও থাকতে পারে, যা ব্যাকআপের জন্য শর্তসাপেক্ষ প্রয়োজনীয়তা কীভাবে সংজ্ঞায়িত করতে হয় তা বর্ণনাকারী বিভাগটি আরও বিশদে আলোচনা করে।

getCacheDir() , getCodeCacheDir() , বা getNoBackupFilesDir() দ্বারা প্রত্যাবর্তিত ডিরেক্টরিগুলির ফাইলগুলিকে অন্তর্ভুক্ত করার চেষ্টা করলেও সর্বদা বাদ দেওয়া হয়৷

<exclude>

ব্যাকআপের সময় বাদ দেওয়ার জন্য একটি ফাইল বা ফোল্ডার নির্দিষ্ট করে। এখানে কিছু ফাইল রয়েছে যা সাধারণত ব্যাকআপ থেকে বাদ দেওয়া হয়:

  • যে ফাইলগুলিতে ডিভাইস-নির্দিষ্ট শনাক্তকারী রয়েছে, হয় সার্ভার দ্বারা জারি করা হয় বা ডিভাইসে তৈরি করা হয়৷ যেমন, Firebase ক্লাউড মেসেজিং (FCM)-কে একটি রেজিস্ট্রেশন টোকেন তৈরি করতে হবে প্রতিবার যখন কোনো ব্যবহারকারী একটি নতুন ডিভাইসে আপনার অ্যাপ ইনস্টল করেন। পুরানো রেজিস্ট্রেশন টোকেন পুনরুদ্ধার করা হলে, অ্যাপটি অপ্রত্যাশিতভাবে আচরণ করতে পারে।

  • অ্যাপ ডিবাগিং সম্পর্কিত ফাইল।

  • বড় ফাইল যা অ্যাপটিকে 25 MB ব্যাকআপ কোটা অতিক্রম করে।

প্রতিটি <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) এ ওভাররাইড করে। সিস্টেমের ডিফল্ট বাস্তবায়ন ধরে রাখতে, super.onFullBackup() দিয়ে সুপারক্লাসে সংশ্লিষ্ট পদ্ধতিতে কল করুন।

আপনি যদি একটি BackupAgent প্রয়োগ করেন, ডিফল্টরূপে সিস্টেমটি আপনার অ্যাপটিকে কী-মান ব্যাকআপ এবং পুনরুদ্ধার করতে আশা করে৷ পরিবর্তে ফাইল-ভিত্তিক অটো ব্যাকআপ ব্যবহার করতে, আপনার অ্যাপের ম্যানিফেস্টে android:fullBackupOnly অ্যাট্রিবিউটটিকে true হিসেবে সেট করুন।

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

আপনার BackupAgent অবশ্যই বিমূর্ত পদ্ধতিগুলি প্রয়োগ করতে হবে onBackup() এবং onRestore() , যা কী-মান ব্যাকআপের জন্য ব্যবহৃত হয়। আপনি যদি কী-মান ব্যাকআপ করতে না চান, তাহলে আপনি সেই পদ্ধতিগুলির বাস্তবায়ন ফাঁকা রাখতে পারেন।

আরও তথ্যের জন্য, ব্যাকআপএজেন্ট প্রসারিত দেখুন।

,

অ্যাপ্লিকেশানগুলির জন্য স্বয়ংক্রিয় ব্যাকআপ স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশানগুলি থেকে ব্যবহারকারীর ডেটা ব্যাক আপ করে যেগুলি লক্ষ্য করে এবং Android 6.0 (API স্তর 23) বা তার উপরে চলে৷ অ্যান্ড্রয়েড অ্যাপ ডেটা সংরক্ষণ করে ব্যবহারকারীর Google ড্রাইভে আপলোড করে, যেখানে এটি ব্যবহারকারীর Google অ্যাকাউন্টের শংসাপত্র দ্বারা সুরক্ষিত থাকে। ব্যাকআপটি ডিভাইসের পিন, প্যাটার্ন বা পাসওয়ার্ড ব্যবহার করে Android 9 বা উচ্চতর সংস্করণে চলমান ডিভাইসগুলিতে এন্ড-টু-এন্ড এনক্রিপ্ট করা হয়। প্রতিটি অ্যাপ ব্যবহারকারী প্রতি 25 MB পর্যন্ত ব্যাকআপ ডেটা বরাদ্দ করতে পারে। ব্যাকআপ ডেটা সঞ্চয় করার জন্য কোন চার্জ নেই। আপনার অ্যাপ ব্যাকআপ প্রক্রিয়া কাস্টমাইজ করতে পারে বা ব্যাকআপ অক্ষম করে অপ্ট আউট করতে পারে৷

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

ব্যাক আপ করা হয় যে ফাইল

ডিফল্টরূপে, অটো ব্যাকআপ সিস্টেমের দ্বারা আপনার অ্যাপে বরাদ্দ করা বেশিরভাগ ডিরেক্টরির ফাইলগুলিকে অন্তর্ভুক্ত করে:

  • ভাগ করা পছন্দ ফাইল

  • ফাইলগুলি আপনার অ্যাপের অভ্যন্তরীণ সঞ্চয়স্থানে সংরক্ষিত এবং getFilesDir() বা getDir(String, int) দ্বারা অ্যাক্সেস করা হয়েছে

  • getDatabasePath(String) দ্বারা প্রত্যাবর্তিত ডিরেক্টরির ফাইলগুলি, যা SQLiteOpenHelper ক্লাসের সাথে তৈরি ফাইলগুলিও অন্তর্ভুক্ত করে

  • getExternalFilesDir(String) দ্বারা প্রত্যাবর্তিত ডিরেক্টরিতে বাহ্যিক সঞ্চয়স্থানের ফাইলগুলি

স্বয়ংক্রিয় ব্যাকআপ getCacheDir() , getCodeCacheDir() , এবং getNoBackupFilesDir() দ্বারা প্রত্যাবর্তিত ডিরেক্টরিগুলিতে ফাইলগুলিকে বাদ দেয়৷ এই অবস্থানগুলিতে সংরক্ষিত ফাইলগুলি শুধুমাত্র অস্থায়ীভাবে প্রয়োজন এবং ইচ্ছাকৃতভাবে ব্যাকআপ অপারেশন থেকে বাদ দেওয়া হয়৷

আপনি নির্দিষ্ট ফাইল অন্তর্ভুক্ত এবং বাদ দিতে আপনার অ্যাপ কনফিগার করতে পারেন। আরও তথ্যের জন্য, ফাইলগুলি অন্তর্ভুক্ত করুন এবং বাদ দিন দেখুন।

ব্যাকআপ অবস্থান

ব্যাকআপ ডেটা ব্যবহারকারীর Google ড্রাইভ অ্যাকাউন্টে একটি ব্যক্তিগত ফোল্ডারে সংরক্ষণ করা হয়, প্রতি অ্যাপে 25 MB পর্যন্ত সীমাবদ্ধ৷ সংরক্ষিত ডেটা ব্যবহারকারীর ব্যক্তিগত Google ড্রাইভ কোটার দিকে গণনা করা হয় না। শুধুমাত্র সাম্প্রতিক ব্যাকআপ সংরক্ষণ করা হয়. যখন একটি ব্যাকআপ তৈরি করা হয়, তখন আগের যেকোনো ব্যাকআপ মুছে ফেলা হয়। ব্যাকআপ ডেটা ব্যবহারকারী বা ডিভাইসে থাকা অন্যান্য অ্যাপ পড়তে পারে না।

ব্যবহারকারীরা গুগল ড্রাইভ অ্যান্ড্রয়েড অ্যাপে ব্যাক আপ নেওয়া অ্যাপগুলির একটি তালিকা দেখতে পারেন। একটি Android-চালিত ডিভাইসে, ব্যবহারকারীরা সেটিংস > ব্যাকআপ এবং রিসেট এর অধীনে ড্রাইভ অ্যাপের নেভিগেশন ড্রয়ারে এই তালিকাটি খুঁজে পেতে পারেন৷

প্রতিটি ডিভাইস-সেটআপ-লাইফটাইম থেকে ব্যাকআপগুলি পৃথক ডেটাসেটে সংরক্ষণ করা হয়, যেমনটি নিম্নলিখিত উদাহরণগুলিতে বর্ণিত হয়েছে:

  • ব্যবহারকারী যদি দুটি ডিভাইসের মালিক হন, তাহলে প্রতিটি ডিভাইসের জন্য একটি ব্যাকআপ ডেটাসেট বিদ্যমান থাকে।

  • যদি ব্যবহারকারী একটি ডিভাইস ফ্যাক্টরি-রিসেট করে এবং তারপরে একই অ্যাকাউন্টের সাথে ডিভাইসটি সেট আপ করে তবে ব্যাকআপটি একটি নতুন ডেটাসেটে সংরক্ষণ করা হয়। অপ্রচলিত ডেটাসেটগুলি নিষ্ক্রিয়তার সময়ের পরে স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়।

ব্যাকআপ সময়সূচী

নিম্নলিখিত সমস্ত শর্ত পূরণ হলে ব্যাকআপগুলি স্বয়ংক্রিয়ভাবে ঘটে:

  • ব্যবহারকারী ডিভাইসে ব্যাকআপ সক্ষম করেছেন৷ Android 9-এ, এই সেটিংটি সেটিংস > সিস্টেম > ব্যাকআপে রয়েছে।
  • শেষ ব্যাকআপ থেকে কমপক্ষে 24 ঘন্টা অতিবাহিত হয়েছে৷
  • ডিভাইসটি নিষ্ক্রিয়।
  • ডিভাইসটি একটি Wi-Fi নেটওয়ার্কের সাথে সংযুক্ত রয়েছে (যদি ডিভাইস ব্যবহারকারী মোবাইল-ডেটা ব্যাকআপ নির্বাচন না করে থাকে)।

অনুশীলনে, এই অবস্থাগুলি মোটামুটিভাবে প্রতি রাতে ঘটে, কিন্তু একটি ডিভাইস কখনই ব্যাক আপ করতে পারে না (উদাহরণস্বরূপ, যদি এটি কোনও নেটওয়ার্কের সাথে সংযোগ না করে)। নেটওয়ার্ক ব্যান্ডউইথ সংরক্ষণ করতে, অ্যাপের ডেটা পরিবর্তিত হলেই আপলোড করা হয়।

স্বয়ংক্রিয় ব্যাকআপের সময়, সিস্টেমটি অ্যাপটিকে বন্ধ করে দেয় যাতে এটি আর ফাইল সিস্টেমে লিখছে না। ডিফল্টরূপে, ব্যাকআপ সিস্টেম দুর্বল ব্যবহারকারীর অভিজ্ঞতা এড়াতে অগ্রভাগে চলমান অ্যাপগুলিকে উপেক্ষা করে। আপনি android:backupInForeground অ্যাট্রিবিউটটিকে true এ সেট করে ডিফল্ট আচরণ ওভাররাইড করতে পারেন।

পরীক্ষাকে সহজ করার জন্য, Android-এ এমন সরঞ্জাম রয়েছে যা আপনাকে ম্যানুয়ালি আপনার অ্যাপের একটি ব্যাকআপ শুরু করতে দেয়। আরও তথ্যের জন্য, পরীক্ষা ব্যাকআপ এবং পুনরুদ্ধার দেখুন।

সময়সূচী পুনরুদ্ধার করুন

যখনই অ্যাপটি ইনস্টল করা হয় তখনই ডেটা পুনরুদ্ধার করা হয়, তা প্লে স্টোর থেকে, ডিভাইস সেটআপের সময় (যখন সিস্টেম পূর্বে ইনস্টল করা অ্যাপগুলি ইনস্টল করে), বা adb ইনস্টল চালিয়ে। পুনরুদ্ধার অপারেশনটি APK ইনস্টল করার পরে ঘটে তবে ব্যবহারকারীর দ্বারা অ্যাপটি চালু করার জন্য উপলব্ধ হওয়ার আগে।

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

পরীক্ষাকে সহজ করার জন্য, Android-এ এমন সরঞ্জাম রয়েছে যা আপনাকে ম্যানুয়ালি আপনার অ্যাপের পুনরুদ্ধার শুরু করতে দেয়। আরও তথ্যের জন্য, পরীক্ষা ব্যাকআপ এবং পুনরুদ্ধার দেখুন।

ব্যাকআপ সক্ষম এবং অক্ষম করুন

যে অ্যাপগুলি Android 6.0 (API স্তর 23) বা উচ্চতরকে লক্ষ্য করে সেগুলি স্বয়ংক্রিয়ভাবে অটো ব্যাকআপে অংশগ্রহণ করে৷ আপনার অ্যাপ ম্যানিফেস্ট ফাইলে, বুলিয়ান মান সেট করুন android:allowBackup ব্যাকআপ সক্ষম বা অক্ষম করতে। ডিফল্ট মান true , কিন্তু আমরা আপনার ম্যানিফেস্টে স্পষ্টভাবে বৈশিষ্ট্য সেট করার পরামর্শ দিই, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<manifest ... >
    ...
    <application android:allowBackup="true" ... >
        ...
    </application>
</manifest>

আপনি android:allowBackup to false সেট করে ব্যাকআপ নিষ্ক্রিয় করতে পারেন। আপনি এটি করতে চাইতে পারেন যদি আপনার অ্যাপ্লিকেশান অন্য কোনও প্রক্রিয়ার মাধ্যমে তার অবস্থা পুনরায় তৈরি করতে পারে বা যদি আপনার অ্যাপটি সংবেদনশীল তথ্য নিয়ে কাজ করে।

ফাইলগুলি অন্তর্ভুক্ত করুন এবং বাদ দিন

ডিফল্টরূপে, সিস্টেমটি প্রায় সমস্ত অ্যাপ ডেটা ব্যাক আপ করে। আরও তথ্যের জন্য, ব্যাক আপ করা ফাইলগুলি সম্পর্কে বিভাগটি দেখুন।

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

অ্যান্ড্রয়েড 11 এবং তার নিচের সংস্করণে ব্যাকআপ নিয়ন্ত্রণ করুন

অ্যান্ড্রয়েড 11 (API লেভেল 30) বা তার নিচের ডিভাইসে কোন ফাইলের ব্যাক আপ নেওয়া হবে তা নিয়ন্ত্রণ করতে এই বিভাগে দেওয়া ধাপগুলি অনুসরণ করুন।

  1. আপনার AndroidManifest.xml ফাইলে, <application> উপাদানটিতে android:fullBackupContent অ্যাট্রিবিউট যোগ করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে। এই বৈশিষ্ট্যটি একটি XML ফাইলের দিকে নির্দেশ করে যাতে ব্যাকআপ নিয়ম রয়েছে।

    <application ...
     android:fullBackupContent="@xml/backup_rules">
    </application>
  2. res/xml/ ডিরেক্টরিতে @xml/ backup_rules নামে একটি 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) বা উচ্চতর এ নিম্নলিখিত শর্তগুলি যোগ করতে পারেন:

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

অন্তর্ভুক্তির শর্তগুলি ঘোষণা করতে, আপনার ব্যাকআপ নিয়মগুলির সেটের মধ্যে <include> উপাদানগুলির মধ্যে একটি নির্বাচিত মান বা মানগুলিতে requireFlags বৈশিষ্ট্য সেট করুন:

backup_rules.xml

<?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_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 বা উচ্চতর চলমান ডিভাইসগুলিতে কোন ফাইলগুলির ব্যাক আপ নেওয়া হবে তা নিয়ন্ত্রণ করতে এই বিভাগে দেওয়া পদক্ষেপগুলি অনুসরণ করুন৷

  1. আপনার AndroidManifest.xml ফাইলে, <application> উপাদানটিতে android:dataExtractionRules অ্যাট্রিবিউট যোগ করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে। এই বৈশিষ্ট্যটি একটি XML ফাইলের দিকে নির্দেশ করে যাতে ব্যাকআপ নিয়ম রয়েছে।

    <application ...
     android:dataExtractionRules="backup_rules.xml">
    </application>
  2. res/xml/ ডিরেক্টরিতে backup_rules .xml নামে একটি 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 সিনট্যাক্স পরিবর্তিত হয় অ্যান্ড্রয়েডের সংস্করণের উপর নির্ভর করে যা আপনার অ্যাপটি লক্ষ্য করছে এবং চলছে৷

Android 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>

Android 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> ট্রান্সফার>) নিয়ম রয়েছে যা শুধুমাত্র সেই ধরনের স্থানান্তরের ক্ষেত্রে প্রযোজ্য। এই বিচ্ছেদ আপনাকে, উদাহরণস্বরূপ, ডিভাইস-টু-ডিভাইস (D2D) স্থানান্তরের সময় এটি স্থানান্তর করার সময় Google ড্রাইভ ব্যাকআপ থেকে একটি ফাইল বা ডিরেক্টরি বাদ দিতে দেয়৷ যদি আপনার কাছে ক্লাউডে ব্যাক আপ করার জন্য খুব বড় ফাইল থাকে তবে সমস্যা ছাড়াই ডিভাইসগুলির মধ্যে স্থানান্তর করা যেতে পারে তবে এটি কার্যকর।

যদি কোনো নির্দিষ্ট ব্যাকআপ মোডের জন্য কোনো নিয়ম না থাকে, যেমন <device-transfer> বিভাগটি অনুপস্থিত থাকলে, সেই মোডটি no-backup এবং cache ডিরেক্টরি ব্যতীত সমস্ত সামগ্রীর জন্য সম্পূর্ণরূপে সক্ষম করা হয়, যেমন ব্যাক আপ করা ফাইলগুলিতে বর্ণনা করা হয়েছে। বিভাগ

আপনার অ্যাপটি <cloud-backup> বিভাগে disableIfNoEncryptionCapabilities পতাকা সেট করতে পারে যাতে ব্যাকআপটি এনক্রিপ্ট করা যায়, যেমন ব্যবহারকারীর লক স্ক্রিন থাকলেই হয়। ব্যবহারকারীর ডিভাইস যদি এনক্রিপশন সমর্থন করতে না পারে তবে এই সীমাবদ্ধতা সেট করা ব্যাকআপগুলিকে ক্লাউডে পাঠানো বন্ধ করে দেয়, কিন্তু যেহেতু D2D স্থানান্তরগুলি সার্ভারে পাঠানো হয় না, তারা এনক্রিপশন সমর্থন করে না এমন ডিভাইসগুলিতেও কাজ চালিয়ে যায়।

উপাদান অন্তর্ভুক্ত এবং বাদ দেওয়ার জন্য সিনট্যাক্স

<full-backup-content> , <cloud-backup> , এবং <device-transfer> ট্যাগের ভিতরে (ডিভাইসের Android সংস্করণ এবং আপনার অ্যাপের targetSDKVersion উপর নির্ভর করে), আপনি <include> এবং <exclude> উপাদানগুলিকে সংজ্ঞায়িত করতে পারেন:

<include>

ব্যাকআপ করার জন্য একটি ফাইল বা ফোল্ডার নির্দিষ্ট করে। ডিফল্টরূপে, অটো ব্যাকআপে প্রায় সমস্ত অ্যাপ ফাইল অন্তর্ভুক্ত থাকে। আপনি যদি একটি <include> উপাদান নির্দিষ্ট করেন, সিস্টেমটি আর ডিফল্টরূপে কোনো ফাইল অন্তর্ভুক্ত করে না এবং শুধুমাত্র নির্দিষ্ট করা ফাইলগুলির ব্যাক আপ করে। একাধিক ফাইল অন্তর্ভুক্ত করতে, একাধিক <include> উপাদান ব্যবহার করুন।

অ্যান্ড্রয়েড 11 এবং তার নিচের সংস্করণে, এই উপাদানটিতে requireFlags বৈশিষ্ট্যও থাকতে পারে, যা ব্যাকআপের জন্য শর্তসাপেক্ষ প্রয়োজনীয়তা কীভাবে সংজ্ঞায়িত করতে হয় তা বর্ণনাকারী বিভাগটি আরও বিশদে আলোচনা করে।

getCacheDir() , getCodeCacheDir() , বা getNoBackupFilesDir() দ্বারা প্রত্যাবর্তিত ডিরেক্টরিগুলির ফাইলগুলিকে অন্তর্ভুক্ত করার চেষ্টা করলেও সর্বদা বাদ দেওয়া হয়৷

<exclude>

ব্যাকআপের সময় বাদ দেওয়ার জন্য একটি ফাইল বা ফোল্ডার নির্দিষ্ট করে। এখানে কিছু ফাইল রয়েছে যা সাধারণত ব্যাকআপ থেকে বাদ দেওয়া হয়:

  • যে ফাইলগুলিতে ডিভাইস-নির্দিষ্ট শনাক্তকারী রয়েছে, হয় সার্ভার দ্বারা জারি করা হয় বা ডিভাইসে তৈরি করা হয়৷ যেমন, Firebase ক্লাউড মেসেজিং (FCM)-কে একটি রেজিস্ট্রেশন টোকেন তৈরি করতে হবে প্রতিবার যখন কোনো ব্যবহারকারী একটি নতুন ডিভাইসে আপনার অ্যাপ ইনস্টল করেন। পুরানো রেজিস্ট্রেশন টোকেন পুনরুদ্ধার করা হলে, অ্যাপটি অপ্রত্যাশিতভাবে আচরণ করতে পারে।

  • অ্যাপ ডিবাগিং সম্পর্কিত ফাইল।

  • বড় ফাইল যা অ্যাপটিকে 25 MB ব্যাকআপ কোটা অতিক্রম করে।

প্রতিটি <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) এ ওভাররাইড করে। সিস্টেমের ডিফল্ট বাস্তবায়ন ধরে রাখতে, super.onFullBackup() দিয়ে সুপারক্লাসে সংশ্লিষ্ট পদ্ধতিতে কল করুন।

আপনি যদি একটি BackupAgent প্রয়োগ করেন, ডিফল্টরূপে সিস্টেমটি আপনার অ্যাপটিকে কী-মান ব্যাকআপ এবং পুনরুদ্ধার করতে আশা করে৷ পরিবর্তে ফাইল-ভিত্তিক অটো ব্যাকআপ ব্যবহার করতে, আপনার অ্যাপের ম্যানিফেস্টে android:fullBackupOnly অ্যাট্রিবিউটটিকে true হিসেবে সেট করুন।

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

আপনার BackupAgent অবশ্যই বিমূর্ত পদ্ধতিগুলি প্রয়োগ করতে হবে onBackup() এবং onRestore() , যা কী-মান ব্যাকআপের জন্য ব্যবহৃত হয়। আপনি যদি কী-মান ব্যাকআপ করতে না চান, তাহলে আপনি সেই পদ্ধতিগুলির বাস্তবায়ন ফাঁকা রাখতে পারেন।

আরও তথ্যের জন্য, ব্যাকআপএজেন্ট প্রসারিত দেখুন।

,

অ্যাপ্লিকেশানগুলির জন্য স্বয়ংক্রিয় ব্যাকআপ স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশানগুলি থেকে ব্যবহারকারীর ডেটা ব্যাক আপ করে যেগুলি লক্ষ্য করে এবং Android 6.0 (API স্তর 23) বা তার উপরে চলে৷ অ্যান্ড্রয়েড অ্যাপ ডেটা সংরক্ষণ করে ব্যবহারকারীর Google ড্রাইভে আপলোড করে, যেখানে এটি ব্যবহারকারীর Google অ্যাকাউন্টের শংসাপত্র দ্বারা সুরক্ষিত থাকে। ব্যাকআপটি ডিভাইসের পিন, প্যাটার্ন বা পাসওয়ার্ড ব্যবহার করে Android 9 বা উচ্চতর সংস্করণে চলমান ডিভাইসগুলিতে এন্ড-টু-এন্ড এনক্রিপ্ট করা হয়। প্রতিটি অ্যাপ ব্যবহারকারী প্রতি 25 MB পর্যন্ত ব্যাকআপ ডেটা বরাদ্দ করতে পারে। ব্যাকআপ ডেটা সঞ্চয় করার জন্য কোন চার্জ নেই। আপনার অ্যাপ ব্যাকআপ প্রক্রিয়া কাস্টমাইজ করতে পারে বা ব্যাকআপ অক্ষম করে অপ্ট আউট করতে পারে৷

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

ব্যাক আপ করা হয় যে ফাইল

ডিফল্টরূপে, অটো ব্যাকআপ সিস্টেমের দ্বারা আপনার অ্যাপে বরাদ্দ করা বেশিরভাগ ডিরেক্টরির ফাইলগুলিকে অন্তর্ভুক্ত করে:

  • ভাগ করা পছন্দ ফাইল

  • ফাইলগুলি আপনার অ্যাপের অভ্যন্তরীণ সঞ্চয়স্থানে সংরক্ষিত এবং getFilesDir() বা getDir(String, int) দ্বারা অ্যাক্সেস করা হয়েছে

  • getDatabasePath(String) দ্বারা প্রত্যাবর্তিত ডিরেক্টরির ফাইলগুলি, যা SQLiteOpenHelper ক্লাসের সাথে তৈরি ফাইলগুলিও অন্তর্ভুক্ত করে

  • getExternalFilesDir(String) দ্বারা প্রত্যাবর্তিত ডিরেক্টরিতে বাহ্যিক সঞ্চয়স্থানের ফাইলগুলি

স্বয়ংক্রিয় ব্যাকআপ getCacheDir() , getCodeCacheDir() , এবং getNoBackupFilesDir() দ্বারা প্রত্যাবর্তিত ডিরেক্টরিগুলিতে ফাইলগুলিকে বাদ দেয়৷ এই অবস্থানগুলিতে সংরক্ষিত ফাইলগুলি শুধুমাত্র অস্থায়ীভাবে প্রয়োজন এবং ইচ্ছাকৃতভাবে ব্যাকআপ অপারেশন থেকে বাদ দেওয়া হয়৷

আপনি নির্দিষ্ট ফাইল অন্তর্ভুক্ত এবং বাদ দিতে আপনার অ্যাপ কনফিগার করতে পারেন। আরও তথ্যের জন্য, ফাইলগুলি অন্তর্ভুক্ত করুন এবং বাদ দিন দেখুন।

ব্যাকআপ অবস্থান

ব্যাকআপ ডেটা ব্যবহারকারীর Google ড্রাইভ অ্যাকাউন্টে একটি ব্যক্তিগত ফোল্ডারে সংরক্ষণ করা হয়, প্রতি অ্যাপে 25 MB পর্যন্ত সীমাবদ্ধ৷ সংরক্ষিত ডেটা ব্যবহারকারীর ব্যক্তিগত Google ড্রাইভ কোটার দিকে গণনা করা হয় না। শুধুমাত্র সাম্প্রতিক ব্যাকআপ সংরক্ষণ করা হয়. যখন একটি ব্যাকআপ তৈরি করা হয়, তখন আগের যেকোনো ব্যাকআপ মুছে ফেলা হয়। ব্যাকআপ ডেটা ব্যবহারকারী বা ডিভাইসে থাকা অন্যান্য অ্যাপ পড়তে পারে না।

ব্যবহারকারীরা গুগল ড্রাইভ অ্যান্ড্রয়েড অ্যাপে ব্যাক আপ নেওয়া অ্যাপগুলির একটি তালিকা দেখতে পারেন। একটি Android-চালিত ডিভাইসে, ব্যবহারকারীরা সেটিংস > ব্যাকআপ এবং রিসেট এর অধীনে ড্রাইভ অ্যাপের নেভিগেশন ড্রয়ারে এই তালিকাটি খুঁজে পেতে পারেন৷

প্রতিটি ডিভাইস-সেটআপ-লাইফটাইম থেকে ব্যাকআপগুলি পৃথক ডেটাসেটে সংরক্ষণ করা হয়, যেমনটি নিম্নলিখিত উদাহরণগুলিতে বর্ণিত হয়েছে:

  • ব্যবহারকারী যদি দুটি ডিভাইসের মালিক হন, তাহলে প্রতিটি ডিভাইসের জন্য একটি ব্যাকআপ ডেটাসেট বিদ্যমান থাকে।

  • যদি ব্যবহারকারী একটি ডিভাইস ফ্যাক্টরি-রিসেট করে এবং তারপরে একই অ্যাকাউন্টের সাথে ডিভাইসটি সেট আপ করে তবে ব্যাকআপটি একটি নতুন ডেটাসেটে সংরক্ষণ করা হয়। অপ্রচলিত ডেটাসেটগুলি নিষ্ক্রিয়তার সময়ের পরে স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়।

ব্যাকআপ সময়সূচী

নিম্নলিখিত সমস্ত শর্ত পূরণ হলে ব্যাকআপগুলি স্বয়ংক্রিয়ভাবে ঘটে:

  • ব্যবহারকারী ডিভাইসে ব্যাকআপ সক্ষম করেছেন৷ Android 9-এ, এই সেটিংটি সেটিংস > সিস্টেম > ব্যাকআপে রয়েছে।
  • শেষ ব্যাকআপ থেকে কমপক্ষে 24 ঘন্টা অতিবাহিত হয়েছে৷
  • ডিভাইসটি নিষ্ক্রিয়।
  • ডিভাইসটি একটি Wi-Fi নেটওয়ার্কের সাথে সংযুক্ত রয়েছে (যদি ডিভাইস ব্যবহারকারী মোবাইল-ডেটা ব্যাকআপ নির্বাচন না করে থাকে)।

অনুশীলনে, এই অবস্থাগুলি মোটামুটিভাবে প্রতি রাতে ঘটে, কিন্তু একটি ডিভাইস কখনই ব্যাক আপ করতে পারে না (উদাহরণস্বরূপ, যদি এটি কোনও নেটওয়ার্কের সাথে সংযোগ না করে)। নেটওয়ার্ক ব্যান্ডউইথ সংরক্ষণ করতে, অ্যাপের ডেটা পরিবর্তিত হলেই আপলোড করা হয়।

স্বয়ংক্রিয় ব্যাকআপের সময়, সিস্টেমটি অ্যাপটিকে বন্ধ করে দেয় যাতে এটি আর ফাইল সিস্টেমে লিখছে না। ডিফল্টরূপে, ব্যাকআপ সিস্টেম দুর্বল ব্যবহারকারীর অভিজ্ঞতা এড়াতে অগ্রভাগে চলমান অ্যাপগুলিকে উপেক্ষা করে। আপনি android:backupInForeground অ্যাট্রিবিউটটিকে true এ সেট করে ডিফল্ট আচরণ ওভাররাইড করতে পারেন।

পরীক্ষাকে সহজ করার জন্য, Android-এ এমন সরঞ্জাম রয়েছে যা আপনাকে ম্যানুয়ালি আপনার অ্যাপের একটি ব্যাকআপ শুরু করতে দেয়। আরও তথ্যের জন্য, পরীক্ষা ব্যাকআপ এবং পুনরুদ্ধার দেখুন।

সময়সূচী পুনরুদ্ধার করুন

যখনই অ্যাপটি ইনস্টল করা হয় তখনই ডেটা পুনরুদ্ধার করা হয়, তা প্লে স্টোর থেকে, ডিভাইস সেটআপের সময় (যখন সিস্টেম পূর্বে ইনস্টল করা অ্যাপগুলি ইনস্টল করে), বা adb ইনস্টল চালিয়ে। পুনরুদ্ধার অপারেশনটি APK ইনস্টল করার পরে ঘটে তবে ব্যবহারকারীর দ্বারা অ্যাপটি চালু করার জন্য উপলব্ধ হওয়ার আগে।

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

পরীক্ষাকে সহজ করার জন্য, Android-এ এমন সরঞ্জাম রয়েছে যা আপনাকে ম্যানুয়ালি আপনার অ্যাপের পুনরুদ্ধার শুরু করতে দেয়। আরও তথ্যের জন্য, পরীক্ষা ব্যাকআপ এবং পুনরুদ্ধার দেখুন।

ব্যাকআপ সক্ষম এবং অক্ষম করুন

যে অ্যাপগুলি Android 6.0 (API স্তর 23) বা উচ্চতরকে লক্ষ্য করে সেগুলি স্বয়ংক্রিয়ভাবে অটো ব্যাকআপে অংশগ্রহণ করে৷ আপনার অ্যাপ ম্যানিফেস্ট ফাইলে, বুলিয়ান মান সেট করুন android:allowBackup ব্যাকআপ সক্ষম বা অক্ষম করতে। ডিফল্ট মান true , কিন্তু আমরা আপনার ম্যানিফেস্টে স্পষ্টভাবে বৈশিষ্ট্য সেট করার পরামর্শ দিই, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<manifest ... >
    ...
    <application android:allowBackup="true" ... >
        ...
    </application>
</manifest>

আপনি android:allowBackup to false সেট করে ব্যাকআপ নিষ্ক্রিয় করতে পারেন। আপনি এটি করতে চাইতে পারেন যদি আপনার অ্যাপ্লিকেশান অন্য কোনও প্রক্রিয়ার মাধ্যমে তার অবস্থা পুনরায় তৈরি করতে পারে বা যদি আপনার অ্যাপটি সংবেদনশীল তথ্য নিয়ে কাজ করে।

ফাইলগুলি অন্তর্ভুক্ত করুন এবং বাদ দিন

ডিফল্টরূপে, সিস্টেমটি প্রায় সমস্ত অ্যাপ ডেটা ব্যাক আপ করে। আরও তথ্যের জন্য, ব্যাক আপ করা ফাইলগুলি সম্পর্কে বিভাগটি দেখুন।

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

অ্যান্ড্রয়েড 11 এবং তার নিচের সংস্করণে ব্যাকআপ নিয়ন্ত্রণ করুন

অ্যান্ড্রয়েড 11 (API লেভেল 30) বা তার নিচের ডিভাইসে কোন ফাইলের ব্যাক আপ নেওয়া হবে তা নিয়ন্ত্রণ করতে এই বিভাগে দেওয়া ধাপগুলি অনুসরণ করুন।

  1. আপনার AndroidManifest.xml ফাইলে, <application> উপাদানটিতে android:fullBackupContent অ্যাট্রিবিউট যোগ করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে। এই বৈশিষ্ট্যটি একটি XML ফাইলের দিকে নির্দেশ করে যাতে ব্যাকআপ নিয়ম রয়েছে।

    <application ...
     android:fullBackupContent="@xml/backup_rules">
    </application>
  2. res/xml/ ডিরেক্টরিতে @xml/ backup_rules নামে একটি 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) বা উচ্চতর এ নিম্নলিখিত শর্তগুলি যোগ করতে পারেন:

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

অন্তর্ভুক্তির শর্তগুলি ঘোষণা করতে, আপনার ব্যাকআপ নিয়মগুলির সেটের মধ্যে <include> উপাদানগুলির মধ্যে একটি নির্বাচিত মান বা মানগুলিতে requireFlags বৈশিষ্ট্য সেট করুন:

backup_rules.xml

<?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_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 বা উচ্চতর চলমান ডিভাইসগুলিতে কোন ফাইলগুলির ব্যাক আপ নেওয়া হবে তা নিয়ন্ত্রণ করতে এই বিভাগে দেওয়া পদক্ষেপগুলি অনুসরণ করুন৷

  1. আপনার AndroidManifest.xml ফাইলে, <application> উপাদানটিতে android:dataExtractionRules অ্যাট্রিবিউট যোগ করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে। এই বৈশিষ্ট্যটি একটি XML ফাইলের দিকে নির্দেশ করে যাতে ব্যাকআপ নিয়ম রয়েছে।

    <application ...
     android:dataExtractionRules="backup_rules.xml">
    </application>
  2. res/xml/ ডিরেক্টরিতে backup_rules .xml নামে একটি 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 সিনট্যাক্স পরিবর্তিত হয় অ্যান্ড্রয়েডের সংস্করণের উপর নির্ভর করে যা আপনার অ্যাপটি লক্ষ্য করছে এবং চলছে৷

Android 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>

Android 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> ট্রান্সফার>) নিয়ম রয়েছে যা শুধুমাত্র সেই ধরনের স্থানান্তরের ক্ষেত্রে প্রযোজ্য। এই বিচ্ছেদ আপনাকে, উদাহরণস্বরূপ, ডিভাইস-টু-ডিভাইস (D2D) স্থানান্তরের সময় এটি স্থানান্তর করার সময় Google ড্রাইভ ব্যাকআপ থেকে একটি ফাইল বা ডিরেক্টরি বাদ দিতে দেয়৷ যদি আপনার কাছে ক্লাউডে ব্যাক আপ করার জন্য খুব বড় ফাইল থাকে তবে সমস্যা ছাড়াই ডিভাইসগুলির মধ্যে স্থানান্তর করা যেতে পারে তবে এটি কার্যকর।

যদি কোনো নির্দিষ্ট ব্যাকআপ মোডের জন্য কোনো নিয়ম না থাকে, যেমন <device-transfer> বিভাগটি অনুপস্থিত থাকলে, সেই মোডটি no-backup এবং cache ডিরেক্টরি ব্যতীত সমস্ত সামগ্রীর জন্য সম্পূর্ণরূপে সক্ষম করা হয়, যেমন ব্যাক আপ করা ফাইলগুলিতে বর্ণনা করা হয়েছে। বিভাগ

আপনার অ্যাপটি <cloud-backup> বিভাগে disableIfNoEncryptionCapabilities পতাকা সেট করতে পারে যাতে ব্যাকআপটি এনক্রিপ্ট করা যায়, যেমন ব্যবহারকারীর লক স্ক্রিন থাকলেই হয়। ব্যবহারকারীর ডিভাইস যদি এনক্রিপশন সমর্থন করতে না পারে তবে এই সীমাবদ্ধতা সেট করা ব্যাকআপগুলিকে ক্লাউডে পাঠানো বন্ধ করে দেয়, কিন্তু যেহেতু D2D স্থানান্তরগুলি সার্ভারে পাঠানো হয় না, তারা এনক্রিপশন সমর্থন করে না এমন ডিভাইসগুলিতেও কাজ চালিয়ে যায়।

উপাদান অন্তর্ভুক্ত এবং বাদ দেওয়ার জন্য সিনট্যাক্স

<full-backup-content> , <cloud-backup> , এবং <device-transfer> ট্যাগের ভিতরে (ডিভাইসের Android সংস্করণ এবং আপনার অ্যাপের targetSDKVersion উপর নির্ভর করে), আপনি <include> এবং <exclude> উপাদানগুলিকে সংজ্ঞায়িত করতে পারেন:

<include>

ব্যাকআপ করার জন্য একটি ফাইল বা ফোল্ডার নির্দিষ্ট করে। ডিফল্টরূপে, অটো ব্যাকআপে প্রায় সমস্ত অ্যাপ ফাইল অন্তর্ভুক্ত থাকে। আপনি যদি একটি <include> উপাদান নির্দিষ্ট করেন, সিস্টেমটি আর ডিফল্টরূপে কোনো ফাইল অন্তর্ভুক্ত করে না এবং শুধুমাত্র নির্দিষ্ট করা ফাইলগুলির ব্যাক আপ করে। একাধিক ফাইল অন্তর্ভুক্ত করতে, একাধিক <include> উপাদান ব্যবহার করুন।

অ্যান্ড্রয়েড 11 এবং তার নিচের সংস্করণে, এই উপাদানটিতে requireFlags বৈশিষ্ট্যও থাকতে পারে, যা ব্যাকআপের জন্য শর্তসাপেক্ষ প্রয়োজনীয়তা কীভাবে সংজ্ঞায়িত করতে হয় তা বর্ণনাকারী বিভাগটি আরও বিশদে আলোচনা করে।

getCacheDir() , getCodeCacheDir() , বা getNoBackupFilesDir() দ্বারা প্রত্যাবর্তিত ডিরেক্টরিগুলির ফাইলগুলিকে অন্তর্ভুক্ত করার চেষ্টা করলেও সর্বদা বাদ দেওয়া হয়৷

<exclude>

ব্যাকআপের সময় বাদ দেওয়ার জন্য একটি ফাইল বা ফোল্ডার নির্দিষ্ট করে। এখানে কিছু ফাইল রয়েছে যা সাধারণত ব্যাকআপ থেকে বাদ দেওয়া হয়:

  • যে ফাইলগুলিতে ডিভাইস-নির্দিষ্ট শনাক্তকারী রয়েছে, হয় সার্ভার দ্বারা জারি করা হয় বা ডিভাইসে তৈরি করা হয়৷ যেমন, Firebase ক্লাউড মেসেজিং (FCM)-কে একটি রেজিস্ট্রেশন টোকেন তৈরি করতে হবে প্রতিবার যখন কোনো ব্যবহারকারী একটি নতুন ডিভাইসে আপনার অ্যাপ ইনস্টল করেন। পুরানো রেজিস্ট্রেশন টোকেন পুনরুদ্ধার করা হলে, অ্যাপটি অপ্রত্যাশিতভাবে আচরণ করতে পারে।

  • অ্যাপ ডিবাগিং সম্পর্কিত ফাইল।

  • বড় ফাইল যা অ্যাপটিকে 25 MB ব্যাকআপ কোটা অতিক্রম করে।

প্রতিটি <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) এ ওভাররাইড করে। সিস্টেমের ডিফল্ট বাস্তবায়ন ধরে রাখতে, super.onFullBackup() দিয়ে সুপারক্লাসে সংশ্লিষ্ট পদ্ধতিতে কল করুন।

আপনি যদি একটি BackupAgent প্রয়োগ করেন, ডিফল্টরূপে সিস্টেমটি আপনার অ্যাপটিকে কী-মান ব্যাকআপ এবং পুনরুদ্ধার করতে আশা করে৷ পরিবর্তে ফাইল-ভিত্তিক অটো ব্যাকআপ ব্যবহার করতে, আপনার অ্যাপের ম্যানিফেস্টে android:fullBackupOnly অ্যাট্রিবিউটটিকে true হিসেবে সেট করুন।

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

আপনার BackupAgent অবশ্যই বিমূর্ত পদ্ধতিগুলি প্রয়োগ করতে হবে onBackup() এবং onRestore() , যা কী-মান ব্যাকআপের জন্য ব্যবহৃত হয়। আপনি যদি কী-মান ব্যাকআপ করতে না চান, তাহলে আপনি সেই পদ্ধতিগুলির বাস্তবায়ন ফাঁকা রাখতে পারেন।

আরও তথ্যের জন্য, ব্যাকআপএজেন্ট প্রসারিত দেখুন।

,

অ্যাপ্লিকেশানগুলির জন্য স্বয়ংক্রিয় ব্যাকআপ স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশানগুলি থেকে ব্যবহারকারীর ডেটা ব্যাক আপ করে যেগুলি লক্ষ্য করে এবং Android 6.0 (API স্তর 23) বা তার উপরে চলে৷ অ্যান্ড্রয়েড অ্যাপ ডেটা সংরক্ষণ করে ব্যবহারকারীর Google ড্রাইভে আপলোড করে, যেখানে এটি ব্যবহারকারীর Google অ্যাকাউন্টের শংসাপত্র দ্বারা সুরক্ষিত থাকে। ব্যাকআপটি ডিভাইসের পিন, প্যাটার্ন বা পাসওয়ার্ড ব্যবহার করে Android 9 বা উচ্চতর সংস্করণে চলমান ডিভাইসগুলিতে এন্ড-টু-এন্ড এনক্রিপ্ট করা হয়। প্রতিটি অ্যাপ ব্যবহারকারী প্রতি 25 MB পর্যন্ত ব্যাকআপ ডেটা বরাদ্দ করতে পারে। ব্যাকআপ ডেটা সঞ্চয় করার জন্য কোন চার্জ নেই। আপনার অ্যাপ ব্যাকআপ প্রক্রিয়া কাস্টমাইজ করতে পারে বা ব্যাকআপ অক্ষম করে অপ্ট আউট করতে পারে৷

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

ব্যাক আপ করা হয় যে ফাইল

ডিফল্টরূপে, অটো ব্যাকআপ সিস্টেমের দ্বারা আপনার অ্যাপে বরাদ্দ করা বেশিরভাগ ডিরেক্টরির ফাইলগুলিকে অন্তর্ভুক্ত করে:

  • ভাগ করা পছন্দ ফাইল

  • ফাইলগুলি আপনার অ্যাপের অভ্যন্তরীণ সঞ্চয়স্থানে সংরক্ষিত এবং getFilesDir() বা getDir(String, int) দ্বারা অ্যাক্সেস করা হয়েছে

  • getDatabasePath(String) দ্বারা প্রত্যাবর্তিত ডিরেক্টরির ফাইলগুলি, যা SQLiteOpenHelper ক্লাসের সাথে তৈরি ফাইলগুলিও অন্তর্ভুক্ত করে

  • getExternalFilesDir(String) দ্বারা প্রত্যাবর্তিত ডিরেক্টরিতে বাহ্যিক সঞ্চয়স্থানের ফাইলগুলি

স্বয়ংক্রিয় ব্যাকআপ getCacheDir() , getCodeCacheDir() , এবং getNoBackupFilesDir() দ্বারা প্রত্যাবর্তিত ডিরেক্টরিগুলিতে ফাইলগুলিকে বাদ দেয়৷ এই অবস্থানগুলিতে সংরক্ষিত ফাইলগুলি শুধুমাত্র অস্থায়ীভাবে প্রয়োজন এবং ইচ্ছাকৃতভাবে ব্যাকআপ অপারেশন থেকে বাদ দেওয়া হয়৷

আপনি নির্দিষ্ট ফাইল অন্তর্ভুক্ত এবং বাদ দিতে আপনার অ্যাপ কনফিগার করতে পারেন। আরও তথ্যের জন্য, ফাইলগুলি অন্তর্ভুক্ত করুন এবং বাদ দিন দেখুন।

ব্যাকআপ অবস্থান

ব্যাকআপ ডেটা ব্যবহারকারীর Google ড্রাইভ অ্যাকাউন্টে একটি ব্যক্তিগত ফোল্ডারে সংরক্ষণ করা হয়, প্রতি অ্যাপে 25 MB পর্যন্ত সীমাবদ্ধ৷ সংরক্ষিত ডেটা ব্যবহারকারীর ব্যক্তিগত Google ড্রাইভ কোটার দিকে গণনা করা হয় না। শুধুমাত্র সাম্প্রতিক ব্যাকআপ সংরক্ষণ করা হয়. যখন একটি ব্যাকআপ তৈরি করা হয়, তখন আগের যেকোনো ব্যাকআপ মুছে ফেলা হয়। ব্যাকআপ ডেটা ব্যবহারকারী বা ডিভাইসে থাকা অন্যান্য অ্যাপ পড়তে পারে না।

ব্যবহারকারীরা গুগল ড্রাইভ অ্যান্ড্রয়েড অ্যাপে ব্যাক আপ নেওয়া অ্যাপগুলির একটি তালিকা দেখতে পারেন। একটি Android-চালিত ডিভাইসে, ব্যবহারকারীরা সেটিংস > ব্যাকআপ এবং রিসেট এর অধীনে ড্রাইভ অ্যাপের নেভিগেশন ড্রয়ারে এই তালিকাটি খুঁজে পেতে পারেন৷

প্রতিটি ডিভাইস-সেটআপ-লাইফটাইম থেকে ব্যাকআপগুলি পৃথক ডেটাসেটে সংরক্ষণ করা হয়, যেমনটি নিম্নলিখিত উদাহরণগুলিতে বর্ণিত হয়েছে:

  • ব্যবহারকারী যদি দুটি ডিভাইসের মালিক হন, তাহলে প্রতিটি ডিভাইসের জন্য একটি ব্যাকআপ ডেটাসেট বিদ্যমান থাকে।

  • যদি ব্যবহারকারী একটি ডিভাইস ফ্যাক্টরি-রিসেট করে এবং তারপরে একই অ্যাকাউন্টের সাথে ডিভাইসটি সেট আপ করে তবে ব্যাকআপটি একটি নতুন ডেটাসেটে সংরক্ষণ করা হয়। অপ্রচলিত ডেটাসেটগুলি নিষ্ক্রিয়তার সময়ের পরে স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়।

ব্যাকআপ সময়সূচী

নিম্নলিখিত সমস্ত শর্ত পূরণ হলে ব্যাকআপগুলি স্বয়ংক্রিয়ভাবে ঘটে:

  • ব্যবহারকারী ডিভাইসে ব্যাকআপ সক্ষম করেছেন৷ Android 9-এ, এই সেটিংটি সেটিংস > সিস্টেম > ব্যাকআপে রয়েছে।
  • শেষ ব্যাকআপ থেকে কমপক্ষে 24 ঘন্টা অতিবাহিত হয়েছে৷
  • ডিভাইসটি নিষ্ক্রিয়।
  • ডিভাইসটি একটি Wi-Fi নেটওয়ার্কের সাথে সংযুক্ত রয়েছে (যদি ডিভাইস ব্যবহারকারী মোবাইল-ডেটা ব্যাকআপ নির্বাচন না করে থাকে)।

অনুশীলনে, এই অবস্থাগুলি মোটামুটিভাবে প্রতি রাতে ঘটে, কিন্তু একটি ডিভাইস কখনই ব্যাক আপ করতে পারে না (উদাহরণস্বরূপ, যদি এটি কোনও নেটওয়ার্কের সাথে সংযোগ না করে)। নেটওয়ার্ক ব্যান্ডউইথ সংরক্ষণ করতে, অ্যাপের ডেটা পরিবর্তিত হলেই আপলোড করা হয়।

স্বয়ংক্রিয় ব্যাকআপের সময়, সিস্টেমটি অ্যাপটিকে বন্ধ করে দেয় যাতে এটি আর ফাইল সিস্টেমে লিখছে না। ডিফল্টরূপে, ব্যাকআপ সিস্টেম দুর্বল ব্যবহারকারীর অভিজ্ঞতা এড়াতে অগ্রভাগে চলমান অ্যাপগুলিকে উপেক্ষা করে। আপনি android:backupInForeground অ্যাট্রিবিউটটিকে true এ সেট করে ডিফল্ট আচরণ ওভাররাইড করতে পারেন।

পরীক্ষাকে সহজ করার জন্য, Android-এ এমন সরঞ্জাম রয়েছে যা আপনাকে ম্যানুয়ালি আপনার অ্যাপের একটি ব্যাকআপ শুরু করতে দেয়। আরও তথ্যের জন্য, পরীক্ষা ব্যাকআপ এবং পুনরুদ্ধার দেখুন।

সময়সূচী পুনরুদ্ধার করুন

যখনই অ্যাপটি ইনস্টল করা হয় তখনই ডেটা পুনরুদ্ধার করা হয়, তা প্লে স্টোর থেকে, ডিভাইস সেটআপের সময় (যখন সিস্টেম পূর্বে ইনস্টল করা অ্যাপগুলি ইনস্টল করে), বা adb ইনস্টল চালিয়ে। পুনরুদ্ধার অপারেশনটি APK ইনস্টল করার পরে ঘটে তবে ব্যবহারকারীর দ্বারা অ্যাপটি চালু করার জন্য উপলব্ধ হওয়ার আগে।

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

পরীক্ষাকে সহজ করার জন্য, Android-এ এমন সরঞ্জাম রয়েছে যা আপনাকে ম্যানুয়ালি আপনার অ্যাপের পুনরুদ্ধার শুরু করতে দেয়। আরও তথ্যের জন্য, পরীক্ষা ব্যাকআপ এবং পুনরুদ্ধার দেখুন।

ব্যাকআপ সক্ষম এবং অক্ষম করুন

যে অ্যাপগুলি Android 6.0 (API স্তর 23) বা উচ্চতরকে লক্ষ্য করে সেগুলি স্বয়ংক্রিয়ভাবে অটো ব্যাকআপে অংশগ্রহণ করে৷ আপনার অ্যাপ ম্যানিফেস্ট ফাইলে, বুলিয়ান মান সেট করুন android:allowBackup ব্যাকআপ সক্ষম বা অক্ষম করতে। ডিফল্ট মান true , কিন্তু আমরা আপনার ম্যানিফেস্টে স্পষ্টভাবে বৈশিষ্ট্য সেট করার পরামর্শ দিই, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<manifest ... >
    ...
    <application android:allowBackup="true" ... >
        ...
    </application>
</manifest>

আপনি android:allowBackup to false সেট করে ব্যাকআপ নিষ্ক্রিয় করতে পারেন। আপনি এটি করতে চাইতে পারেন যদি আপনার অ্যাপ্লিকেশান অন্য কোনও প্রক্রিয়ার মাধ্যমে তার অবস্থা পুনরায় তৈরি করতে পারে বা যদি আপনার অ্যাপটি সংবেদনশীল তথ্য নিয়ে কাজ করে।

ফাইলগুলি অন্তর্ভুক্ত করুন এবং বাদ দিন

ডিফল্টরূপে, সিস্টেমটি প্রায় সমস্ত অ্যাপ ডেটা ব্যাক আপ করে। আরও তথ্যের জন্য, ব্যাক আপ করা ফাইলগুলি সম্পর্কে বিভাগটি দেখুন।

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

অ্যান্ড্রয়েড 11 এবং তার নিচের সংস্করণে ব্যাকআপ নিয়ন্ত্রণ করুন

অ্যান্ড্রয়েড 11 (API লেভেল 30) বা তার নিচের ডিভাইসে কোন ফাইলের ব্যাক আপ নেওয়া হবে তা নিয়ন্ত্রণ করতে এই বিভাগে দেওয়া ধাপগুলি অনুসরণ করুন।

  1. আপনার AndroidManifest.xml ফাইলে, <application> উপাদানটিতে android:fullBackupContent অ্যাট্রিবিউট যোগ করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে। এই বৈশিষ্ট্যটি একটি XML ফাইলের দিকে নির্দেশ করে যাতে ব্যাকআপ নিয়ম রয়েছে।

    <application ...
     android:fullBackupContent="@xml/backup_rules">
    </application>
  2. res/xml/ ডিরেক্টরিতে @xml/ backup_rules নামে একটি 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) বা উচ্চতর এ নিম্নলিখিত শর্তগুলি যোগ করতে পারেন:

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

অন্তর্ভুক্তির শর্তগুলি ঘোষণা করতে, আপনার ব্যাকআপ নিয়মগুলির সেটের মধ্যে <include> উপাদানগুলির মধ্যে একটি নির্বাচিত মান বা মানগুলিতে requireFlags বৈশিষ্ট্য সেট করুন:

backup_rules.xml

<?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_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 বা উচ্চতর চলমান ডিভাইসগুলিতে কোন ফাইলগুলির ব্যাক আপ নেওয়া হবে তা নিয়ন্ত্রণ করতে এই বিভাগে দেওয়া পদক্ষেপগুলি অনুসরণ করুন৷

  1. আপনার AndroidManifest.xml ফাইলে, <application> উপাদানটিতে android:dataExtractionRules অ্যাট্রিবিউট যোগ করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে। এই বৈশিষ্ট্যটি একটি XML ফাইলের দিকে নির্দেশ করে যাতে ব্যাকআপ নিয়ম রয়েছে।

    <application ...
     android:dataExtractionRules="backup_rules.xml">
    </application>
  2. res/xml/ ডিরেক্টরিতে backup_rules .xml নামে একটি 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 সিনট্যাক্স পরিবর্তিত হয় অ্যান্ড্রয়েডের সংস্করণের উপর নির্ভর করে যা আপনার অ্যাপটি লক্ষ্য করছে এবং চলছে৷

Android 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>

Android 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> ট্রান্সফার>) নিয়ম রয়েছে যা শুধুমাত্র সেই ধরনের স্থানান্তরের ক্ষেত্রে প্রযোজ্য। এই বিচ্ছেদ আপনাকে, উদাহরণস্বরূপ, ডিভাইস-টু-ডিভাইস (D2D) স্থানান্তরের সময় এটি স্থানান্তর করার সময় Google ড্রাইভ ব্যাকআপ থেকে একটি ফাইল বা ডিরেক্টরি বাদ দিতে দেয়৷ যদি আপনার কাছে ক্লাউডে ব্যাক আপ করার জন্য খুব বড় ফাইল থাকে তবে সমস্যা ছাড়াই ডিভাইসগুলির মধ্যে স্থানান্তর করা যেতে পারে তবে এটি কার্যকর।

যদি কোনো নির্দিষ্ট ব্যাকআপ মোডের জন্য কোনো নিয়ম না থাকে, যেমন <device-transfer> বিভাগটি অনুপস্থিত থাকলে, সেই মোডটি no-backup এবং cache ডিরেক্টরি ব্যতীত সমস্ত সামগ্রীর জন্য সম্পূর্ণরূপে সক্ষম করা হয়, যেমন ব্যাক আপ করা ফাইলগুলিতে বর্ণনা করা হয়েছে। বিভাগ

আপনার অ্যাপটি <cloud-backup> বিভাগে disableIfNoEncryptionCapabilities পতাকা সেট করতে পারে যাতে ব্যাকআপটি এনক্রিপ্ট করা যায়, যেমন ব্যবহারকারীর লক স্ক্রিন থাকলেই হয়। ব্যবহারকারীর ডিভাইস যদি এনক্রিপশন সমর্থন করতে না পারে তবে এই সীমাবদ্ধতা সেট করা ব্যাকআপগুলিকে ক্লাউডে পাঠানো বন্ধ করে দেয়, কিন্তু যেহেতু D2D স্থানান্তরগুলি সার্ভারে পাঠানো হয় না, তারা এনক্রিপশন সমর্থন করে না এমন ডিভাইসগুলিতেও কাজ চালিয়ে যায়।

উপাদান অন্তর্ভুক্ত এবং বাদ দেওয়ার জন্য সিনট্যাক্স

<full-backup-content> , <cloud-backup> , এবং <device-transfer> ট্যাগের ভিতরে (ডিভাইসের Android সংস্করণ এবং আপনার অ্যাপের targetSDKVersion উপর নির্ভর করে), আপনি <include> এবং <exclude> উপাদানগুলিকে সংজ্ঞায়িত করতে পারেন:

<include>

ব্যাকআপ করার জন্য একটি ফাইল বা ফোল্ডার নির্দিষ্ট করে। ডিফল্টরূপে, অটো ব্যাকআপে প্রায় সমস্ত অ্যাপ ফাইল অন্তর্ভুক্ত থাকে। আপনি যদি একটি <include> উপাদান নির্দিষ্ট করেন, সিস্টেমটি আর ডিফল্টরূপে কোনো ফাইল অন্তর্ভুক্ত করে না এবং শুধুমাত্র নির্দিষ্ট করা ফাইলগুলির ব্যাক আপ করে। একাধিক ফাইল অন্তর্ভুক্ত করতে, একাধিক <include> উপাদান ব্যবহার করুন।

অ্যান্ড্রয়েড 11 এবং তার নিচের সংস্করণে, এই উপাদানটিতে requireFlags বৈশিষ্ট্যও থাকতে পারে, যা ব্যাকআপের জন্য শর্তসাপেক্ষ প্রয়োজনীয়তা কীভাবে সংজ্ঞায়িত করতে হয় তা বর্ণনাকারী বিভাগটি আরও বিশদে আলোচনা করে।

getCacheDir() , getCodeCacheDir() , বা getNoBackupFilesDir() দ্বারা প্রত্যাবর্তিত ডিরেক্টরিগুলির ফাইলগুলিকে অন্তর্ভুক্ত করার চেষ্টা করলেও সর্বদা বাদ দেওয়া হয়৷

<exclude>

ব্যাকআপের সময় বাদ দেওয়ার জন্য একটি ফাইল বা ফোল্ডার নির্দিষ্ট করে। এখানে কিছু ফাইল রয়েছে যা সাধারণত ব্যাকআপ থেকে বাদ দেওয়া হয়:

  • যে ফাইলগুলিতে ডিভাইস-নির্দিষ্ট শনাক্তকারী রয়েছে, হয় সার্ভার দ্বারা জারি করা হয় বা ডিভাইসে তৈরি করা হয়৷ যেমন, Firebase ক্লাউড মেসেজিং (FCM)-কে একটি রেজিস্ট্রেশন টোকেন তৈরি করতে হবে প্রতিবার যখন কোনো ব্যবহারকারী একটি নতুন ডিভাইসে আপনার অ্যাপ ইনস্টল করেন। পুরানো রেজিস্ট্রেশন টোকেন পুনরুদ্ধার করা হলে, অ্যাপটি অপ্রত্যাশিতভাবে আচরণ করতে পারে।

  • অ্যাপ ডিবাগিং সম্পর্কিত ফাইল।

  • বড় ফাইল যা অ্যাপটিকে 25 MB ব্যাকআপ কোটা অতিক্রম করে।

প্রতিটি <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) এ ওভাররাইড করে। সিস্টেমের ডিফল্ট বাস্তবায়ন ধরে রাখতে, super.onFullBackup() দিয়ে সুপারক্লাসে সংশ্লিষ্ট পদ্ধতিতে কল করুন।

আপনি যদি একটি BackupAgent প্রয়োগ করেন, ডিফল্টরূপে সিস্টেমটি আপনার অ্যাপটিকে কী-মান ব্যাকআপ এবং পুনরুদ্ধার করতে আশা করে৷ পরিবর্তে ফাইল-ভিত্তিক অটো ব্যাকআপ ব্যবহার করতে, আপনার অ্যাপের ম্যানিফেস্টে android:fullBackupOnly অ্যাট্রিবিউটটিকে true হিসেবে সেট করুন।

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

আপনার BackupAgent অবশ্যই বিমূর্ত পদ্ধতিগুলি প্রয়োগ করতে হবে onBackup() এবং onRestore() , যা কী-মান ব্যাকআপের জন্য ব্যবহৃত হয়। আপনি যদি কী-মান ব্যাকআপ করতে না চান, তাহলে আপনি সেই পদ্ধতিগুলির বাস্তবায়ন ফাঁকা রাখতে পারেন।

আরও তথ্যের জন্য, ব্যাকআপএজেন্ট প্রসারিত দেখুন।