android - .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 吗?
解决方案
从技术上讲,将 AuthenticatorService 和 Authenticator 类保存在单独的 Android-Library 模块中以实现可重用性,在 Android 应用程序中使用它时不会导致任何问题。您的问题是在两个应用程序之间共享数据而不是多模块。为此,您可以使用 3rd 方库或平面文件(任何适合您的需要)创建共享本地数据库。
Android 提供了一些有用的 API,允许 IPC 用于 android 应用程序:
如果数据量很小,那么您可以使用 SharedPreferences API,但它会限制应用程序可以贡献多少数据。由于 SharedPreferences 本质上是全局的,我不建议将敏感数据存储在那里。
如果您希望某个应用程序公开一些数据,那么请研究一下 android 架构如何允许在每个应用程序中都有一个“导出”目录,您可以在其中存储任何数据,而其他应用程序可以简单地以安全的方式读取它。删除应用程序将清除此“导出”目录中存在的所有数据。
推荐阅读
- python - open3D中的RGB颜色问题
- javascript - 如何解决 TrackingPage.html:24 ERROR TypeError: Cannot read property 'unsubscribe' of undefined?
- c++ - 当您通过多个进程映射同一个大文件时会发生什么?
- javascript - 比较两个数组并将缺失元素加 0
- c# - 实体“学生”需要定义一个主键
- python-3.x - 从 readlines() 输出到列表中
- simpleitk - BSplineTransform.GetInverse() 抛出 sitk::ERROR: Unable to create inverse
- javascript - 在material-ui网格中自定义行间距的最佳方法是什么?
- c# - 错误对象不包含带 1 个参数的构造函数
- flutter - 如何从另一个 StatefulWidget 更新 StatefulWidget 页面?