Возможно ли иметь AccountAuthenticator и управление учетными записями в библиотеке .aar?

То, что я пытаюсь сделать, - это разделить все процедуры управления учетными записями в отдельной библиотеке .aar, чтобы использовать ее во всех моих проектах. Суть в том, чтобы использовать одну и ту же учетную запись для разных приложений. Например: я вошел в приложение A. Приложение A сохранило некоторые данные аутентификации в менеджере учетных записей. Затем я устанавливаю приложение B с таким же AAR и управлением учетными записями. Приложение B автоматически использует учетные данные, созданные в приложении A.

Для первой простой попытки я собрал все "типа CRUD" методы для AccountManager в моем AAR. Я также добавил классы AuthenticatorService и Authenticator в этот AAR и добавил свою службу с помощью authentication.xml в манифест AAR.

Проблема в том, что приложение, которое использует мой AAR для аутентификации, не может создать учетную запись. Я продолжаю получать исключение "uid XXX cannot explicitly add accounts of type: com.example.acc_type".

Я перепроверил, и типы учетных записей совпадают в authenticationator.xml и в моем коде.

Более того: если я перенесу AuthenticatorService, классы Authenticator, authentication.xml и описание службы из AAR в приложение - все работает нормально!

Так что я считаю, что есть какая-то ошибка. Действительно ли возможно иметь AuthenticatorService и Authenticator в библиотеке aar?


person udenfox    schedule 15.04.2020    source источник


Ответы (1)


С технической точки зрения, хранение вашего AuthenticatorService и классов Authenticator в отдельном модуле Android-Library с целью повторного использования не должно вызывать никаких проблем при его использовании в приложении Android. Ваша проблема заключается в обмене данными между двумя приложениями, а не в многомодульности. Для этого вы можете создать общую локальную базу данных, используя сторонние библиотеки или плоские файлы (в зависимости от ваших потребностей).

Android предоставляет несколько полезных API, которые позволяют использовать IPC для приложений Android:

Если размер данных невелик, вы можете использовать для этого SharedPreferences API, однако он устанавливает CAP для того, сколько данных может предоставить приложение. Поскольку SharedPreferences носит глобальный характер, я бы не советовал хранить там конфиденциальные данные.

Если вы хотите, чтобы приложение открывало некоторые данные, посмотрите, как архитектура Android позволяет использовать каталог «Экспорт» внутри каждого приложения, где вы можете хранить любые данные, а другие приложения могут просто читать их безопасным образом. Удаление приложения приведет к удалению всех данных, присутствующих в этом каталоге «Экспорт».

person Karan Dhillon    schedule 21.04.2020
comment
Спасибо за ответ. Но, к сожалению, мне нужно, чтобы AccountManager работал так. Смысл в том, чтобы иметь учетную запись в списке учетных записей настроек, чтобы пользователь мог ее видеть, выбирать или удалять. - person udenfox; 27.04.2020