অ্যাপ ইনস্টল করার অবস্থান

API স্তর 8 দিয়ে শুরু করে, আপনি আপনার অ্যাপ্লিকেশনটিকে বাহ্যিক সঞ্চয়স্থানে ইনস্টল করার অনুমতি দিতে পারেন (উদাহরণস্বরূপ, ডিভাইসের SD কার্ড)। এটি একটি ঐচ্ছিক বৈশিষ্ট্য যা আপনি android:installLocation ম্যানিফেস্ট বৈশিষ্ট্যের সাথে আপনার অ্যাপ্লিকেশনের জন্য ঘোষণা করতে পারেন। আপনি যদি এই বৈশিষ্ট্যটি ঘোষণা না করেন তবে আপনার অ্যাপ্লিকেশনটি শুধুমাত্র অভ্যন্তরীণ সঞ্চয়স্থানে ইনস্টল করা হবে এবং এটি বহিরাগত সঞ্চয়স্থানে সরানো যাবে না।

সিস্টেমকে বাহ্যিক সঞ্চয়স্থানে আপনার অ্যাপ্লিকেশন ইনস্টল করার অনুমতি দিতে, আপনার ম্যানিফেস্ট ফাইলটি পরিবর্তন করে android:installLocation বৈশিষ্ট্যটি <manifest> এলিমেন্টে অন্তর্ভুক্ত করুন, যার মান " preferExternal " বা " auto "। উদাহরণ স্বরূপ:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="preferExternal"
    ... >

আপনি যদি " preferExternal " ঘোষণা করেন, আপনি অনুরোধ করবেন যে আপনার অ্যাপ্লিকেশনটি বাহ্যিক সঞ্চয়স্থানে ইনস্টল করা হবে, কিন্তু সিস্টেমটি গ্যারান্টি দেয় না যে আপনার অ্যাপ্লিকেশনটি বাহ্যিক সঞ্চয়স্থানে ইনস্টল করা হবে৷ বাহ্যিক সঞ্চয়স্থান পূর্ণ হলে, সিস্টেম এটি অভ্যন্তরীণ সঞ্চয়স্থানে ইনস্টল করবে। ব্যবহারকারী আপনার অ্যাপ্লিকেশনটি দুটি অবস্থানের মধ্যে স্থানান্তর করতে পারে।

আপনি যদি " auto " ঘোষণা করেন, তাহলে আপনি নির্দেশ করেন যে আপনার অ্যাপ্লিকেশন বাহ্যিক সঞ্চয়স্থানে ইনস্টল করা হতে পারে, কিন্তু আপনার ইনস্টলেশন অবস্থানের কোনো পছন্দ নেই৷ সিস্টেমটি বিভিন্ন কারণের উপর ভিত্তি করে আপনার অ্যাপ্লিকেশনটি কোথায় ইনস্টল করতে হবে তা নির্ধারণ করবে। ব্যবহারকারী আপনার অ্যাপ্লিকেশনটি দুটি অবস্থানের মধ্যে স্থানান্তর করতে পারে।

যখন আপনার অ্যাপ্লিকেশনটি বাহ্যিক সঞ্চয়স্থানে ইনস্টল করা হয়:

  • যতক্ষণ পর্যন্ত বাহ্যিক সঞ্চয়স্থান ডিভাইসে মাউন্ট করা হয় ততক্ষণ অ্যাপ্লিকেশন কার্যকারিতার উপর কোন প্রভাব নেই।
  • .apk ফাইলটি বাহ্যিক সঞ্চয়স্থানে সংরক্ষিত হয়, তবে সমস্ত ব্যক্তিগত ব্যবহারকারীর ডেটা, ডাটাবেস, অপ্টিমাইজ করা .dex ফাইল এবং বের করা নেটিভ কোড অভ্যন্তরীণ ডিভাইস মেমরিতে সংরক্ষিত হয়।
  • আপনার অ্যাপ্লিকেশনটি যে অনন্য ধারকটিতে সংরক্ষণ করা হয়েছে সেটি একটি এলোমেলোভাবে তৈরি করা কী দিয়ে এনক্রিপ্ট করা হয়েছে যা শুধুমাত্র সেই ডিভাইস দ্বারা ডিক্রিপ্ট করা যেতে পারে যেটি এটিকে ইনস্টল করেছে৷ সুতরাং, একটি SD কার্ডে ইনস্টল করা একটি অ্যাপ্লিকেশন শুধুমাত্র একটি ডিভাইসের জন্য কাজ করে।
  • ব্যবহারকারী সিস্টেম সেটিংসের মাধ্যমে আপনার অ্যাপ্লিকেশনটিকে অভ্যন্তরীণ স্টোরেজে স্থানান্তর করতে পারে।

সতর্কতা: যখন ব্যবহারকারী একটি কম্পিউটারের সাথে ফাইল শেয়ার করতে USB ভর সঞ্চয়স্থান সক্ষম করে বা সিস্টেম সেটিংসের মাধ্যমে SD কার্ড আনমাউন্ট করে, তখন বাহ্যিক সঞ্চয়স্থান ডিভাইস থেকে আনমাউন্ট করা হয় এবং বাহ্যিক সঞ্চয়স্থানে চলমান সমস্ত অ্যাপ্লিকেশন অবিলম্বে বন্ধ হয়ে যায়।

অনঅগ্রসর উপযোগিতা

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

বাহ্যিক সঞ্চয়স্থানে ইনস্টলেশনের অনুমতি দিতে এবং API স্তর 8 এর চেয়ে কম সংস্করণের সাথে সামঞ্জস্যপূর্ণ থাকতে:

  1. <manifest> উপাদানে " auto " বা " preferExternal " এর মান সহ android:installLocation বৈশিষ্ট্যটি অন্তর্ভুক্ত করুন৷
  2. আপনার android:minSdkVersion বৈশিষ্ট্যটি যেমন আছে ("8" এর চেয়ে কম কিছু) ছেড়ে দিন এবং নিশ্চিত হন যে আপনার অ্যাপ্লিকেশন কোডটি সেই স্তরের সাথে সামঞ্জস্যপূর্ণ শুধুমাত্র API ব্যবহার করে৷
  3. আপনার অ্যাপ্লিকেশন কম্পাইল করার জন্য, আপনার বিল্ড টার্গেট API লেভেল 8 এ পরিবর্তন করুন। এটি প্রয়োজনীয় কারণ পুরানো অ্যান্ড্রয়েড লাইব্রেরিগুলি android:installLocation অ্যাট্রিবিউটটি বুঝতে পারে না এবং এটি উপস্থিত থাকলে আপনার অ্যাপ্লিকেশনটি কম্পাইল করবে না।

যখন আপনার অ্যাপ্লিকেশানটি 8-এর কম API স্তরের একটি ডিভাইসে ইনস্টল করা হয়, android:installLocation বৈশিষ্ট্যটি উপেক্ষা করা হয় এবং অ্যাপ্লিকেশনটি অভ্যন্তরীণ সঞ্চয়স্থানে ইনস্টল করা হয়।

সতর্কতা: যদিও XML মার্কআপ যেমন পুরানো প্ল্যাটফর্মগুলি দ্বারা উপেক্ষা করা হবে, তবে আপনাকে অবশ্যই সতর্ক থাকতে হবে যে API লেভেল 8-এ প্রবর্তিত প্রোগ্রামিং APIগুলি ব্যবহার না করার জন্য আপনার minSdkVersion "8" এর থেকে কম, যদি না আপনি পশ্চাদপদ সামঞ্জস্য প্রদানের জন্য প্রয়োজনীয় কাজ সম্পাদন করেন তোমার গোপন সংকেত।

বাহ্যিক সঞ্চয়স্থানে ইনস্টল করা উচিত নয় এমন অ্যাপ্লিকেশন

যখন ব্যবহারকারী তাদের কম্পিউটারের সাথে ফাইলগুলি ভাগ করার জন্য USB ভর স্টোরেজ সক্ষম করে (অথবা অন্যথায় বাহ্যিক স্টোরেজ আনমাউন্ট করে বা সরিয়ে দেয়), তখন বাহ্যিক স্টোরেজে ইনস্টল করা এবং বর্তমানে চলমান যেকোন অ্যাপ্লিকেশন বন্ধ হয়ে যায়। ভর সঞ্চয়স্থান নিষ্ক্রিয় না হওয়া পর্যন্ত এবং ডিভাইসে বাহ্যিক সঞ্চয়স্থান পুনরায় মাউন্ট করা না হওয়া পর্যন্ত সিস্টেমটি কার্যকরভাবে অ্যাপ্লিকেশন সম্পর্কে অজ্ঞাত হয়ে যায়। অ্যাপ্লিকেশনটিকে মেরে ফেলা এবং এটি ব্যবহারকারীর কাছে অনুপলব্ধ করার পাশাপাশি, এটি আরও গুরুতর উপায়ে কিছু ধরণের অ্যাপ্লিকেশন ভেঙে দিতে পারে। আপনার অ্যাপ্লিকেশনটি প্রত্যাশিতভাবে ধারাবাহিকভাবে আচরণ করার জন্য, বহিরাগত সঞ্চয়স্থান আনমাউন্ট করার সময় উদ্ধৃত ফলাফলের কারণে আপনার অ্যাপ্লিকেশনটিকে বাহ্যিক সঞ্চয়স্থানে ইনস্টল করার অনুমতি দেওয়া উচিত নয় যদি এটি নিম্নলিখিত বৈশিষ্ট্যগুলির একটি ব্যবহার করে:

সেবা
আপনার চলমান Service বন্ধ হয়ে গেছে এবং বহিরাগত সঞ্চয়স্থান পুনরায় মাউন্ট করা হলে পুনরায় চালু করা হয় না। এই পরিষেবার সাথে আবদ্ধ অ্যাপ্লিকেশনগুলি ACTION_EXTERNAL_APPLICATIONS_AVAILABLE সম্প্রচার অভিপ্রায়ের জন্য নিবন্ধন করতে পারে, যা বাহ্যিক সঞ্চয়স্থানে ইনস্টল করা হয়নি এমন সমস্ত অ্যাপ্লিকেশনগুলিকে বিজ্ঞপ্তি দেয় যখন বাহ্যিক সঞ্চয়স্থানে ইনস্টল করা অ্যাপ্লিকেশনগুলি আবার সিস্টেমে উপলব্ধ হয়৷ এই সম্প্রচারটি পাওয়ার পরে, অ্যাপ্লিকেশনগুলি আপনার পরিষেবাতে আবদ্ধ হওয়ার চেষ্টা করতে পারে৷
অ্যালার্ম পরিষেবা
AlarmManager এর সাথে নিবন্ধিত আপনার অ্যালার্ম বাতিল করা হবে। বাহ্যিক সঞ্চয়স্থান পুনরায় মাউন্ট করা হলে আপনাকে অবশ্যই ম্যানুয়ালি যেকোনো অ্যালার্ম পুনরায় নিবন্ধন করতে হবে।
ইনপুট পদ্ধতি ইঞ্জিন
আপনার IME ডিফল্ট IME দ্বারা প্রতিস্থাপিত হবে। যখন বাহ্যিক সঞ্চয়স্থান পুনরায় মাউন্ট করা হয়, ব্যবহারকারী আপনার IME আবার সক্ষম করতে সিস্টেম সেটিংস খুলতে পারেন৷
লাইভ ওয়ালপেপার
আপনার চলমান লাইভ ওয়ালপেপার ডিফল্ট লাইভ ওয়ালপেপার দ্বারা প্রতিস্থাপিত হবে। যখন বাহ্যিক সঞ্চয়স্থান পুনরায় মাউন্ট করা হয়, ব্যবহারকারী আবার আপনার লাইভ ওয়ালপেপার নির্বাচন করতে পারেন৷
অ্যাপ উইজেট
আপনার অ্যাপ উইজেট হোম স্ক্রীন থেকে সরানো হবে। যখন বাহ্যিক স্টোরেজ পুনরায় মাউন্ট করা হয়, তখন আপনার অ্যাপ উইজেট ব্যবহারকারীর জন্য নির্বাচন করার জন্য উপলব্ধ হবে না যতক্ষণ না সিস্টেম হোম অ্যাপ্লিকেশন রিসেট করে (সাধারণত সিস্টেম রিবুট না হওয়া পর্যন্ত)।
অ্যাকাউন্ট ম্যানেজার
বাহ্যিক সঞ্চয়স্থান পুনরায় মাউন্ট করা না হওয়া পর্যন্ত AccountManager দিয়ে তৈরি আপনার অ্যাকাউন্টগুলি অদৃশ্য হয়ে যাবে৷
অ্যাডাপ্টার সিঙ্ক করুন
আপনার AbstractThreadedSyncAdapter এবং এর সমস্ত সিঙ্ক কার্যকারিতা বহিরাগত সঞ্চয়স্থান পুনরায় মাউন্ট করা পর্যন্ত কাজ করবে না।
ডিভাইস প্রশাসক
আপনার DeviceAdminReceiver এবং এর সমস্ত প্রশাসক ক্ষমতা অক্ষম করা হবে, যা ডিভাইস কার্যকারিতার জন্য অপ্রত্যাশিত পরিণতি হতে পারে, যা বাহ্যিক সঞ্চয়স্থান পুনরায় মাউন্ট করার পরে অব্যাহত থাকতে পারে।
ব্রডকাস্ট রিসিভার "বুট সম্পন্ন" এর জন্য শুনছেন
বাহ্যিক সঞ্চয়স্থান ডিভাইসে মাউন্ট করার আগে সিস্টেমটি ACTION_BOOT_COMPLETED সম্প্রচার সরবরাহ করে৷ যদি আপনার অ্যাপ্লিকেশনটি বাহ্যিক সঞ্চয়স্থানে ইনস্টল করা থাকে তবে এটি কখনই এই সম্প্রচার গ্রহণ করতে পারবে না৷

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

বাহ্যিক সঞ্চয়স্থানে ইনস্টল করা উচিত এমন অ্যাপ্লিকেশন

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

যদি আপনার অ্যাপ্লিকেশনটির APK ফাইলের জন্য বেশ কয়েকটি মেগাবাইটের প্রয়োজন হয়, তাহলে আপনাকে সতর্কতার সাথে বিবেচনা করা উচিত যে অ্যাপ্লিকেশনটিকে বাহ্যিক সঞ্চয়স্থানে ইনস্টল করতে সক্ষম করা উচিত যাতে ব্যবহারকারীরা তাদের অভ্যন্তরীণ সঞ্চয়স্থানে স্থান সংরক্ষণ করতে পারে৷

অতিরিক্ত সম্পর্কিত তথ্যের জন্য, দেখুন: <manifest>