【问题标题】:Is it possible to have AccountAuthenticator and account management in .aar library?.aar 库中是否可以有 AccountAuthenticator 和帐户管理?
【发布时间】:2020-04-15 15:02:09
【问题描述】:

我正在尝试做的是将所有帐户管理例程分离到一个单独的 .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吗?

【问题讨论】:

    标签: android aar accountmanager android-authenticator


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回答。但不幸的是,我需要 AccountManager 来解决这个问题。关键是在设置帐户列表中有帐户,以便用户可以查看、选择或删除它。
    猜你喜欢
    • 2012-11-01
    • 1970-01-01
    • 2014-04-16
    • 2012-04-08
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    相关资源
    最近更新 更多