Android集成MSAL出现Username must not be null报错如何解决
问题原因
你引入MSAL依赖时同步添加了微软Azure DevOps的私有Maven仓库,且该仓库在你的仓库列表中优先级高于你拉取com.cerence系列依赖的私有仓库/公开仓库,Gradle会按顺序尝试从所有仓库拉取依赖,在访问这个需要身份验证的微软私有仓库时,你没有配置对应凭证,就触发了Username must not be null报错。
移除MSAL依赖时同步移除了对应的私有仓库配置,因此项目可以正常运行。
解决方法
按优先级从高到低选择以下方案即可:
- 方案1:移除不需要的微软私有仓库配置
2.0+正式版的MSAL已经全量发布到Maven Central,你不需要额外添加https://identitydivision.pkgs.visualstudio.com/_packaging/AndroidADAL/maven/v1这个私有仓库。直接在根目录build.gradle(或新版Android Studio的settings.gradle)的仓库配置中删除该条目,重新同步Gradle即可正常拉取所有依赖。 - 方案2:调整仓库优先级
如果你确实需要保留该私有仓库,将你存放com.cerence依赖的仓库、mavenCentral()、google()的顺序调整到微软私有仓库之前,这样Gradle会优先从前面的仓库拉取com.cerence依赖,不会触发微软私有仓库的验证逻辑。
参考配置示例:dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { // 优先放你的cerence私有仓库 maven { url "你的cerence私有仓库地址" } google() mavenCentral() // 微软私有仓库放在最后 maven { url 'https://identitydivision.pkgs.visualstudio.com/_packaging/AndroidADAL/maven/v1' } } } - 方案3:配置私有仓库凭证
如果你需要使用该微软私有仓库中的预发布/特殊版本MSAL,可以为仓库配置身份凭证:- 访问Azure DevOps生成对应权限的个人访问令牌
- 修改仓库配置,添加凭证信息:
maven { url 'https://identitydivision.pkgs.visualstudio.com/_packaging/AndroidADAL/maven/v1' credentials { username = "你的Azure DevOps账户名" password = "你生成的访问令牌" } }
内容的提问来源于stack exchange,提问作者Harsh Shah
相关产品推荐
相关产品推荐

