{"id":21518198,"url":"https://github.com/ucloud/httpdns-sdk-android","last_synced_at":"2025-03-17T16:41:59.576Z","repository":{"id":37970277,"uuid":"491816177","full_name":"ucloud/httpdns-sdk-android","owner":"ucloud","description":null,"archived":false,"fork":false,"pushed_at":"2022-06-23T08:35:52.000Z","size":295,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-01-31T04:11:18.728Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ucloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-05-13T08:22:38.000Z","updated_at":"2022-05-13T12:11:44.000Z","dependencies_parsed_at":"2022-08-27T08:20:15.721Z","dependency_job_id":null,"html_url":"https://github.com/ucloud/httpdns-sdk-android","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ucloud%2Fhttpdns-sdk-android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ucloud%2Fhttpdns-sdk-android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ucloud%2Fhttpdns-sdk-android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ucloud%2Fhttpdns-sdk-android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ucloud","download_url":"https://codeload.github.com/ucloud/httpdns-sdk-android/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244071113,"owners_count":20393339,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-24T00:50:47.927Z","updated_at":"2025-03-17T16:41:59.540Z","avatar_url":"https://github.com/ucloud.png","language":"Java","readme":"# httpdns-sdk-android\n\nHttpDns SDK for Android\n\n## Version\n\n\u003e Version: 1.0.0 (code:1)\n\n## 兼容性\n\n* android 6.0(api23) 及以上\n* Android Studio 2021.+\n* 建议Gradle 7.+，gradle plug 7.+\n\n## QuickStart\n\n### 注册使用\n\n* 请前往[**应用管理**](https://console.ucloud.cn/httpdns/app_manage)页面，创建您的应用。并将创建成功后对应的***AppKey***和***AppSecret***记录下。\n* 在[**域名管理**](https://console.ucloud.cn/httpdns/domain_manage)页面，编辑您需要授权解析的域名列表，**不在域名管理中的域名，sdk将无法解析**。\n\n### Dependencies\n\n- 将httpdns-sdk-android.aar包放置于android studio的app项目目录里的libs目录下\n- 编辑app/build.gradle配置文件，按照如下方式配置依赖项：\n\n    ``` java\n    dependencies {\n        // Your other dependencies\n        implementation files('libs/httpdns-sdk-android.aar')\n        implementation 'com.google.code.gson:gson:2.8.8'\n    }\n    ```\n\n\u003cbr/\u003e\n\n### Usage\n\n``` xml\n\u003cuses-permission android:name=\"android.permission.INTERNET\" /\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" /\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" /\u003e\n\u003cuses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\" /\u003e\n\u003cuses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" /\u003e\n\u003cuses-permission android:name=\"android.permission.CHANGE_WIFI_MULTICAST_STATE\" /\u003e\n\n\u003capplication\n    // your application setting\n    android:networkSecurityConfig=\"@xml/network_security_config\"\u003e\n    \u003cmeta-data\n        android:name=\"httpdns-secret\"\n        android:value=\"平台分配的AppSecret\" /\u003e\n\u003c/application\u003e\n```\n\n``` java\nHttpDnsService service = HttpDns.getService(getApplicationContext(), \"平台分配的AppKey\");\nservice.addParseHostCallback(new ParseHostCallback(){\n    @Override\n    public void onParseStateChanged(ParseStatus status, String host, IpType type) {\n        \n    }\n\n    @Override\n    public void onFailed(String host, IpType type, Exception exception) {\n\n    }\n\n    @Override\n    public void onParsed(String host, IpType type, String[] ips) {\n\n    }\n});\n\nservice.register(new HttpDnsConfig(), new RegisterCallback() {\n            @Override\n            public void onRegister(boolean success, String message) {\n                if (success) {\n                    List\u003cHost\u003e hosts = new ArrayList\u003c\u003e();\n                    hosts.add(new Host(\"需要解析的域名\"));\n                    // 预解析\n                    service.setPreParseHosts(hosts);\n                    // 手动触发解析\n                    String[] results = service.parseIpsAsync(\"需要解析的域名\");\n                }\n            }\n        });\n```\n\n\u003cbr/\u003e\n\n## API\n\n### HttpDns\n\n\u003e SDK版本信息\n\n``` java\nstatic final int VERSION_CODE        // 版本数值编号（递增）\nstatic final String VERSION_NAME     // 版本号名称\n```\n\n\u003e 获取HttpDnsService\n\n``` java\n/**\n * 获取HttpDnsService实例\n * 以该方法获取HttpDnsService时，AppSecret需要配置在manifest.xml \u003capplication\u003e中的\u003cmeta-data\u003e里\n *\n * @param applicationContext\n * @param appKey             平台分配的appKey\n * @return\n */\nstatic HttpDnsService getService(@NonNull Context applicationContext, @NonNull String appKey)\n```\n\n\u003e 获取HttpDnsService\n\n``` java\n/**\n * 获取HttpDnsService实例\n *\n * @param applicationContext\n * @param appKey             平台分配的appKey\n * @param appSecret          平台分配的appSecret\n * @return\n */\nstatic HttpDnsService getService(@NonNull Context applicationContext, @NonNull String appKey, @NonNull String appSecret)\n```\n\n\u003cbr/\u003e\n\n### HttpDnsService\n\n\u003e 注册HttpDnsService\n\n``` java\n/**\n * 注册HttpDnsService\n *\n * @param config           HttpDnsConfig配置项\n * @param serviceUrl       管理平台服务接口地址\n * @param registerCallback 注册结果回调\n */\nvoid register(HttpDnsConfig config, @NonNull String serviceUrl, @NonNull RegisterCallback registerCallback);\n```\n\n\u003cbr\u003e\n\n\u003e 注册私有化部署HttpDnsService\n\n``` java\n/**\n * 注册HttpDnsService\n *\n * @param config           HttpDnsConfig配置项\n * @param serviceUrl       管理平台服务接口地址\n * @param registerCallback 注册结果回调\n */\nvoid register(HttpDnsConfig config, @NonNull String serviceUrl, @NonNull RegisterCallback registerCallback);\n```\n\n\u003cbr\u003e\n\n\u003e 添加解析回调\n\n``` java\n/**\n * 添加解析回调\n * 添加多个解析回调后，每个回调都返回解析结果\n *\n * @param callback\n */\nvoid addParseHostCallback(ParseHostCallback callback);\n```\n\n\u003cbr\u003e\n\n\u003e 移除解析回调\n\n``` java\n/**\n * 移除解析回调\n *\n * @param callback\n */\nvoid removeParseHostCallback(ParseHostCallback callback);\n```\n\n\u003cbr\u003e\n\n\u003e 设置预解析域名列表\n\n**【注意！】:若不启用缓存，则该接口不执行任何操作！**\n\n``` java\n/**\n * 设置预解析域名列表\n * 设置完成后将会后台自动开始解析，解析完成后通过{@link ParseHostCallback}返回结果。\n * 若启用缓存，则后续手动解析域名时，优先检查缓存\n *【注意！】:若不启用缓存，则该接口不执行任何操作！\n *\n * @param hosts 需预解析的域名列表\n */\nvoid setPreParseHosts(List\u003cHost\u003e hosts);\n``` \n\n\u003cbr\u003e\n\n\u003e 异步解析域名，获取IPv4解析结果列表\n\n``` java\n/**\n * 异步解析域名，获取IPv4解析结果列表\n * 若启用缓存，先查询缓存，若存在则返回，若不存在则返回null，并进行异步解析，解析完成后通过{@link ParseHostCallback}返回结果\n *\n * @param host 需解析的域名\n * @return 返回IP的String数组, 如果没得到解析结果, 则数组的长度为0\n */\nString[] parseIpsAsync(String host);\n``` \n\n\u003cbr\u003e\n\n\u003e 异步解析域名，获取IPv6解析结果列表\n\n``` java\n/**\n * 异步解析域名，获取IPv6解析结果列表\n * 若启用缓存，先查询缓存，若存在则返回，若不存在则返回null，并进行异步解析，解析完成后通过{@link ParseHostCallback}返回结果\n *\n * @param host 需解析的域名\n * @return 返回IPv6的String数组, 如果没得到解析结果, 则数组的长度为0\n */\nString[] parseIPv6sAsync(String host);\n``` \n\n\u003cbr\u003e\n\n\u003e 设置是否允许返回超时的解析结果\n\n``` java\n/**\n * 设置是否允许返回超时的解析结果\n *\n * @param enable\n */\nvoid setExpiredResultEnabled(boolean enable);\n``` \n\n\u003cbr\u003e\n\n\u003e 设置是否允许启用缓存\n\n``` java\n/**\n * 设置是否允许启用缓存\n *\n * @param enable\n */\nvoid setCachedResultEnabled(boolean enable);\n``` \n\n\u003cbr\u003e\n\n\u003e 设置是否允许启用缓存，以及是否在缓存加载过后自动清除\n\n``` java\n/**\n * 设置是否允许启用缓存，以及是否在缓存加载过后自动清除\n *\n * @param enable\n * @param autoCleanCacheAfterLoad 缓存加载后是否立即清除\n */\nvoid setCachedResultEnabled(boolean enable, boolean autoCleanCacheAfterLoad);\n``` \n\n\u003cbr\u003e\n\n\u003e 设置降级策略\n\n``` java\n/**\n * 设置降级策略\n * 用户可定制规则降级为原生DNS解析方式\n *\n * @param filter 降级规则回调 {@link DegradationFilter}\n */\nvoid setDegradationFilter(DegradationFilter filter);\n``` \n\n\u003cbr\u003e\n\n\u003e 设置网络切换时是否自动刷新所有域名解析结果\n\n``` java\n/**\n * 设置网络切换时是否自动刷新所有域名解析结果\n *\n * @param enable\n */\nvoid setPreParseAfterNetworkChanged(boolean enable);\n``` \n\n\u003cbr\u003e\n\n\u003e 设置请求超时时间\n\n``` java\n/**\n * 设置请求超时时间\n * default 30_000 ms\n *\n * @param timeout\n */\nvoid setRequestTimeout(int timeout);\n```\n\n\u003cbr\u003e\n\n### DegradationFilter\n\n\u003e 是否需要降级解析\n\n``` java\n/**\n * 是否需要降级解析\n * 如果降级，则域名将被直接返回作为解析结果\n *\n * @param host 域名\n * @return true: 降级解析 false: 进行HttpDns解析\n */\nboolean shouldDegradeHttpDns(String host);\n```\n\n\u003cbr\u003e\n\n``` java\n/**\n * 清空缓存数据\n */\nvoid clearCache();\n```\n\n\u003cbr/\u003e\n\n### HttpDnsConfig\n\n``` java\npublic class HttpDnsConfig {\n    /**\n     * 构造方法\n     * 可配置本地持久化方案\n     *\n     * @param repoType 本地持久化方案\n     */\n    public HttpDnsConfig(RepositoryType repoType) {\n        ...\n    }\n\n    /**\n     * 构造方法\n     * 默认不启用本地持久化\n     */\n    public HttpDnsConfig() {\n        ...\n    }\n\n    public HttpDnsConfig setEnableParseWhenNetworkChanged(boolean enableParseWhenNetworkChanged) {\n        ...\n    }\n\n    public HttpDnsConfig setEnableExpiredResult(boolean enableExpiredResult) {\n        ...\n    }\n\n    public HttpDnsConfig setEnableCachedResult(boolean enableCachedResult) {\n        ...\n    }\n\n    public HttpDnsConfig setEnableAutoCleanCacheAfterLoad(boolean enableAutoCleanCacheAfterLoad) {\n        ...\n    }\n\n    public HttpDnsConfig setRequestTimeout(int requestTimeout) {\n        ...\n    }\n}\n```\n\n\u003cbr/\u003e\n\n### RepositoryType\n\n``` java\npublic enum RepositoryType {\n    /**\n     * 不启用本地持久化\n     */\n    REPO_UNABLE, \n    /**\n     * 使用SharedPerferences作为本地持久化\n     */\n    REPO_SP\n}\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fucloud%2Fhttpdns-sdk-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fucloud%2Fhttpdns-sdk-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fucloud%2Fhttpdns-sdk-android/lists"}