前言
本文为HTTPDNS Android SDK用户提供详细的API升级指南,帮助您从旧版本平滑迁移到最新版本,主要包含以下内容:
历史版本兼容性概览:全面梳理从
1.x.
到2.6.x
各版本间的兼容性关系,帮助您快速识别不兼容的版本升级。不兼容版本升级指南:针对每个不兼容版本SDK升级提供具体的升级步骤、代码示例和新旧版本API升级映射表。
版本兼容性概览
HTTPDNS Android SDK经历了多个重要版本的演进,以下是HTTPDNS Android SDK从1.x.x
到2.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映射表,您可以系统性地完成这次重要升级。
升级步骤详解
更新依赖版本
dependencies { implementation 'com.aliyun.ams:alicloud-android-httpdns:${httpdnsVersion}' }
说明httpdnsVersion
请从Android SDK发布说明中获取。重构初始化代码
升级前
// 旧版本:分散式配置 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);
升级后
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); } }); } }
更新解析接口
升级前
// 同步非阻塞,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);
升级后
// 同步非阻塞,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();
升级设置HTTPDNS黑名单接口
升级前
InitConfig config = new InitConfig.Builder() .setDegradationFilter(new DegradationFilter() { @Override public boolean shouldDegradeHttpDNS(String host) { return "example.com".equals(host); } }) .build();
升级后
InitConfig config = new InitConfig.Builder() .setNotUseHttpDnsFilter(new NotUseHttpDnsFilter() { @Override public boolean notUseHttpDns(String host) { return "example.com".equals(host); } }) .build();
若您的应用未使用到不兼容的API,可以不用处理。
API升级映射表
接口分类 | 升级前 | 升级后 |
启用HTTPS请求 | ||
启用过期IP | ||
开启本地缓存 | ||
网络切换预解析 | InitConfig.Builder.setPreResolveAfterNetworkChanged(boolean) | |
设置解析超时时间 | ||
启用IP优选功能 | ||
设置自定义解析全局参数 | ||
控制日志输出开关 | ||
设置日志回调接口 | ||
启用IP优选(旧版) | ||
同步非阻塞接口,IPv4解析,返回单个IP | getHttpDnsResultForHostSyncNonBlocking(String, RequestIpType.v4) | |
同步非阻塞接口,IPv4解析,返回IP列表 | getHttpDnsResultForHostSyncNonBlocking(String, RequestIpType.v4) | |
同步非阻塞接口,IPv6解析,返回单个IP | getHttpDnsResultForHostSyncNonBlocking(String, RequestIpType.v6) | |
同步非阻塞接口,IPv6解析,返回IP列表 | getHttpDnsResultForHostSyncNonBlocking(String, RequestIpType.v6) | |
同步非阻塞,解析IPv4和IPv6,返回IP列表 | getHttpDnsResultForHostSyncNonBlocking(String, RequestIpType.both) | |
同步非阻塞接口,自定义解析,返回Ipv4列表 | 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的版本升级。