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 osoba, która pierwotnie zainstalowała aplikację, może zadeklarować się jako „właściciel aktualizacji” i zarządzać aktualizacjami aplikacji. Jeśli inna osoba spróbuje zaktualizować aplikację, użytkownik będzie mógł zatwierdzić nową aktualizację, zanim zostanie ona zainstalowana.
Wybieranie pakietów do zaktualizowania własności
Aby zadeklarować, że sklep lub instalator jest właścicielem pakietu aplikacji, dodaj tag update-ownership
w 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 jest ustawiony tak, aby zaktualizować własność, inne uprzywilejowane sklepy lub instalatory muszą zarządzać właścicielem aktualizacji i uzyskiwać zgodę użytkownika, aby zaktualizować aplikację.
Rezygnowanie ze zmian własności dla pakietów
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. Jeśli pakiet znajduje się na tej liście, żaden sklep ani instalator nie może poprosić o zaktualizowanie prawa własności do tego pakietu.
Aby uniemożliwić aktualizowanie pakietów przez inny sklep lub instalator:
W pliku
AndroidManifest.xml
oryginalnego sklepu lub instalatora dodaj tę właściwość:<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ę zablokowanych adresów jako surowy 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 żąda praw własności do pakietu z listy zablokowanych, nie zostanie mu przyznane prawo własności, a pakiet nadal będzie zainstalowany, ale żaden instalator nie będzie jego właścicielem. 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ę. Właściciel ustawiony dla pakietu, który jest następnie dodawany do listy zaprzeczeń, jest usuwany po zaktualizowaniu instalatora. 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
, nadal 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
.
Udowadnianie prawa własności do wstępnie załadowanych aplikacji
Wstępnie zainstalowane aplikacje zwykle nie należą do konkretnego instalatora. Zamiast tego wstępnie załadowane aplikacje mają przypisywane nowego właściciela w ramach konfiguracji systemu, jak pokazano w sekcji Zezwalanie pakietom na aktualizowanie własności.