我花费了很多时间让OkHttp3支持HTTP/2,但是我已经没有更多的想法了。
如何检查是否可用:
在access.log中检查连接到服务器的客户端使用哪种协议:
浏览器: "GET /favicon.ico HTTP/2.0" 200 382 https://server.com "" Mozilla / 5.0 (X11; Linux x86_64)"
Android客户端: 'GET /api/v2/ ... HTTP/1.1 "200 3717" - "" Android ..."
我使用的工具:
服务器版本为nginx/1.10.2
和https
JAVA_VERSION="1.8.0_76"
Android版本="6.0.1"
build.gradle
compile 'com.facebook.stetho:stetho-okhttp3:1.4.2'
compile 'com.squareup.okhttp3:okhttp:3.5.0'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
...
如何使用:
client = configureClient(new OkHttpClient().newBuilder())
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
.readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
.protocols(Arrays.asList(Protocol.HTTP_2, Protocol.SPDY_3, Protocol.HTTP_1_1))
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
...
}
})
.addNetworkInterceptor(new StethoInterceptor())
.build();
我的尝试
我发现需要将Jetty ALPN jar添加到我的引导类路径中。 因此,我在我的build.gradle(Project)文件中添加了以下代码行:
allprojects {
...
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs.add('-Xbootclasspath/p:/home/USER_NAME/Android/alpn-boot/alpn-boot-8.1.2.v20141202.jar')
}
}
我尝试了所有来自以下链接的alpn-boot版本: https://mvnrepository.com/artifact/org.mortbay.jetty.alpn/alpn-boot 但是没有成功,甚至出现错误信息。
我还尝试在build.gradle中添加
compile("org.mortbay.jetty.alpn:alpn-boot:VERSION_NUMBER")
,但是在版本7*中仍然没有错误并且不起作用。在版本8*中构建应用程序时会出现以下错误:Error:Error converting bytecode to dex:
Cause: Dex cannot parse version 52 byte code.
This is caused by library dependencies that have been compiled using Java 8 or above.
If you are using the 'java' gradle plugin in a library submodule add
targetCompatibility = '1.7'
sourceCompatibility = '1.7'
to that submodule's build.gradle file.
在添加targetCompatibility = '1.7'和sourceCompatibility = '1.7'后仍然没有任何变化。
非常感谢您的帮助。