Android平台使用okhttp

前言

前面有写过平台应用如何使用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找不到。
几经检查,发现库中类是存在的,包名也没错。
这里写图片描述

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

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

import com.android.okhttp.OkHttpClient;

这里写图片描述

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

这里写图片描述

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

rule com.squareup.** com.android.@1
rule okio.** com.android.okhttp.okio.@1

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

阅读更多
个人分类: 技术杂记
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Android平台使用okhttp

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭