NativeScript执行tns build android构建失败 无法访问IdentityCredential
问题根因
tns build android 触发 cannot access IdentityCredential 错误的核心原因是项目传递依赖拉取了高版本AndroidX安全组件,该版本组件引用了Android 12(API 31)才新增的IdentityCredential类,当compileSdkVersion低于31时,编译器无法识别该类直接抛出构建失败。
单独在app.gradle中配置compileSdkVersion不生效,通常是因为配置被NativeScript CLI默认构建规则、第三方插件的gradle配置覆盖,或是修改配置后未清理构建缓存导致旧配置仍在生效。
排查流程
- 定位冲突依赖来源:进入项目下的
android目录,执行命令输出完整依赖树,查找引入高版本安全组件的路径:
重点确认是否存在./gradlew :app:dependencies --configuration releaseRuntimeClasspath | grep "security"androidx.security:security-crypto:1.1.0-alpha03及以上版本,该版本区间默认要求compileSdkVersion >= 31。 - 校验编译配置优先级:检查
App_Resources/Android/目录下的所有gradle相关配置文件,以及已安装的NativeScript插件内的gradle配置,确认是否存在其他compileSdkVersion配置项覆盖了手动修改的参数。
解决方法(按优先级验证)
- 方案1:全局升级编译SDK版本到31+(兼容性最好)
不要仅在app.gradle中配置参数,直接在App_Resources/Android/gradle.properties文件中追加全局编译配置,避免被其他规则覆盖:
配置完成后先清理构建缓存再重新编译:android.compileSdkVersion=31 android.buildToolsVersion=31.0.0 android.targetSdkVersion=31tns platform clean android tns build android - 方案2:保留compileSdkVersion=30场景下,强制锁定兼容版依赖
若项目有特殊要求必须使用API 30编译,在App_Resources/Android/app.gradle文件中,和android配置块同级位置添加依赖强制解析规则,把所有传递引入的AndroidX安全组件锁定到兼容API 30的版本:
执行平台清理命令后重新构建即可。configurations.all { resolutionStrategy { force 'androidx.security:security-crypto:1.1.0-alpha02' force 'androidx.security:security-identity-credential:1.0.0-alpha02' } } - 方案3:修复第三方插件依赖冲突
如果依赖树排查结果显示高版本安全组件是由某第三方NativeScript插件引入,可直接修改对应插件的gradle依赖配置,将安全组件版本降级,或是更换为兼容compileSdk 30的插件版本。
所有gradle配置修改完成后必须执行
tns platform clean android清理旧构建缓存,否则修改不会生效,会出现配置已调整但错误复现的问题。
内容的提问来源于stack exchange,提问作者Varad Kale
相关产品推荐
相关产品推荐

