Android SDK 版本升级指南

前言

本文为HTTPDNS Android SDK用户提供详细的API升级指南,帮助您从旧版本平滑迁移到最新版本,主要包含以下内容:

  • 历史版本兼容性概览:全面梳理从1.x.2.6.x各版本间的兼容性关系,帮助您快速识别不兼容的版本升级。

  • 不兼容版本升级指南:针对每个不兼容版本SDK升级提供具体的升级步骤、代码示例和新旧版本API升级映射表。

版本兼容性概览

HTTPDNS Android SDK经历了多个重要版本的演进,以下是HTTPDNS Android SDK1.x.x2.6.x各版本间的兼容性关系。

SDK版本

兼容性

1.x.x - 2.3.x

✅ 完全兼容

2.3.5 - 2.4.0

❌ 调整整初始化接口

2.4.0 - 2.5.0

✅ 完全兼容

2.5.0 - 2.6.6

❌ 升级 API 版本(Android 4.4)

SDK版本升级到2.4.0以上指南

2.4.0版本是HTTPDNS Android SDK发展历程中的重要里程碑,进行了全面的架构重构和接口优化。这次升级旨在:

  • 统一配置模式:从分散的运行时配置改为Builder模式的统一初始化配置,解决配置时序问题,提升SDK稳定性

  • 标准化解析接口:重新设计解析接口架构,提供同步阻塞、异步、同步非阻塞三种解析模式,满足不同使用场景需求

  • 模块化设计:将日志管理等功能独立为专门的类,实现更好的职责分离和代码维护性

  • 性能优化:通过接口优化和内部实现改进,提升解析性能和资源利用效率

这是一次不兼容的重大变更,虽然变更较大,但您只需要修改应用中实际使用的接口。通过下面的升级步骤和新旧API映射表,您可以系统性地完成这次重要升级。

升级步骤详解

  1. 更新依赖版本

    dependencies {
        implementation 'com.aliyun.ams:alicloud-android-httpdns:${httpdnsVersion}'
    }
    说明

    httpdnsVersion请从Android SDK发布说明中获取。

  2. 重构初始化代码

    1. 升级前

      // 旧版本:分散式配置
      HttpDnsService httpdns = HttpDns.getService(this, "your_account_id");
      
      httpdns.setHTTPSRequestEnabled(true);
      httpdns.setExpiredIPEnabled(true);
      httpdns.setCachedIPEnabled(true);
      httpdns.setPreResolveAfterNetworkChanged(true);
      httpdns.setTimeoutInterval(3000);
      httpdns.setLogEnabled(true);
      
      httpdns.setLogger(new ILogger() {
          @Override
          public void log(String message) {
              Log.d("HTTPDNS", message);
          }
      });
      
      httpdns.setDegradationFilter(new DegradationFilter() {
              @Override
              public boolean shouldDegradeHttpDNS(String host) {
                  return "example.com".equals(host);
              }
       });
      
      // 如果使用了IP优选功能
      List<IPRankingBean> ipProbeList = new ArrayList<>();
      ipProbeList.add(new IPRankingBean("example.com", 80));
      httpdns.setIPProbeList(ipProbeList);
      
    2. 升级后

      List<IPRankingBean> ipRankingList = new ArrayList<>();
      ipRankingList.add(new IPRankingBean("example.com", 80));
      
      // 新版本:Builder模式统一配置
      InitConfig config = new InitConfig.Builder()
        .setContext(this)                           // 必须设置
        .setEnableHttps(true)                       // 替代setHTTPSRequestEnabled
        .setEnableExpiredIp(true)                   // 替代setExpiredIPEnabled
        .setEnableCacheIp(true)                     // 替代setCachedIPEnabled
        .setPreResolveAfterNetworkChanged(true)     // 替代setPreResolveAfterNetworkChanged
        .setTimeoutMillis(3000)                     // 替代setTimeoutInterval
        .setIPRankingList(ipRankingList)            // 替代setIPProbeList
        .setNotUseHttpDnsFilter(new NotUseHttpDnsFilter() {
              @Override
              public boolean notUseHttpDns(String host) {
                  return "example.com".equals(host);
              }
          })
        .buildFor("your_account_id");
       
        HttpDnsService httpdns = HttpDns.getService("your_account_id", config);
              
        // 日志管理独立
        HttpDnsLog.enable(true);                        // 替代setLogEnabled
        HttpDnsLog.setLogger(new ILogger() {            // 替代setLogger
          @Override
          public void log(String message) {
            Log.d("HTTPDNS", message);
          }
        });
      }
      }
  3. 更新解析接口

    1. 升级前

      // 同步非阻塞,ipv4,单个IP
      String ip = httpdns.getIpByHostAsync(host);
      // 同步非阻塞,ipv4,所有IP
      String[ ] ips = httpdns.getIpsByHostAsync(host);
      // 同步非阻塞,ipv6,所有IP
      String ipv6 = httpdns.getIPv6ByHostAsync(host);
      // 同步非阻塞,ipv6 和 ipv6,所有IP
      HTTPDNSResult result = httpdns.getAllByHostAsync(host);     
    2. 升级后

      // 同步非阻塞,ipv4, 所有IP
      HTTPDNSResult httpDnsResult = httpdns.getHttpDnsResultForHostSyncNonBlocking(host, RequestIpType.v4)
      String[ ] ips = httpDnsResult.getIps();
      
      // 同步非阻塞,ipv6, 所有IP
      HTTPDNSResult httpDnsResult = httpdns.getHttpDnsResultForHostSyncNonBlocking(host, RequestIpType.v6)
      String[ ] ipv6s = httpDnsResult.getIpv6s();
      
      // 同步非阻塞,ipv6 和 ipv6,所有IP
      HTTPDNSResult httpDnsResult = httpdns.getHttpDnsResultForHostSyncNonBlocking(host, RequestIpType.v6)
      String[ ] ips = httpDnsResult.getIps();
      String[ ] ipv6s = httpDnsResult.getIpv6s();
  4. 升级设置HTTPDNS黑名单接口

    1. 升级前

      InitConfig config = new InitConfig.Builder()
          .setDegradationFilter(new DegradationFilter() {
              @Override
              public boolean shouldDegradeHttpDNS(String host) {
                  return "example.com".equals(host);
              }
          })
          .build();
    2. 升级后

      InitConfig config = new InitConfig.Builder()
          .setNotUseHttpDnsFilter(new NotUseHttpDnsFilter() {
              @Override
              public boolean notUseHttpDns(String host) {
                  return "example.com".equals(host);
              }
          })
          .build();
说明

若您的应用未使用到不兼容的API,可以不用处理。

API升级映射表

接口分类

升级前

升级后

启用HTTPS请求

HttpDnsService.setHTTPSRequestEnabled(boolean)

InitConfig.Builder.setEnableHttps(boolean

启用过期IP

HttpDnsService.setExpiredIPEnabled(boolean)

InitConfig.Builder.setEnableExpiredIp(boolean

开启本地缓存

HttpDnsService.setCachedIPEnabled(boolean)

InitConfig.Builder.setEnableCacheIp(boolean

网络切换预解析

HttpDnsService.setPreResolveAfterNetworkChanged(boolean)

InitConfig.Builder.setPreResolveAfterNetworkChanged(boolean)

设置解析超时时间

HttpDnsService.setTimeoutInterval(int)

InitConfig.Builder.setTimeoutMillis(int)

启用IP优选功能

HttpDnsService.setIPRankingList(List<IPRankingBean>)

InitConfig.Builder.setIPRankingList(List<IPRankingBean>

设置自定义解析全局参数

HttpDnsService.setSdnsGlobalParams(Map<String, String>)

InitConfig.Builder.setSdnsGlobalParams(Map<String, String>)

控制日志输出开关

HttpDnsService.setLogEnabled(boolean)

HttpDnsLog.enable(boolean

设置日志回调接口

HttpDnsService.setLogger(ILogger)

HttpDnsLog.setLogger(ILogger)

启用IP优选(旧版)

HttpDnsService.setIPProbeList(List<IPRankingBean>)

InitConfig.Builder.setIPRankingList(List<IPRankingBean>)

同步非阻塞接口,IPv4解析,返回单个IP

getIpByHostAsync(String)

getHttpDnsResultForHostSyncNonBlocking(String, RequestIpType.v4)

同步非阻塞接口,IPv4解析,返回IP列表

getIpsByHostAsync(String)

getHttpDnsResultForHostSyncNonBlocking(String, RequestIpType.v4)

同步非阻塞接口,IPv6解析,返回单个IP

getIPv6ByHostAsync(String)

getHttpDnsResultForHostSyncNonBlocking(String, RequestIpType.v6)

同步非阻塞接口,IPv6解析,返回IP列表

getIPv6sByHostAsync(String)

getHttpDnsResultForHostSyncNonBlocking(String, RequestIpType.v6)

同步非阻塞,解析IPv4IPv6,返回IP列表

getAllByHostAsync(String)

getHttpDnsResultForHostSyncNonBlocking(String, RequestIpType.both)

同步非阻塞接口,自定义解析,返回Ipv4列表

getIpsByHostAsync(String, Map<String,String>, String)

getHttpDnsResultForHostSyncNonBlocking(String, RequestIpType, Map<String, String>, String)

同步非阻塞,自定义解析,返回Ipv4列表

getHttpDnsResultForHostAsync(String, Map<String, String> , String)

getHttpDnsResultForHostSyncNonBlocking(String, RequestIpType, Map<String, String>, String)

总结

HTTPDNS Android SDK经历了多个重要版本的演进,其中2.4.0存在不兼容升级,本升级指南为您提供了完整的版本迁移路径。通过遵循本指南的升级路径和最佳实践,您可以安全、高效地完成HTTPDNS Android SDK的版本升级。