Expo Gradle插件SSL握手异常:无法从repo.expo.dev下载依赖
Expo Gradle插件下载SSL握手异常问题
问题描述
构建项目时,下载expo-module-gradle-plugin依赖触发SSL握手异常,提示无法找到有效的证书路径。已尝试手动导入Expo仓库SSL证书至JDK信任库、更新所有Expo相关依赖及Gradle/JDK版本、清理Gradle和npm缓存,但问题仍未解决。
错误日志
Could not get resource 'https://repo.expo.dev/maven/expo/modules/expo-module-gradle-plugin/1.0.0/expo-module-gradle-plugin-1.0.0.pom'. Could not GET 'https://repo.expo.dev/maven/expo/modules/expo-module-gradle-plugin/1.0.0/expo-module-gradle-plugin-1.0.0.pom'. Got SSL handshake exception during request. PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
当前Android构建配置(android/build.gradle)
//android/build.gradle buildscript { ext { buildToolsVersion = '35.0.0' minSdkVersion = 24 compileSdkVersion = 35 targetSdkVersion = 34 kotlinVersion = '1.9.25' ndkVersion = "26.1.10909125" } repositories { google() mavenCentral() maven { url 'https://jitpack.io' } maven { url 'https://repo.expo.dev/maven' allowInsecureProtocol = true } } dependencies { classpath 'com.android.tools.build:gradle:8.13.0' classpath 'com.facebook.react:react-native-gradle-plugin' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" classpath 'expo.modules:expo-module-gradle-plugin:1.0.0' } } allprojects { repositories { google() mavenCentral() maven { url 'https://jitpack.io' } maven { url 'https://repo.expo.dev/maven' allowInsecureProtocol = true } maven { url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) } maven { url(new File(['node', '--print', "require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), '../dist')) } } } apply plugin: 'com.facebook.react.rootproject' allprojects { repositories { maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) } maven { // Android JSC is installed from npm url(new File(['node', '--print', "require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), '../dist')) } google() mavenCentral() maven { url 'https://www.jitpack.io' } } }
已尝试的解决方案
- 手动将Expo仓库SSL证书导入JDK cacerts信任库
- 清理Gradle和npm缓存并重新构建
- 更新所有Expo依赖、Gradle及JDK至最新版本
针对性解决建议
1. 确认证书导入的JDK与项目使用的一致
很多时候会出现证书导入到系统JDK,但项目实际使用Android Studio内置JDK的情况:
- 打开Android Studio → File → Project Structure → SDK Location,查看JDK位置
- 使用该JDK的
keytool重新导入证书,命令示例:keytool -importcert -file /path/to/expo-repo.crt -keystore /path/to/jdk/jre/lib/security/cacerts -alias expo-repo - 输入默认密码
changeit完成导入,重启Android Studio
2. 合并重复的allprojects配置
当前配置中重复定义了两个allprojects块,可能导致仓库配置冲突,合并为一个:
allprojects { repositories { // React Native 相关仓库 maven { url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) } maven { url(new File(['node', '--print', "require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), '../dist')) } // 公共仓库 google() mavenCentral() maven { url 'https://jitpack.io' } // Expo 仓库 maven { url 'https://repo.expo.dev/maven' allowInsecureProtocol = true } } }
3. 强制Gradle使用指定JDK
在项目根目录的gradle.properties中添加以下配置,确保Gradle使用导入证书的JDK:
org.gradle.java.home=/path/to/your/jdk
4. 临时跳过SSL验证(仅用于排查)
如果上述方法仍无效,可临时配置Gradle信任所有SSL证书(生产环境不推荐):
maven { url 'https://repo.expo.dev/maven' ssl { trustAll = true } }
5. 检查网络环境
- 确认本地代理、防火墙未拦截
https://repo.expo.dev的请求 - 尝试切换至手机热点等其他网络环境测试
内容的提问来源于stack exchange,提问作者Jobean
相关产品推荐
相关产品推荐

