You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复React Native安卓端‘Cannot read properties of undefined (reading 'createPublicClientApplication')’错误?

解决React Native 63.5中react-native-msal安卓端初始化崩溃问题

问题根源

你排除com.microsoft.device.display依赖的操作,可能破坏了MSAL原生库的依赖链,导致Native模块无法正常初始化,JS层调用时找不到createPublicClientApplication方法,从而抛出undefined错误。而最初的依赖找不到问题,是因为微软的display-mask库不在默认Maven仓库中。

可行解决方案

方案1:添加微软专属Maven仓库(推荐)

不用排除依赖,直接在项目级build.gradle中添加微软的仓库,让构建工具能找到缺失的display-mask库:

  1. 打开安卓根目录下的build.gradle(注意是项目根目录的,不是app模块内的)
  2. 在allprojects的repositories块中添加微软Duo SDK仓库:
allprojects {
    repositories {
        // 保留原有仓库(如google()、jcenter()等)
        maven {
            url "https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1"
        }
    }
}
  1. 还原react-native-msal库的build.gradle,删除你添加的排除配置,恢复原有的MSAL依赖声明。

方案2:锁定MSAL到无依赖问题的版本

如果添加仓库无效,可以尝试降级MSAL到2.2.2版本,该版本不依赖display-mask库:
修改react-native-msal库的build.gradle中的依赖声明:

implementation 'com.microsoft.identity.client:msal:2.2.2'

删除之前的排除配置,这样既不会出现构建错误,也不会破坏MSAL的初始化上下文。

方案3:确认Native模块注册正确

针对RN63.5的旧版本,确保ReactNativeMsalPackage已正确注册到应用中:
打开android/app/src/main/java/[你的包名]/MainApplication.java,检查getPackages方法:

import com.stashenergy.reactnativemsal.ReactNativeMsalPackage;

// ...

@Override
protected List<ReactPackage> getPackages() {
    return Arrays.<ReactPackage>asList(
        new MainReactPackage(),
        new ReactNativeMsalPackage() // 确认此行存在,没有遗漏
    );
}

后续排查步骤

  • 清理安卓构建缓存:在安卓目录执行./gradlew clean
  • 重新安装依赖:执行yarn install(或npm install),然后重新构建安卓应用:cd android && ./gradlew assembleDebug

内容的提问来源于stack exchange,提问作者jennirrocket

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:22:40