ضبط ملكية التحديثات للتطبيقات والتعامل معها

عندما يتم تثبيت تطبيق من خلال متجر أو برنامج تثبيت، يُعدّ المتجر أو برنامج التثبيت هو "برنامج التثبيت الأساسي"، أي آخر برنامج تم استخدامه لتثبيت التطبيق. قبل الإصدار 14 من نظام التشغيل Android، كان نظام التشغيل Android يسمح لمتجر أو برنامج تثبيت آخر بأن يصبح برنامج التثبيت الأساسي وأن يحدّث التطبيق بدون إعلام المستخدم.

في نظام التشغيل Android 14، يمكن أن يعرّف مثبِّت التطبيق الأوّلي نفسه على أنّه "مالك التحديث"، ويكون هو المسؤول عن تحديثات التطبيق. وإذا حاول مثبِّت آخر تحديث التطبيق، سيُتاح للمستخدم الموافقة على التحديث الجديد قبل المتابعة.

تفعيل الحِزم لتعديل الملكية

للإشارة إلى أنّ متجرًا أو برنامج تثبيت يمتلك حِزمة تطبيق، أدرِج العلامة update-ownership في ملف sysconfig XML لكل حِزمة على النحو التالي:

<update-ownership package="com.example.application" installer="com.example.installer" />

في هذا المثال، com.example.application هو حزمة التطبيق التي سيتم امتلاكها، وcom.example.installer هو مالك الحزمة. عند الموافقة على تحديث ملكية الحزمة، على المتاجر أو أدوات التثبيت الأخرى التي لديها امتيازات التعامل مع مالك التحديث والحصول على موافقة المستخدم لتحديث التطبيق.

استبعاد حِزم من تغييرات الملكية

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

لإيقاف إمكانية تحديث الحِزم من خلال متجر أو مثبِّت آخر، اتّبِع الخطوات التالية:

  1. أدرِج السمة التالية في ملف AndroidManifest.xml الخاص بالمتجر أو برنامج التثبيت الأصليين:

    <application …>
      <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST"
                android:resource="@xml/legacyOwnershipDenylist" />
    </application>
    

    يشير هذا المثال إلى قائمة عناوين URL مرفوضة بتنسيق XML باسم legacyOwnershipDenylist.

  2. أنشئ قائمة حظر كمورد XML أولي بالتنسيق التالي:

    <deny-ownership>com.example.app1</deny-ownership>
    <deny-ownership>com.example.app2</deny-ownership>
    

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

يمكن أن تتغيّر مجموعة الحِزم في هذه القائمة من خلال تحديث حزمة APK الخاصة بأداة التثبيت التي توفّر القائمة. تتم إزالة أي ملكية تم ضبطها لحزمة تمت إضافتها لاحقًا إلى قائمة الرفض عند تعديل برنامج التثبيت. وبالتالي، لن تتطلّب التحديثات اللاحقة لحِزمة التطبيق المدرَجة في قائمة الرفض تفاعلاً من المستخدم.

التعامل مع مالك التحديث والحصول على موافقة المستخدم

في نظام التشغيل Android 14، حتى إذا كان لدى المتجر أو مثبِّت التطبيقات إذن android.permission.INSTALL_PACKAGES، سيظل بحاجة إلى التعامل مع حالة STATUS_PENDING_USER_ACTION إذا أراد تحديث تطبيق يمتلك متجر أو مثبِّت آخر تحديثاته.

يوضّح التطبيق النموذجي InstallAPKSessionApi.java أيضًا كيفية التعامل مع STATUS_PENDING_USER_ACTION.

إثبات ملكية التطبيقات المُحمَّلة مُسبقًا

لا يملك عادةً مثبِّت معيّن التطبيقات المحمَّلة مسبقًا. بدلاً من ذلك، يتم تعيين مالك جديد للتطبيقات المحمَّلة مسبقًا باستخدام إعدادات النظام كما هو موضّح في الموافقة على تحديث الملكية.