Android 必知必会 - 自定义 OkHttp 、OkIo 的包名

在某些特殊的情况下,需要对项目中使用的 okhttp 的包名进行修改,避免冲突或者版本不一致导致找不到类的问题。

环境:

  • macOS 10.12.6
  • IDEA CE 2016.3.5
  • OkHttp 3.8.1 源码
  • OkIo 1.13.0 源码

前置知识点

在 pom 文件中引用本地 jar 包

在对应的 module 下新建目录 lib,并拷贝 xxx. jar 包到 lib 目录后:

引用的方法如下:

1
2
3
4
5
6
7
8
<dependency>
<groupId>com.xxx.xxx</groupId>
<artifactId>xxxx</artifactId>
<version>x.x.x</version>
<type>jar</type>
<scope>system</scope>
<systemPath>${basedir}/lib/xxx.jar</systemPath>
</dependency>

操作流程

修改流程:

  • 确定使用的 OkHttp 版本 ,在 release 里下载对应的源码;
  • 确定上述 OkHttp 版本对应的 OkIo 的版本,在 release 里下载对应的源码;
  • 在 IDEA 里打开 okio 工程
    • 修改 okio module 包名(abc.okio)
    • build 检查有无错误,并排除错误
    • 在 maven 任务里点击 package,生成 okio-x.x.x.jar
  • 在 IDEA 里打开 okhttp 工程,
    • 在 maven 任务里点击 okhttp module 的 compile 编译(必要步骤,不先执行此步骤会找不到某个类)
    • 修改 okhttp module 的 包名
    • 修改 okhttp module 的 java-templates 的包名,其下的 Version.javapackage 可能需要手动改
    • build 检查有无错误,并排除错误
    • 修改 okhttp module 的 pom 文件,并把 okio-x.x.x.jar 放入项目里,进行本地引用(参见前置知识)
    • 使用批量搜索替换,把 import okio 换成 import abc.okio 即可
    • 进行 build 检查是否有包引用错误
    • 最后点 maven 任务里的 package 打包成 okhttp-x.x.x.jar
  • 在项目中使用:
    • okio-x.x.x.jarokhttp-x.x.x.jar 放入需要使用的项目中使用即可。
    • 引用库的类时,使用的包名是修改后包名

注意:

  1. 源码里有多个 module,注意分辨目标 module
  2. OkHttp 版本有专门对应的 OkIo 版本,可通过官方 更新日志 查询
  3. 使用 IDEA 的 build 原因是:可以直接点击错误日志跳转到有错误的代码行

链接和参考:

PS:你可以通过下面的方式和我联系