با شروع API Level 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 (اندروید 2.2) یا بالاتر موجود است. برنامه های موجود که قبل از API Level 8 ساخته شده اند، همیشه در حافظه داخلی نصب می شوند و نمی توان آنها را به حافظه خارجی منتقل کرد (حتی در دستگاه های دارای API Level 8). با این حال، اگر برنامه شما برای پشتیبانی از سطح API کمتر از 8 طراحی شده است، میتوانید از این ویژگی برای دستگاههایی با API سطح 8 یا بالاتر پشتیبانی کند و همچنان با دستگاههایی که از سطح API کمتر از 8 استفاده میکنند سازگار باشد.
برای اجازه نصب در حافظه خارجی و سازگار ماندن با نسخه های پایین تر از API Level 8:
- ویژگی
android:installLocation
با مقدار "auto
" یا "preferExternal
" در عنصر<manifest>
وارد کنید. - ویژگی
android:minSdkVersion
خود را همانطور که هست بگذارید (چیزی کمتر از "8") و مطمئن باشید که کد برنامه شما فقط از APIهای سازگار با آن سطح استفاده می کند. - به منظور کامپایل کردن برنامه خود، هدف ساخت خود را به API Level 8 تغییر دهید. این امر ضروری است زیرا کتابخانه های قدیمی Android ویژگی
android:installLocation
را درک نمی کنند و زمانی که برنامه شما موجود باشد، آن را کامپایل نمی کنند.
هنگامی که برنامه شما روی دستگاهی با سطح API کمتر از 8 نصب می شود، ویژگی android:installLocation
نادیده گرفته می شود و برنامه در حافظه داخلی نصب می شود.
احتیاط: اگرچه نشانهگذاری XML مانند این توسط پلتفرمهای قدیمی نادیده گرفته میشود، اما باید مراقب باشید تا زمانی که minSdkVersion
شما کمتر از "8" است، از APIهای برنامهنویسی معرفیشده در API Level 8 استفاده نکنید، مگر اینکه کارهای لازم برای ارائه سازگاری به عقب را انجام دهید. کد شما
برنامه هایی که نباید روی حافظه خارجی نصب شوند
هنگامی که کاربر ذخیره سازی انبوه USB را برای اشتراک گذاری فایل ها با رایانه خود فعال می کند (یا در غیر این صورت حافظه خارجی را جدا می کند یا حذف می کند)، هر برنامه ای که روی حافظه خارجی نصب شده و در حال اجرا است، از بین می رود. تا زمانی که ذخیره سازی انبوه غیرفعال شود و حافظه خارجی دوباره روی دستگاه نصب شود، سیستم عملاً از برنامه بی اطلاع می شود. این کار علاوه بر از بین بردن برنامه و در دسترس نبودن آن برای کاربر، می تواند برخی از انواع برنامه ها را به شکل جدی تری خراب کند. برای اینکه برنامه شما به طور مداوم مطابق انتظار عمل کند، به دلیل عواقب ذکر شده در هنگام جداسازی حافظه خارجی، نباید اجازه دهید برنامه شما در حافظه خارجی در صورت استفاده از یکی از ویژگی های زیر نصب شود:
- خدمات
-
Service
در حال اجرا شما از بین می رود و با نصب مجدد حافظه خارجی راه اندازی مجدد نمی شود. برنامههای متصل به این سرویس میتوانند برای هدف پخشACTION_EXTERNAL_APPLICATIONS_AVAILABLE
ثبت نام کنند، که به همه برنامههایی که در حافظه خارجی نصب نشدهاند ، هنگامی که برنامههای نصب شده در حافظه خارجی دوباره در دسترس سیستم قرار میگیرند، اطلاع میدهد. پس از دریافت این پخش، برنامه ها می توانند سعی کنند به سرویس شما متصل شوند. - خدمات آلارم
- آلارم های ثبت شده شما در
AlarmManager
لغو خواهند شد. هنگام نصب مجدد حافظه خارجی، باید هشدارها را مجدداً به صورت دستی ثبت کنید. - موتورهای روش ورودی
- IME شما با IME پیش فرض جایگزین می شود. هنگامی که حافظه خارجی دوباره نصب می شود، کاربر می تواند تنظیمات سیستم را برای فعال کردن مجدد IME شما باز کند.
- تصاویر پس زمینه زنده
- Live Wallpaper در حال اجرا شما با Live Wallpaper پیش فرض جایگزین می شود. وقتی حافظه خارجی دوباره نصب شد، کاربر میتواند تصویر زمینه زنده شما را دوباره انتخاب کند.
- ابزارک های برنامه
- ویجت برنامه شما از صفحه اصلی حذف خواهد شد. وقتی فضای ذخیرهسازی خارجی دوباره نصب میشود، تا زمانی که سیستم برنامه اصلی را بازنشانی نکند، ابزارک برنامه شما برای انتخاب کاربر در دسترس نخواهد بود (معمولاً تا زمانی که سیستم راهاندازی مجدد نشود).
- مدیران حساب
- حسابهای شما که با
AccountManager
ایجاد شدهاند، تا زمانی که حافظه خارجی نصب نشود، ناپدید خواهند شد. - همگام سازی آداپتورها
-
AbstractThreadedSyncAdapter
شما و تمام عملکردهای همگام سازی آن تا زمانی که حافظه خارجی نصب نشود کار نمی کنند. - مدیران دستگاه
-
DeviceAdminReceiver
شما و همه قابلیتهای سرپرست آن غیرفعال میشوند، که میتواند عواقب غیرقابلپیشبینی برای عملکرد دستگاه داشته باشد، که ممکن است پس از نصب مجدد حافظه خارجی باقی بماند. - گیرنده های پخش در حال گوش دادن به "بوت کامل شد"
- سیستم پخش
ACTION_BOOT_COMPLETED
را قبل از نصب حافظه خارجی بر روی دستگاه ارائه می کند. اگر برنامه شما روی حافظه خارجی نصب شده باشد، هرگز نمی تواند این پخش را دریافت کند.
اگر برنامه شما از هر یک از ویژگی های ذکر شده در بالا استفاده می کند، نباید اجازه دهید برنامه شما روی حافظه خارجی نصب شود. به طور پیشفرض، سیستم اجازه نمیدهد برنامه شما روی حافظه خارجی نصب شود، بنابراین نیازی نیست نگران برنامههای موجود خود باشید. با این حال، اگر مطمئن هستید که برنامه شما هرگز نباید روی حافظه خارجی نصب شود، باید این موضوع را با اعلام android:installLocation
با مقدار " internalOnly
" روشن کنید. اگرچه این رفتار پیشفرض را تغییر نمیدهد، اما به صراحت بیان میکند که برنامه شما فقط باید در حافظه داخلی نصب شود و به عنوان یادآوری به شما و سایر توسعهدهندگان است که این تصمیم گرفته شده است.
برنامه هایی که باید روی حافظه خارجی نصب شوند
به زبان ساده، هر چیزی که از ویژگی های ذکر شده در بخش قبل استفاده نمی کند، هنگام نصب در حافظه خارجی ایمن است. بازیهای بزرگ معمولاً از انواع برنامههایی هستند که باید اجازه نصب در حافظه خارجی را بدهند، زیرا بازیها معمولاً در صورت غیرفعال بودن خدمات اضافی ارائه نمیدهند. هنگامی که حافظه خارجی در دسترس نیست و فرآیند بازی از بین می رود، زمانی که فضای ذخیره سازی دوباره در دسترس قرار می گیرد و کاربر بازی را مجدداً راه اندازی می کند، نباید اثر قابل مشاهده ای وجود داشته باشد (با این فرض که بازی به درستی وضعیت خود را در طول چرخه زندگی عادی Activity ذخیره کرده است).
اگر برنامه شما به چندین مگابایت برای فایل APK نیاز دارد، باید به دقت بررسی کنید که آیا برنامه را برای نصب در حافظه خارجی فعال کنید تا کاربران بتوانند فضای ذخیره سازی داخلی خود را حفظ کنند.
برای اطلاعات بیشتر مرتبط به: <مانیفست> مراجعه کنید