gpt4 book ai didi

android - 由 java.lang.SecurityException : uid . 引起 .. 无法显式添加 : . 类型的帐户 .. Android P 和 Android 10

转载 作者:行者123 更新时间:2023-12-04 23:38:07 24 4
gpt4 key购买 nike

最近,我看到 Firebase Crashlytic 在以下方面报告的错误有所增加

Caused by java.lang.SecurityException: uid 10172 cannot explicitly add accounts of type: com.mypackage.account
at android.os.Parcel.createException(Parcel.java:2087)
at android.os.Parcel.readException(Parcel.java:2055)
at android.os.Parcel.readException(Parcel.java:2003)
at android.accounts.IAccountManager$Stub$Proxy.addAccountExplicitly(IAccountManager.java:1660)
at android.accounts.AccountManager.addAccountExplicitly(AccountManager.java:889)
它是从触发的
accountManager.addAccountExplicitly(defaultAccount, null, null)
根据 Firebase Crashlytic 报告,它仅发生在 Android 9 和 10 以及三星、Realme 和 OPPO 设备上
最后,我尝试在 Android P 和 Android 10 设备上进行复制,并且代码被触发而没有问题。
我通过 StackOverflow 进行了搜索,例如
Android app crashes on addAccountExplicitly(account, password, null); , Android SecurityException: uid xxxxx cannot explicitly add accounts , https://stackoverflow.com/a/58591203/3286489 , https://stackoverflow.com/a/37348909/3286489 , https://stackoverflow.com/a/16972048/3286489 , 和 Android Adding Account with AccountManager .
它们用于可复制的问题,因此对我没有用。
我检查也发现像
https://github.com/signalapp/Signal-Android/issues/9311 (安卓 10)
https://github.com/signalapp/Signal-Android/issues/9296 (Android 9 - 派?)
https://github.com/signalapp/Signal-Android/issues/9349 (另一个 Android 10,在 One Plus 上)
从 Android P 开始,有更多的安全更新需要我们更改我们的代码,或者 Android P 和 10 有一些与此问题相关的错误?最近有人遇到过这个问题吗?

最佳答案

我敢打赌你调用 addAccountExplicitly在错误的地方。
根据Google docs for AccountManager.addAccountExplicitly :

Adds an account directly to the AccountManager. Normally used by sign-up wizards associated with authenticators, not directly by applications.



This method requires the caller to have a signature match with the authenticator that owns the specified account.


当您的应用调用 AccountManager.addAccount ,您要求身份验证器及其相关 Activity 向设备上的帐户添加条目。 AccountManager 调用身份验证器来处理此请求。一旦验证器/Activity 验证了用户,它将调用 addAccountExplictly完成所要求的任务。说得通。
请记住,调用 AccountManager 的 Activity 和身份验证器/Activity 在不同的进程中。
再看一下措辞:“通常使用......不是由应用程序直接使用”。
听起来 Google 允许在验证器以外的应用程序组件是否可以调用 addAccountExplicitly 上有一些余地。并表示只要有签名匹配,组件就可以调用该方法。
我认为三星最近发布的加强安全性的做法是将签名仅应用于具有身份验证器组件的进程,而不是应用于具有应用程序 Activity 的进程。
我得出结论的原因是我们的应用正在调用 addAccountExplicitly在身份验证器 Activity 和非身份验证器 Activity (即“LoginActivity”)中都取决于应用程序启动流程;我们仅从非身份验证器 Activity 中收到与您类似的崩溃报告。从那以后,我重新设计了应用程序,只调用 addAccountExplicitly来自身份验证器 Activity 。
您的应用程序应始终要求 AccountManager 使用您的身份验证器通过 addAccount 添加帐户并遵照身份验证者调用 addAccountExplicitly .
有关详细信息,请参阅我对 AccountManager 的一般性问题的回答: https://stackoverflow.com/a/37348909/4504191
附言由于我对服务、绑定(bind)、Android 中的 IPC、进程边界的使用等方面的知识不完整。我可能没有准确地解释签名匹配。随时在评论中编辑或建议编辑。每天我都会学到有关这项技术的新知识。

关于android - 由 java.lang.SecurityException : uid . 引起 .. 无法显式添加 : . 类型的帐户 .. Android P 和 Android 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62656740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com