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

如何让Volley库在Android API 26及更高版本正常运行

Volley在API26+版本适配方案

问题核心

应用仅在API26(Android 8)及以下能通过Volley正常登录,API27+(含Android9)设备完全无法登录,HTTP/HTTPS请求均报错。

适配步骤

1. 解除Android9+的明文HTTP限制

Android 9(API28)开始默认禁止明文网络请求,若登录接口为HTTP协议或HTTPS配置存在问题,会直接触发请求失败。

  • 快速解决:在AndroidManifest.xml的<application>标签中添加属性:
    android:usesCleartextTraffic="true"
    
  • 规范方案(推荐):创建网络安全配置文件
    1. 在res/xml下新建network_security_config.xml:
      <?xml version="1.0" encoding="utf-8"?>
      <network-security-config>
          <base-config cleartextTrafficPermitted="true">
              <trust-anchors>
                  <certificates src="system" />
              </trust-anchors>
          </base-config>
      </network-security-config>
      
    2. 在AndroidManifest.xml的<application>标签中引用:
      android:networkSecurityConfig="@xml/network_security_config"
      

2. 更新Volley到最新稳定版本

旧版Volley对高API版本的网络适配存在缺陷,更新到最新版可解决大部分兼容性问题:
修改项目Module级build.gradle的依赖:

dependencies {
    // 替换为最新稳定版,当前最新为1.2.1
    implementation 'com.android.volley:volley:1.2.1'
}

3. 适配TLS 1.2+协议

部分后端仅支持旧版TLS协议(如TLS1.0/1.1),而Android9+默认优先使用TLS1.2+,会导致SSL握手失败。需强制Volley启用TLS1.2:
创建自定义SSLSocketFactory工具类:

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;

public class SSLUtils {
    public static SSLSocketFactory getSSLSocketFactory() {
        try {
            SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
            sslContext.init(null, new TrustManager[]{new X509TrustManager() {
                @Override
                public void checkClientTrusted(X509Certificate[] chain, String authType) {}

                @Override
                public void checkServerTrusted(X509Certificate[] chain, String authType) {}

                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }
            }}, new SecureRandom());
            return sslContext.getSocketFactory();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

在Volley请求中配置:

RequestQueue queue = Volley.newRequestQueue(context);
StringRequest request = new StringRequest(Request.Method.POST, url,
        response -> { /* 处理成功响应 */ },
        error -> { /* 处理错误 */ }) {
    @Override
    protected VolleyError parseNetworkError(VolleyError volleyError) {
        return super.parseNetworkError(volleyError);
    }
};

// 配置SSLSocketFactory
HurlStack hurlStack = new HurlStack(null, SSLUtils.getSSLSocketFactory());
queue = Volley.newRequestQueue(context, hurlStack);
queue.add(request);

4. 检查build.gradle配置

确保编译和目标SDK版本适配高版本:

android {
    compileSdkVersion 33 // 至少设置为API26+,推荐使用最新稳定版
    defaultConfig {
        applicationId "com.your.app"
        minSdkVersion 21 // 根据你的需求调整
        targetSdkVersion 33 // 与compileSdkVersion保持一致或相近
        versionCode 1
        versionName "1.0"
    }
}

验证流程

  1. 先更新Volley版本并配置明文流量,测试Android9+设备是否能正常登录
  2. 若仍报错,添加TLS1.2适配代码
  3. 最后确认build.gradle的SDK版本配置正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:11:05