Zwykle, jeśli muszę zainstalować apk (powiedzmy z karty SD), muszę włączyć opcję „Nieznane źródła” w ustawieniach mojego telefonu. Ale kiedy przesyłam i instaluję dowolny pakiet APK z innego telefonu za pomocą „ShareIt”, mój telefon nie wymaga takiej zgody.
W jaki sposób ShareIt może ominąć to uprawnienie?
Odpowiedzi:
Zrobiłem trochę kopania i jest to możliwe bez uprawnień systemowych od API 21 i później https://developer.android.com/reference/android/content/pm/PackageInstaller.html .
W rzeczywistości Google ma przykładowy kod, który pokazuje, jak to zrobić. https://github.com/googlesamples/android-testdpc/blob/master/app/src/main/java/com/afwsamples/testdpc/cosu/CosuUtils.java
źródło
Jeśli aplikacje są instalowane w trybie cichym (np. Bez zwykłego okna dialogowego instalacji), prawdopodobnie te aplikacje wywołują bezpośrednio
pm
, tj.PackageManager
Które jako aplikacja systemowa ma pozwolenieandroid.permission.INSTALL_PACKAGES
.Telefon musi być zrootowany, aby aplikacja mogła wywoływać
pm
w kontekście administratora, w przeciwnym razie zostanie wyświetlony komunikat „Ani użytkownik xxxx, ani bieżący proces nie ma android.permission.INSTALL_PACKAGES”.EDYCJA: Jak zauważył @Izzy w komentarzu,
android.permission.INSTALL_PACKAGES
jest również przyznawany aplikacjom zainstalowanym na/system
. Zobacz poniższy komentarz i to SO pytanie, aby uzyskać więcej informacji.źródło