Как приложение "Настройки" запускает приложение без экспорта?

Android N позволяет вам связать свою деятельность с вашей страницей приложения в Настройки. Просто добавьте <intent-filter> для android.intent.action.APPLICATION_PREFERENCES. Приложение Android N Settings будет искать активность в вашем приложении, которая имеет <intent-filter>. Если "Настройки" найдут один, он добавит шестерню значок на страницу вашего приложения в настройках, и если пользователь нажимает шестерню, они будут отправлены в назначенный вами вид деятельности.

Меня беспокоило безопасность, поэтому я подал проблему, ища разрешение, которое мы могли бы использовать с android:permission, чтобы позволить настройкам начать нашу деятельность, но не разрешать другим приложениям запускать нашу деятельность (например, WRITE_SECURE_SETTINGS).

cketti затем указал, что вы можете просто отметить активность как не экспортированную, через android:exported="false". К моему большому удивлению, это работает.

Как приложение "Настройки" запускает действие, отмеченное как не экспортированное?

Я уверен, что есть разрешение, которое контролирует это. Тем не менее, быстрый просмотр манифеста приложения настроек (master branch, n-development-preview-5) ничего не показалось очевидным.

Итак:

  • Есть ли разрешение, позволяющее приложению запускать неэкспортируемый компонент другого приложения? Если да, то что это?

  • Если нет, как настройки отключены?

Ответ 1

Я бы предположил, что в манифесте нет ничего, что дает приложению разрешение на вызов экспортированных действий. Я полагаю, что он выполнил это, установив LOCAL_PRIVILEGED_MODULE := true в файл Android.mk для приложения "Настройки". Этот флаг предоставит разрешения на уровне системного уровня приложения и поместит его в каталог system/priv-app/ во время компиляции ОС.

Если вы посмотрите на frameworks/base/core/java/android/app/ActivityManager.java для метода checkComponentPermission, вы увидите, что если UID - это идентификатор SYSTEM, то разрешение компонента предоставляется независимо от экспортированной настройки.