首页 > 解决方案 > .aar 库中是否可以有 AccountAuthenticator 和帐户管理?

问题描述

我正在尝试做的是将所有帐户管理例程分离到一个单独的 .aar 库中,以便在我的所有项目中使用它。关键是在不同的应用程序之间共享相同的帐户。例如:我已经登录到应用程序 A。应用程序 A 将一些身份验证数据保存到客户经理。然后我安装了与帐户管理具有相同 AAR 的应用程序 B。应用 B 自动使用在应用 A 中创建的凭据。

对于第一个简单的尝试,我在我的 AAR 中为 AccountManager 组装了所有“类似 CRUD”的方法。我还在该 AAR 中添加了 AuthenticatorService 和 Authenticator 类,并在 AAR 的清单中添加了我的服务和 authenticationator.xml。

问题是使用我的 AAR 进行身份验证的应用程序无法创建帐户。我一直收到“ uid XXX cannot explicitly add accounts of type: com.example.acc_type”异常。

我已经仔细检查过,authenticator.xml 和我的代码中的帐户类型相同。

更重要的是:如果我将 AuthenticatorService、Authenticator 类、authenticator.xml 和服务描述从 AAR 移动到应用程序 - 一切正常!

所以我认为有一些错误。真的有可能在 aar 库中有 AuthenticatorService 和 Authenticator 吗?

标签: androidaaraccountmanagerandroid-authenticator

解决方案


从技术上讲,将 AuthenticatorService 和 Authenticator 类保存在单独的 Android-Library 模块中以实现可重用性,在 Android 应用程序中使用它时不会导致任何问题。您的问题是在两个应用程序之间共享数据而不是多模块。为此,您可以使用 3rd 方库或平面文件(任何适合您的需要)创建共享本地数据库。

Android 提供了一些有用的 API,允许 IPC 用于 android 应用程序:

如果数据量很小,那么您可以使用 SharedPreferences API,但它会限制应用程序可以贡献多少数据。由于 SharedPreferences 本质上是全局的,我不建议将敏感数据存储在那里。

如果您希望某个应用程序公开一些数据,那么请研究一下 android 架构如何允许在每个应用程序中都有一个“导出”目录,您可以在其中存储任何数据,而其他应用程序可以简单地以安全的方式读取它。删除应用程序将清除此“导出”目录中存在的所有数据。


推荐阅读