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.** aaa@qq.com
rule okio.** aaa@qq.com
可以看出,这个规则是在做包名映射。于是,水落石出!
同时,我们以后也可以使用该方法做包名映射。
收获不错!
推荐阅读
-
Android使用CrashHandler来获取应用的crash信息的方法
-
Android使用OkHttp请求自签名的https网站的示例
-
android中okhttp实现断点上传示例
-
Android 使用ViewPager实现左右循环滑动及轮播效果
-
Android编程使用ListView实现数据列表显示的方法
-
Android编程使用内容提供者方式(ContentProvider)进行存储的方法
-
Android编程使用HTTP协议与TCP协议实现上传文件的方法
-
Android录音--AudioRecord、MediaRecorder的使用
-
Android中bindService基本使用方法概述
-
Android中startService基本使用方法概述