ReactNative安卓端报错Could not find play-services-basement.aar

同事在项目中遇到Android端编译错误,源于第三方库react-native-device-info。该库依赖于Google服务,通过查阅GitHub issues找到解决方案。

报错.png
这两天同事在写项目的过程中,启动Android端进行编译报了如上的错误,从报错中可以知道,是因为第三方库react-native-device-info引起的,从其源码中可以看到:
image.png
它的安卓部分依赖了google的服务,为啥要依赖这个服务呢?不是特别清楚。既然罪魁祸首是这个库,就去github上看看她的issues吧。
https://github.com/rebeccahughes/react-native-device-info/issues/414
最终我们找到解决方案,
image.png

Failed to create module context. java.io.IOException: Content provider client is null at m2.cv.a(:com.google.android.gms.dynamite_dynamiteloader@252635035@25.26.35 (260400-0):1094) at com.google.android.gms.dynamiteloader.DynamiteLoaderV2.loadModule2NoCrashUtils(:com.google.android.gms.dynamite_dynamiteloader@252635035@25.26.35 (260400-0):40) at m2.cj.a(:com.google.android.gms.dynamite_dynamiteloader@252635035@25.26.35 (260400-0):73) at m2.l.onTransact(:com.google.android.gms.dynamite_dynamiteloader@252635035@25.26.35 (260400-0):21) at android.os.Binder.transact(Binder.java:1358) at com.google.android.gms.internal.common.zza.zzB(com.google.android.gms:play-services-basement@@18.3.0:2) at com.google.android.gms.dynamite.zzr.zzf(com.google.android.gms:play-services-basement@@18.3.0:6) at com.google.android.gms.dynamite.DynamiteModule.load(com.google.android.gms:play-services-basement@@18.3.0:46) at com.google.android.gms.internal.measurement.zzee.zzf(com.google.android.gms:play-services-measurement-sdk-api@@20.0.0:2) at com.google.android.gms.internal.measurement.zzcx.zza(com.google.android.gms:play-services-measurement-sdk-api@@20.0.0:3) at com.google.android.gms.internal.measurement.zzdt.run(com.google.android.gms:play-services-measurement-sdk-api@@20.0.0:2) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012)
最新发布
12-09
你遇到的错误日志: ``` Failed to create module context. java.io.IOException: Content provider client is null ``` 表明在尝试加载某个 **Google Play 服务模块(Dynamite Module)** 时,系统无法获取有效的 `ContentProviderClient`,从而导致模块加载失败。 --- ### 🔍 问题分析: 这个异常通常出现在使用 Google Play 服务的组件(如 Firebase、Google Maps、Ads、Measurement 等)尝试通过 **DynamiteLoader** 动态加载模块时,但在某些设备或环境中: 1. **Google Play 服务未安装或版本过旧** 2. **设备不支持 Google Play 服务(如部分华为设备、模拟器等)** 3. **ContentProvider 被系统限制访问(权限问题)** 4. **多进程或并发加载模块时发生竞态条件** 5. **APK 签名或设备 Root 等安全限制导致加载失败** --- ### ✅ 解决方案: #### 1. **确保设备安装了 Google Play 服务** - 如果是实体设备,检查是否安装了 Google Play Store 和 Play 服务。 - 如果是模拟器,请使用 **Google APIs** 镜像(而非 Google Play 镜像可能也有问题)。 - 在代码中添加如下判断来检测 Play 服务是否可用: ```java GoogleApiAvailability googleApi = GoogleApiAvailability.getInstance(); int result = googleApi.isGooglePlayServicesAvailable(context); if (result != ConnectionResult.SUCCESS) { // 提示用户安装或更新 Google Play 服务 } ``` #### 2. **使用 `DynamiteModule` 前进行异常捕获** - 如果你直接使用了 Dynamite 模块(如某些低层 Firebase 或 Play 服务 API),请确保捕获异常: ```java try { DynamiteModule module = DynamiteModule.load(context, DynamiteModule.DESCRIPTOR); } catch (Exception e) { Log.e("DynamiteError", "Failed to load module", e); } ``` #### 3. **使用兼容性更强的依赖库版本** - 某些新版本的 Play 服务或 Firebase 库依赖较新的 Google Play 服务,可能导致老设备兼容性问题。 - 可尝试降级到更稳定的版本(如 `20.0.0` 或 `21.0.0`)。 #### 4. **避免在子线程中并发加载多个 Dynamite 模块** - 有时并发加载多个模块会引发竞争条件,建议串行加载或使用同步机制。 #### 5. **使用替代方案(适用于无 Google Play 服务的设备)** - 如果你的应用需要支持无 Google Play 服务的市场(如中国、华为设备),考虑使用替代服务: - 地图:使用高德地图、百度地图等替代 Google Maps。 - 推送:使用华为 Push、小米 Push 等替代 Firebase Cloud Messaging。 --- ### 🛠 示例:安全加载 Dynamite 模块 ```java try { DynamiteModule dynamiteModule = DynamiteModule.load(context, DynamiteModule.DESCRIPTOR); // 使用模块 } catch (Exception e) { Log.e("DynamiteLoad", "Error loading module", e); // 提示用户或降级处理 } ``` --- ### 📌 总结: | 问题原因 | 解决方式 | |----------|----------| | Google Play 服务缺失 | 确保设备安装 Google Play 服务 | | 设备不支持 | 使用替代 SDK | | ContentProvider 获取失败 | 异常捕获 + 降级处理 | | 多线程并发加载 | 避免并发加载,使用同步机制 | | 依赖版本过高 | 使用稳定版本依赖 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值