前言
本文為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的版本升級。