You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Kotlin Multiplatform项目构建失败:代理环境下无法解析com.github.webassembly:binaryen依赖(SSL握手异常)

Kotlin Multiplatform项目构建失败:代理环境下无法解析com.github.webassembly:binaryen依赖(SSL握手异常)

看起来你遇到的是企业代理环境里的典型问题——普通Gradle依赖能正常走代理,但像binaryen这类工具类的依赖(由kotlinBinaryenSetup任务负责拉取),因为JVM没信任代理的SSL证书,导致SSL握手失败,进而触发PKIX路径构建错误。

给你几个针对性的解决办法,按推荐程度排序:

1. 导入企业代理证书到Gradle使用的JVM证书库(最彻底)

企业代理通常会替换HTTPS请求的证书,而Gradle用的JVM默认不信任这个代理证书,所以得手动导入:

  • 第一步:找到Gradle使用的JRE路径。如果是用Android Studio自带的JDK,MacOS路径大概是/Applications/Android Studio.app/Contents/jbr/Contents/Home,Windows则是C:\Program Files\Android\Android Studio\jbr
  • 第二步:用keytool命令导入代理证书(假设你已经导出了代理的根证书为proxy-cert.cer):
    # MacOS/Linux(需要sudo获取权限)
    sudo keytool -importcert -file proxy-cert.cer -keystore $JRE_HOME/lib/security/cacerts -alias proxy-ssl-cert
    
    # Windows(以管理员身份运行命令提示符)
    keytool -importcert -file proxy-cert.cer -keystore "%JRE_HOME%\lib\security\cacerts" -alias proxy-ssl-cert
    
    默认证书库密码是changeit,按提示输入即可完成导入。

2. 确保Gradle代理配置覆盖所有下载场景

有时候全局代理配置没覆盖到工具类依赖的下载任务,你可以在项目根目录的gradle.properties里补全完整的代理配置:

# HTTP代理
systemProp.http.proxyHost=你的代理IP或域名
systemProp.http.proxyPort=代理端口
# HTTPS代理
systemProp.https.proxyHost=你的代理IP或域名
systemProp.https.proxyPort=代理端口
# 若代理需要认证
systemProp.http.proxyUser=你的代理账号
systemProp.http.proxyPassword=你的代理密码
systemProp.https.proxyUser=你的代理账号
systemProp.https.proxyPassword=你的代理密码
# 显式指定证书库路径(替换成你实际的JRE路径)
systemProp.javax.net.ssl.trustStore=/Applications/Android Studio.app/Contents/jbr/Contents/Home/lib/security/cacerts
systemProp.javax.net.ssl.trustStorePassword=changeit

3. 手动下载binaryen包,跳过自动拉取(快速临时解决)

既然你已经能通过浏览器/curl下载到binaryen的压缩包,直接手动配置本地路径就行:

  • 下载对应平台的包(比如你这里是binaryen-version_118-x86_64-macos.tar.gz),解压到本地某个目录,比如~/tools/binaryen-118
  • 在项目根目录的build.gradle.kts里添加配置,让KMP插件使用本地的binaryen:
    import org.jetbrains.kotlin.gradle.targets.js.binaryen.BinaryenRootExtension
    
    rootProject.extensions.configure<BinaryenRootExtension> {
        binaryenPath.set(file("~/tools/binaryen-118")) // 替换成你的实际解压路径
        binaryenDownload.set(false) // 禁用自动下载
    }
    

这样再重新执行构建,应该就能绕过这个SSL握手的问题了。

备注:内容来源于stack exchange,提问作者Steve Novack

火山引擎 最新活动