如何修复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库:
- 打开安卓根目录下的
build.gradle(注意是项目根目录的,不是app模块内的) - 在
allprojects的repositories块中添加微软Duo SDK仓库:
allprojects { repositories { // 保留原有仓库(如google()、jcenter()等) maven { url "https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1" } } }
- 还原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
相关产品推荐
相关产品推荐

