Действительно ли android: exported = "true" необходимо для службы аутентификации? - PullRequest
22 голосов
/ 14 февраля 2012

Обычно для реализации аутентификатора Android используются две службы: служба аутентификации для возврата аутентификатора и служба синхронизации, которая предоставляет адаптер синхронизации. Этот вопрос конкретно касается службы аутентификации, хотя в большинстве примеров обеим службам присваивается атрибут android:exported="true" в AndroidManifest.xml, например:

<service
    android:name=".authenticator.AuthenticationService"
    android:exported="true">
    <intent-filter>
        <action
            android:name="android.accounts.AccountAuthenticator" />
    </intent-filter>
    <meta-data
        android:name="android.accounts.AccountAuthenticator"
        android:resource="@xml/authenticator" />
</service>

Удаление атрибута из службы аутентификации, похоже, не дает никакого эффекта (проверено Froyo, Gingerbread) - код авторизации продолжает работать просто отлично - так действительно ли необходим флаг?

Ответы [ 2 ]

38 голосов
/ 14 февраля 2012

Хорошо, чтобы ответить на этот вопрос самостоятельно, прочитав документы, документация для атрибута exported гласит:

Значение по умолчанию зависит от того, содержит ли служба фильтры намерений,Отсутствие каких-либо фильтров означает, что он может быть вызван только путем указания его точного имени класса.Это подразумевает, что сервис предназначен только для внутреннего использования приложения (поскольку другие не будут знать имя класса).Так что в этом случае значением по умолчанию является «ложь».С другой стороны, наличие хотя бы одного фильтра подразумевает, что служба предназначена для внешнего использования, поэтому значением по умолчанию является «true».

Все службы аутентификации имеют фильтр намерений - документыдля AbstractAccountAuthenticator скажем:

Чтобы быть аутентификатором, нужно ... написать службу, которая возвращает результат getIBinder () в onBind службы (android.content).Intent), когда вызывается с намерением с действием ACTION_AUTHENTICATOR_INTENT.

Для этого требуется фильтр намерений, следовательно, значение по умолчанию для экспортируемой для службы true.Таким образом, ответ на этот вопрос «Нет, атрибут не необходим - потому что он по умолчанию истинен» .

1 голос
/ 08 июля 2018

Хотя это на самом деле не требуется, похоже, это создает некоторую путаницу. Вот почему Google рекомендует до

Всегда устанавливайте атрибут android:exported явно, независимо от того, экспортируете ли вы какой-либо из компонентов вашего приложения или нет.

в их основных рекомендациях по качеству приложений .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...