欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android平台使用okhttp

程序员文章站 2022-04-14 09:32:21
...

前言

前面有写过平台应用如何使用RxAndroid,那肯定也少不了Okhttp了。当然我们还可以用之前提到的提取okhttp jar包的方法在平台应用上使用Okhttp。

但对于Okhttp,其实我们可以换另外一种使用方式。

因为在Android的M和N平台中其实已经有Okhttp了,在如下目录

/external/okhttp

OkHttp用起来

那对于这个external下面的OkHttp库,应该怎么用呢?

其实很简单!!!
我们只需要在Android.mk文件中将OkHttp模块指定给LOCAL_JAVA_LIBRARIES就行了

LOCAL_JAVA_LIBRARIES := okhttp

编译,失败

The import com.squareup cannot be resolved

寻找解决办法

这是咋回事呢?
文件中的import语句导入的com.squareup.okhttp.OkHttpClient找不到。
几经检查,发现库中类是存在的,包名也没错。
Android平台使用okhttp

这头没有进展,于是想查找一下系统中有没有其他模块使用了该库。可以借鉴其的用法。
使用OpenGrok查找系统中所有文件出现过关键字OkHttpClient,说明其有可能使用了这个库。

于是找到framework下的一个Network.java使用了Okhttp,但其import语句是这样的:

import com.android.okhttp.OkHttpClient;

Android平台使用okhttp

OkHttpClient的包名变成了com.android.okhttp!!!

先不论这是怎么一回事,在自己的模块中也将所有的com.squareup.okhttp替换成com.android.okhttp试试能不能解决问题,结论是肯定的。编译成功了!

得出结论

除了在Android.mk中引入okhttp库外,我们使用okhttp下的类时需要引入包名“com.android.okhttp”而不是“com.squareup.okhttp”!

后记

最后在/external/okhttp/okhttp下多番查看,查找到了okhttp包名改变的原因,因为在其Android.mk文件中引入了一条规则:

LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt

Android平台使用okhttp

而jarjar-rules.txt文件有如下内容:

rule com.squareup.** aaa@qq.com
rule okio.** aaa@qq.com

可以看出,这个规则是在做包名映射。于是,水落石出!
同时,我们以后也可以使用该方法做包名映射。
收获不错!