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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:44:52