Gdy aplikacja jest instalowana przez sklep lub instalator, sklep lub instalator jest uznawany za „instalatora rekordu”, czyli ostatniego instalatora aplikacji. Przed Androidem 14 Android zezwalał innemu sklepowi lub instalatorowi aplikacji na stanie się instalatorem rekordu i aktualizowanie aplikacji bez powiadamiania użytkownika.
W Androidzie 14 początkowy instalator aplikacji może zadeklarować się jako „właściciel aktualizacji” i zarządzać aktualizacjami aplikacji. Jeśli inny instalator spróbuje zaktualizować aplikację, użytkownik będzie mógł zatwierdzić nową aktualizację przed jej rozpoczęciem.
Wybierz pakiety, aby zaktualizować prawo własności
Aby zadeklarować, że sklep lub instalator jest właścicielem pakietu aplikacji, dodaj tag update-ownership
do pliku XML sysconfig
dla każdego pakietu w ten sposób:
<update-ownership package="com.example.application" installer="com.example.installer" />
W tym przykładzie com.example.application
to pakiet aplikacji, którego właścicielem jest com.example.installer
. Gdy pakiet zostanie włączony do aktualizacji własności, inne uprzywilejowane sklepy lub instalatory muszą obsługiwać aktualizację właściciela i uzyskiwać zgodę użytkownika na aktualizację aplikacji.
Rezygnacja z pakietów w przypadku zmian własności
Sklep lub instalator może wyłączyć podzbiór pakietów ze zmian właściciela aktualizacji, podając listę zablokowanych w pliku APK. Jeśli pakiet znajduje się na tej liście, żaden sklep ani instalator nie może poprosić o przeniesienie prawa własności do aktualizacji pakietu.
Aby wyłączyć możliwość aktualizowania pakietów przez inny sklep lub instalator:
W pliku
AndroidManifest.xml
oryginalnego sklepu lub instalatora uwzględnij tę właściwość:<application …> <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST" android:resource="@xml/legacyOwnershipDenylist" /> </application>
W tym przykładzie odwołujemy się do listy zablokowanych adresów URL w formacie XML o nazwie
legacyOwnershipDenylist
.Utwórz listę wykluczeń jako surowe zasoby XML w tym formacie:
<deny-ownership>com.example.app1</deny-ownership> <deny-ownership>com.example.app2</deny-ownership>
Jeśli sklep lub instalator poprosi o prawo własności do pakietu znajdującego się na liście zablokowanych, prawo własności nie zostanie przyznane, a pakiet zostanie zainstalowany, ale nie będzie należeć do żadnego instalatora. Ponadto niezależnie od instalatora aplikacja na liście zablokowanych nie może należeć do nikogo.
Zestaw pakietów na tej liście może się zmieniać w wyniku aktualizacji pliku APK instalatora, który udostępnia tę listę. Wszelkie prawa własności ustawione dla pakietu, który zostanie później dodany do listy zablokowanych, są usuwane po zaktualizowaniu instalatora. Dlatego kolejne aktualizacje pakietu aplikacji na liście odmowy nie będą wymagać interakcji użytkownika.
Obsługa aktualizacji właściciela i uzyskiwanie zgody użytkownika
W Androidzie 14 nawet jeśli sklep lub instalator aplikacji ma uprawnienie
android.permission.INSTALL_PACKAGES
, musi obsługiwać stan
STATUS_PENDING_USER_ACTION
, jeśli chce zaktualizować aplikację, której aktualizacje są własnością innego sklepu lub instalatora.
Przykładowa aplikacja InstallAPKSessionApi.java
pokazuje też, jak obsługiwać STATUS_PENDING_USER_ACTION
.
Ustalanie własności wstępnie załadowanych aplikacji
Wstępnie załadowane aplikacje zwykle nie należą do konkretnego instalatora. Zamiast tego wstępnie załadowane aplikacje otrzymują nowego właściciela za pomocą konfiguracji systemu, jak pokazano w sekcji Włączanie pakietów w celu aktualizacji własności.