Gdy aplikacja jest instalowana przez sklep lub instalator, sklep lub instalator jest uważany za „instalatora zarejestrowanego”, czyli ostatniego instalatora aplikacji. Przed Androidem 14 system Android pozwalał innemu sklepowi lub instalatorowi aplikacji stać się zarejestrowanym instalatorem i zaktualizować aplikację bez powiadamiania użytkownika.
W Androidzie 14 początkowy instalator aplikacji może zadeklarować, że jest właścicielem aktualizacji i aktualizacjami tej aplikacji. Jeśli inny instalator spróbuje zaktualizować aplikację, narzędzie użytkownik ma możliwość zaakceptowania nowej aktualizacji przed jej zastosowaniem.
Wyrażanie zgody na pakiety aktualizacji własności
Aby zadeklarować, że właścicielem pakietu aplikacji jest sklep lub instalator:
umieść tag update-ownership
w pliku XML sysconfig
dla każdego pakietu jako
następujące:
<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 jest opłacany
w celu zaktualizowania własności, inne sklepy z podwyższonymi uprawnieniami lub instalator muszą
obsługiwać właściciela aktualizacji i uzyskać zgodę użytkownika na zaktualizowanie aplikacji.
Wyłączanie pakietów z zmian własności
Możesz umożliwić sklepowi lub instalatorowi wykluczenie niektórych pakietów z możliwości zmiany właściciela aktualizacji przez podanie listy zaprzeczeń w pliku APK. Poprzez dołączenie pakietu na tej liście żaden sklep ani instalator nie może poprosić o aktualizację własności pakietu.
Aby uniemożliwić aktualizowanie pakietów przez inny sklep lub instalator:
Dodaj tę usługę do pliku w pierwotnym sklepie lub Plik
AndroidManifest.xml
:<application …> <property android:name="android.app.PROPERTY_LEGACY_UPDATE_OWNERSHIP_DENYLIST" android:resource="@xml/legacyOwnershipDenylist" /> </application>
Ten przykład odwołuje się do listy odrzuconych w formacie XML o nazwie
legacyOwnershipDenylist
.Utwórz listę odrzuconych jako nieprzetworzony zasób 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 prawa własności pakietu z listy odrzuconych, własność nie zostanie przyznana, a pakiet będzie nadal zainstalowany, ale nie zostanie należące do dowolnego instalatora. Co więcej, 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ę zmienić w związku z aktualizacją pliku APK instalatora, który udostępnia tę listę. Wszelkie prawa własności ustawione dla pakietu, który jest wobec listy odrzuconych jest czyszczona, gdy instalator zostanie Zaktualizowano. W związku z tym kolejne aktualizacje pakietu aplikacji na liście zablokowanych nie będą wymagać interakcji użytkownika.
Obsługa właściciela aktualizacji i uzyskiwanie zgody użytkownika
W Androidzie 14 nawet jeśli sklep lub instalator aplikacji ma uprawnienia android.permission.INSTALL_PACKAGES
, musi on 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
.
Udowadnianie prawa własności do wstępnie załadowanych aplikacji
Wstępnie załadowane aplikacje zwykle nie należą do konkretnego instalatora. Zamiast tego w przypadku wstępnie zainstalowanych aplikacji nowy właściciel jest przypisywany za pomocą konfiguracji systemu, jak pokazano w sekcji Włączanie pakietów w celu zaktualizowania własności.