1. 介绍
简介
hQUIC Kit为您提供低时延,高吞吐量及安全可靠的通信能力,支持QUIC协议,提供多种网络环境敏感的拥塞处理算法,实现更快的启动速度,更强的抗丢包能力及更高的吞吐量。您可以在不稳定的移动网络环境下,使用hQUIC,提高网络通讯质量。通过示例工程和代码,您可以体验到:
- 通过hQUIC,实现与后端服务通过QUIC协议进行交互。
- 通过Android Studio集成hQUIC SDK,完成工程的编译和调试。
您将建立什么
在这个Codelab中,您将创建一个App,使用hQUIC Kit,使能Cronet并通过Cronet API实现HTTP/2和QUIC协议通讯。
您将会学到什么
- 如何配置开发环境。
- 如何调用hQUIC,发送网络请求。
2. 您需要什么
硬件要求
- 一台计算机(需要安装好Android Studio,并且可以访问互联网)。
- 预置了HMS Core(APK) 5.0.0.300或以上版本的HUAWEI手机一部,用于真机调试运行Demo。
软件要求
- JDK 1.7或以上
- Android API 19或以上
- EMUI 3.0或以上
- HMS Core(APK)5.0.0.300或以上版本
需要的知识点
- Android基础开发能力
- Java网络编程能力
3. 能力接入准备
集成HMS Core能力,需要完成以下准备工作:
- 创建Android Studio工程
- 添加Maven库及插件
- 配置项目签名
具体操作,请按照《HUAWEI HMS Core集成准备》中详细说明来完成。
4. 配置开发环境
配置HMS Core SDK的Maven仓地址
Android Studio的代码库配置在Gradle 插件7.0以下版本、7.0版本和7.1及以上版本有所不同。请根据您当前的Gradle 插件版本,选择对应的配置过程。
7.0以下版本 | 7.0版本 | 7.1及以上版本 |
7.0以下版本
a. 打开Android Studio项目级"build.gradle"文件。
b. 添加HUAWEI agcp插件以及Maven代码库。
- 在"buildscript > repositories"中配置HMS Core SDK的Maven仓地址。
- 在"allprojects > repositories"中配置HMS Core SDK的Maven仓地址。
- 如果App中添加了"agconnect-services.json"文件则需要在"buildscript > dependencies"中增加agcp插件配置。
buildscript { repositories { google() jcenter() // 配置HMS Core SDK的Maven仓地址。 maven {url 'https://developer.huawei.com/repo/'} } dependencies { ... // 增加agcp插件配置,推荐您使用最新版本的agcp插件。 classpath 'com.huawei.agconnect:agcp:1.6.0.300' } } allprojects { repositories { google() jcenter() // 配置HMS Core SDK的Maven仓地址。 maven {url 'https://developer.huawei.com/repo/'} } }7.0版本
a. 打开Android Studio项目级"build.gradle"文件。
b. 添加HUAWEI agcp插件以及Maven代码库。
- 在"buildscript > repositories"中配置HMS Core SDK的Maven仓地址。
- 如果App中添加了"agconnect-services.json"文件则需要在"buildscript > dependencies"中增加agcp插件配置。
buildscript { repositories { google() jcenter() // 配置HMS Core SDK的Maven仓地址。 maven {url 'https://developer.huawei.com/repo/'} } dependencies { ... // 增加agcp插件配置,推荐您使用最新版本的agcp插件。 classpath 'com.huawei.agconnect:agcp:1.6.0.300' } }c. 打开项目级"settings.gradle"文件,配置HMS Core SDK的Maven仓地址。
dependencyResolutionManagement { ... repositories { google() jcenter() // 配置HMS Core SDK的Maven仓地址。 maven {url 'https://developer.huawei.com/repo/'} } }7.1及以上版本
a. 打开Android Studio项目级"build.gradle"文件。
b. 如果App中添加了"agconnect-services.json"文件则需要在"buildscript > dependencies"中增加agcp插件配置。
buildscript { dependencies { ... // 增加agcp插件配置,推荐您使用最新版本的agcp插件。 classpath 'com.huawei.agconnect:agcp:1.6.0.300' } }c. 打开项目级"settings.gradle"文件,配置HMS Core SDK的Maven仓地址。
pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() // 配置HMS Core SDK的Maven仓地址。 maven { url 'https://developer.huawei.com/repo/' } } } dependencyResolutionManagement { ... repositories { google() mavenCentral() // 配置HMS Core SDK的Maven仓地址。 maven { url 'https://developer.huawei.com/repo/' } } }
添加编译依赖
- 打开应用级的"build.gradle"文件。

- 在"dependencies"中添加如下编译依赖。
dependencies { implementation 'com.huawei.hms:hquic-provider:{version}' }
同步工程
点击"File > Sync Project with Gradle Files"开始同步。
出现下图所示completed successfully即表示同步成功。
5. Demo开发
上一小节,您已经成功集成了hQUIC SDK。
本小节您将尝试编写一个Demo,学会如何使用hQUIC SDK的接口,您只需要按照下文的每一步提示,就可以边学边做,一起构建出这个Demo。
创建Service
选择"app"下的"src"目录,单击鼠标右键,创建HQUICService类。
异步初始化
异步初始化不是必需操作,如果需要提前加载Cronet服务,可以使用异步初始化接口进行预加载。
/**
* 异步初始化HQUICManager
*/
public void init(){
HQUICManager.asyncInit(context, new HQUICManager.HQUICInitCallback() {
@Override
public void onSuccess() {
Log.i(TAG, "HQUICManager asyncInit success");
}
@Override
public void onFail(Exception e) {
Log.w(TAG, "HQUICManager asyncInit fail");
}
});
}
创建Cronet引擎
/**
* 构造CronetEngine对象
*/
private CronetEngine createCronetEngine(String url) {
if (cronetEngine != null) {
return cronetEngine;
}
CronetEngine.Builder builder = new CronetEngine.Builder(context);
// 设置开启支持QUIC协议
builder.enableQuic(true);
// 添加全局支持QUIC协议的域名
builder.addQuicHint(getHost(url), DEFAULT_PORT, DEFAULT_ALTERNATEPORT);
cronetEngine = builder.build();
return cronetEngine;
}
构建Request
/**
* 构造请求对象
*/
private UrlRequest builRequest(String url, String method) {
CronetEngine cronetEngine = createCronetEngine(url);
UrlRequest.Builder requestBuilder =
cronetEngine.newUrlRequestBuilder(url, callback, executor).setHttpMethod(method);
UrlRequest request = requestBuilder.build();
return request;
}
发送请求
/**
* 发送网络请求
*/
private void sendRequest(String url, String method) {
Log.i(TAG, "callURL: url is " + url + "and method is " + method);
UrlRequest urlRequest = builRequest(url, method);
if (urlRequest != null) {
urlRequest.start();
}
}
编译,加载,调试
当您完成上述业务代码的补全后,就可以进行编译。完成编译后,生成APK,安装到测试手机上运行。
6. 成果展示
点击"hQUICTest",将会显示接口返回信息。
剩余