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

升级AGP与Gradle后出现google-http-client的TrustAllX509TrustManager问题

解决方案

优先方案:升级依赖版本

旧版本的Google API客户端库包含了不安全的TrustAllX509TrustManager实现,新版本已经修复了这个问题。直接更新你的依赖到最新稳定版:

api("com.google.api-client:google-api-client-android:2.4.0") {
    exclude group: 'org.apache.httpcomponents'
}
api("com.google.apis:google-api-services-calendar:v3-rev20240409-2.0.0") {
    exclude group: 'org.apache.httpcomponents'
}

更新后重新同步Gradle,Lint错误应该会自动消失。

临时方案:忽略Lint检查(不推荐)

如果暂时无法升级依赖,可以在模块的build.gradle中添加Lint配置,禁用该规则检查:

android {
    lintOptions {
        disable 'TrustAllX509TrustManager'
    }
}

⚠️ 注意:这个方案只是隐藏错误,并没有解决证书信任的安全问题,正式环境不建议使用。

进阶方案:自定义安全的TrustManager

如果必须保留旧依赖版本,可通过自定义SSLContext替换默认的不安全实现:

// 创建安全的TrustManager数组
TrustManager[] trustManagers = new TrustManager[]{
    new X509TrustManager() {
        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            // 按需实现客户端证书验证逻辑
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            // 使用系统默认证书验证逻辑,避免信任任意证书
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            tmf.init((KeyStore) null);
            for (TrustManager tm : tmf.getTrustManagers()) {
                if (tm instanceof X509TrustManager) {
                    ((X509TrustManager) tm).checkServerTrusted(chain, authType);
                    return;
                }
            }
            throw new CertificateException("No valid X509TrustManager found");
        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
        }
    }
};

// 初始化SSLContext
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagers, new SecureRandom());

// 配置Google API客户端使用自定义SSLContext
HttpTransport httpTransport = new NetHttpTransport.Builder()
    .setSslSocketFactory(sslContext.getSocketFactory())
    .build();

com.google.api.services.calendar.Calendar service = new com.google.api.services.calendar.Calendar.Builder(httpTransport, JacksonFactory.getDefaultInstance(), credential)
    .setApplicationName("Your App Name")
    .build();

这个方案彻底替换了不安全的证书信任逻辑,保证网络请求的安全性。

内容的提问来源于stack exchange,提问作者Haniyeh Khaksar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:57:16