موقع تثبيت التطبيق

بدءًا من المستوى 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 عبر إعدادات النظام، يتم إلغاء تثبيت وحدة التخزين الخارجية من الجهاز ويتم إنهاء جميع التطبيقات التي تعمل على وحدة التخزين الخارجية على الفور.

التوافق مع الأنظمة القديمة

لا تتوفر إمكانية تثبيت تطبيقك على وحدة التخزين الخارجية إلا على الأجهزة التي تعمل بالإصدار 8 من واجهة برمجة التطبيقات (Android 2.2) أو الإصدارات الأحدث. التطبيقات الحالية التي تم إنشاؤها مسبقًا إلى المستوى 8 من واجهة برمجة التطبيقات سيتم تثبيتها دائمًا على وحدة التخزين الداخلية ولا يمكن نقلها إلى وحدة التخزين الخارجية التخزين (حتى على الأجهزة ذات المستوى 8 من واجهة برمجة التطبيقات). ومع ذلك، إذا كان تطبيقك مصمّمًا لدعم مستوى واجهة برمجة التطبيقات الأدنى من 8، يمكنك اختيار إتاحة هذه الميزة للأجهزة ذات المستوى 8 من واجهة برمجة التطبيقات. أو أعلى منها وأنها لا تزال متوافقة مع الأجهزة التي تستخدم مستوى واجهة برمجة تطبيقات أقل من 8

للسماح بالتثبيت على وحدة التخزين الخارجية ومواصلة التوافق مع الإصدارات الأقل من واجهة برمجة التطبيقات المستوى 8:

  1. ضمِّن السمة android:installLocation مع القيمة "auto". أو "preferExternal" في <manifest> العنصر.
  2. يجب إبقاء سمة android:minSdkVersion كما هي (أقل. من "8") وتأكد من أن رمز التطبيق لا يستخدم سوى واجهات برمجة التطبيقات المتوافقة مع تلك. المستوى.
  3. لتجميع تطبيقك، غيِّر هدف الإصدار إلى المستوى 8 من واجهة برمجة التطبيقات. هذا هو ضرورية لأن مكتبات Android القديمة لا تفهم android:installLocation ولن يجمّع التطبيق عند وجوده.

عند تثبيت تطبيقك على جهاز بمستوى واجهة برمجة تطبيقات أقل من 8، يتم تجاهل السمة android:installLocation ويتم تثبيت التطبيق على الجهاز الداخلي. مساحة التخزين.

تنبيه: على الرغم من أنّه سيتم تجاهل ترميز XML بهذا الشكل من خلال الأنظمة الأساسية القديمة، يجب توخي الحذر من استخدام واجهات برمجة التطبيقات المتاحة في المستوى 8 من واجهة برمجة التطبيقات في حين أن minSdkVersion أقل من "8"، ما لم تقم بالعمل اللازم توفير التوافق مع الأنظمة القديمة في التعليمات البرمجية.

التطبيقات التي يجب عدم تثبيتها على وحدة التخزين الخارجية

عندما يمكّن المستخدم وحدة تخزين USB الكبيرة من مشاركة الملفات مع جهاز الكمبيوتر (أو إلغاء تثبيت وحدة التخزين الخارجية أو إزالتها)، وأي تطبيق مثبتة على وحدة التخزين الخارجية وتوقف تشغيلها حاليًا. يصبح النظام فعليًا لن يكونوا على دراية بالتطبيق إلى أن يتم إيقاف التخزين الجماعي وتصبح وحدة التخزين الخارجية التي تمت إعادة تثبيتها على الجهاز. فإلى جانب إيقاف التطبيق وجعله غير متاح للمستخدم، فقد يؤدي ذلك إلى تعطيل بعض أنواع التطبيقات بطريقة أكثر جدية. لكي يتمكن تطبيقك باستمرار كما هو متوقع، يجب عدم السماح على وحدة التخزين الخارجية إذا كانت تستخدم أيًا من الميزات التالية، بناءً على ما تم ذكره النتائج المترتبة على إلغاء تحميل وحدة التخزين الخارجية:

الخدمات
ركضك Service هو توقفوا ولا تتم إعادة تشغيله عند إعادة تحميل وحدة التخزين الخارجية. الطلبات المرتبط بهذه الخدمة من التسجيل ACTION_EXTERNAL_APPLICATIONS_AVAILABLE النية في البث، والتي تخطر جميع التطبيقات التي غير على وحدة التخزين الخارجية عند تثبيت التطبيقات على أصبحت سعة التخزين متاحة للنظام مرة أخرى. بعد تلقّي هذه المعلومات تحاول التطبيقات الربط بخدمتك.
خدمات إنذار
سيتم إلغاء المنبّهات المسجَّلة لدى AlarmManager. يجب إعادة تسجيل أي تنبيهات يدويًا عند إعادة تثبيت وحدة التخزين الخارجية.
محركات طرق الإدخال
سيتم ضبط IME بأداة IME الافتراضية. عند إعادة تثبيت وحدة التخزين الخارجية، يمكن للمستخدم فتح إعدادات النظام. لتفعيل أداة IME مرة أخرى.
خلفيات متحركة
الخلفية المتحركة التي تشغّلها محلّ "الخلفية المتحركة" الافتراضية. عندما تتم إعادة تحميل وحدة التخزين الخارجية، يمكن للمستخدم حدد "الخلفية المتحركة" مرة أخرى.
أدوات التطبيقات
ستتم إزالة أداة التطبيق من الشاشة الرئيسية. عند إعادة تثبيت وحدة التخزين الخارجية، لن يمكن للمستخدم تحديدها إلى أن يعيد النظام ضبط تطبيق الشاشة الرئيسية (عادةً ما يحدث ذلك إعادة تشغيل النظام).
مدراء الحسابات
ستختفي حساباتك التي تم إنشاؤها باستخدام AccountManager حتى إعادة تحميل وحدة التخزين الخارجية.
محوّلات المزامنة
سيكون AbstractThreadedSyncAdapter وجميع وظائف المزامنة فيه لن يعمل حتى تتم إعادة تثبيت وحدة التخزين الخارجية.
مشرفو الأجهزة
سينفّذ DeviceAdminReceiver وجميع إمكانات المشرف التابعة له ما قد يؤدي إلى عواقب غير متوقعة على وظائف الجهاز، والتي قد تستمر بعد إعادة تثبيت وحدة التخزين الخارجية.
أجهزة استقبال البث التي تستمع إلى "اكتملت عملية التشغيل"
يرسل النظام بث ACTION_BOOT_COMPLETED. قبل أن يتم تحميل وحدة التخزين الخارجية على الجهاز. إذا كان التطبيق مثبتًا على وحدة تخزين خارجية، فلن تتمكن من تلقي هذا البث مطلقًا.

إذا كان تطبيقك يستخدم أيًا من الميزات المذكورة أعلاه، يجب عدم السماح به تطبيقك لتثبيته على وحدة تخزين خارجية. بشكل افتراضي، لن يسمح النظام تثبيتًا على وحدة التخزين الخارجية، لذا لا داعي للقلق بشأن الملفات الحالية التطبيقات. ومع ذلك، إذا كنت متأكدًا من أنه يجب عدم تثبيت التطبيق مطلقًا على وحدة التخزين الخارجية، عليك توضيح ذلك من خلال تعريف android:installLocation بالقيمة "internalOnly". رغم أن هذا لا تغيير السلوك الافتراضي، فهي تنص صراحةً على أنه ينبغي تثبيت تطبيقك فقط على وحدة التخزين الداخلية ويعمل بمثابة تذكير لك وللمطوّرين الآخرين بأن هذا القرار صناعة المحتوى.

التطبيقات التي يجب تثبيتها على وحدة تخزين خارجية

بعبارات بسيطة، أي شيء لا يستخدم الميزات المذكورة في القسم السابق آمنة عند تثبيتها على وحدة تخزين خارجية. الألعاب الكبيرة هي بشكل أكثر شيوعًا أنواع هي تطبيقات يُفترض أن تسمح بالتثبيت على وحدة تخزين خارجية، لأن الألعاب لا يتم عادةً تثبيت تقديم خدمات إضافية عندما تكون غير نشطة. عندما تصبح وحدة التخزين الخارجية غير متاحة وأحد الألعاب إنهاء العملية، فلن يكون هناك أي تأثير مرئي عندما يصبح التخزين متاحًا مرة أخرى يعيد المستخدم تشغيل اللعبة (على افتراض أنّ اللعبة قد حفظت حالتها بشكل صحيح أثناء العملية العادية مراحل نشاط النشاط).

وإذا كان التطبيق يتطلب وحدات ميغابايت متعددة لملف APK، فيجب ففكر بعناية في ما إذا كنت تريد تمكين التطبيق من التثبيت على وحدة التخزين الخارجية، حتى يمكن للمستخدمين الاحتفاظ بمساحة في وحدة التخزين الداخلية الخاصة بهم.

لمزيد من المعلومات ذات الصلة، راجع: <manifest>