Как «ShareIt», «Xender» и т. Д. Могут устанавливать APK, не требуя разрешения «неизвестный источник»?

9

Обычно, если мне нужно установить apk (скажем, с SD-карты), мне нужно включить «Неизвестные источники» в настройках моего телефона. Но когда я передаю и устанавливаю любой APK с другого телефона с помощью «ShareIt», такое разрешение не требуется для моего телефона.

Как ShareIt может обойти это разрешение?

Нео
источник
ShareIt был предустановлен на вашем устройстве, или вы установили его самостоятельно?
Иззи

Ответы:

8

Я немного покопался и это возможно без системных разрешений от API 21 и далее https://developer.android.com/reference/android/content/pm/PackageInstaller.html .

На самом деле, есть пример кода от Google, который показывает, как это сделать. https://github.com/googlesamples/android-testdpc/blob/master/app/src/main/java/com/afwsamples/testdpc/cosu/CosuUtils.java

Нео
источник
Престижность за то, что выкопал это, теперь, чтобы узнать, действительно ли приложение использовало это ...
Энди Ян
2
@beeshyams - Не совсем. Приложение не может выполнить «тихую» установку. Благодаря ожидающему намерению, явный «щелчок» пользователя требуется во время установки.
Нео
1
@ Нет Блин, поэтому я просто предположил автоматическую установку, когда писал свой ответ ... Мой плохой.
Энди Ян
2
В других новостях пакет ShareIt, кажется, каким-то образом запутан, поэтому, хотя мои инструменты преуспели в генерации кода Java, из заглушек не видно ничего существенного.
Энди Ян
Подождите - я использовал другой инструмент, и я думаю, что мог бы получить его. После проверки я отредактирую его в вашем ответе.
Энди Ян
4

Если приложения устанавливаются без вывода сообщений (то есть без обычного диалогового окна установки), предположительно, эти приложения вызывают напрямую pm, т. Е. PackageManagerКак системное приложение имеет разрешение android.permission.INSTALL_PACKAGES.

Телефон должен быть рутирован, чтобы приложение могло звонить pmв корневом контексте, иначе вас встретит сообщение «Ни у пользователя xxxx, ни у текущего процесса нет android.permission.INSTALL_PACKAGES».

РЕДАКТИРОВАТЬ: Как @Izzy указал в комментарии, android.permission.INSTALL_PACKAGESтакже предоставляется приложениям, установленным на /system. Смотрите ниже комментарий и этот ТАК вопрос для большего понимания.

Энди Ян
источник
Обратите внимание, что я на самом деле не пробовал ShareIt и не анализировал, что он на самом деле делает, а просто выдвигал наиболее вероятную теорию. Если у вас нет рута, и он все еще работает, у нас может возникнуть гораздо более интересная проблема.
Энди Ян
1
@beeshyams В Китае, на многих сторонних рынках приложений бывают автоматические или автоматические установки. Первый способ описан здесь, и они будут запрашивать разрешение root при первой установке; 2-й - попросить вас включить службу специальных возможностей, а затем автоматизировать щелчки на кнопках «установить».
Энди Ян
1
Мой телефон не рутирован. И он также не запрашивал разрешения root. Но в Индии ShareIt - очень популярный метод установки приложений через одноранговую сеть.
Нео
1
@beeshyams Избегайте этого приложения и его ужасной моль необходимых разрешений. Вместо этого рассмотрите возможность использования Share с открытым исходным кодом через HTTP (доступно на F-Droid). Я никоим образом не связан с приложением.
Гримуар
1
@beeshyams Работает с любым устройством, подключенным к той же сети. Насколько я могу судить, хост должен быть Android, но любое устройство может подключиться к той же сети и посетить HTTP-адрес, указанный в приложении, чтобы загрузить файл (ы).
Гримуар