解决 wire/okio 冲突

冲突说明

由于 mPaaS 使用 wire/okio 来进行 RPC 网络连接,而 okhttp 也需要引用 okio,所以当您在使用 mPaaS 的同时使用了 okhttp,那就可能出现 wire/okio 冲突。

解决方法

10.1.68 基线

移除 mPaaS 的 wire/okio 依赖,并对 移动网关 功能进行回归测试以确保功能正常。操作步骤如下:

  1. 确认 mPaaS 所使用的 wire/okio 版本。

    'com.squareup.okio:okio:1.7.0@jar'
    'com.squareup.wire:wire-lite-runtime:1.5.3.4@jar'
  2. 获取 mPaaS 第三方 SDK 的 group:artifact 信息。

    'com.alipay.android.phone.thirdparty:wire-build'
  3. 移除 mPaaS 库。

    • 如果您采用原生 AAR 方式接入 mPaaS,gradle 的依赖传递会自动使用较高的版本,无需主动移除。通常来说 mPaaS 选择使用的版本具有较高的稳定性和安全性,建议使用 mPaaS 提供的版本。如果版本不一致,请在上线前对 mPaaS 功能进行测试以保证稳定性。

    • 如果您采用 mPaaS Inside 或组件化(Portal & Bundle)方式接入 mPaaS,需执行如下操作:

      mpaascomponents {
      excludeDependencies = [
        "com.alipay.android.phone.thirdparty:wire-build"
      ]
      }
  4. 加回 wire 或 okio(使用公网的 wire/okio,原生 AAR 方式接入方式无需关注)。因为 mPaaS 把 wire 和 okio 的依赖,都写在 com.alipay.android.phone.thirdparty:wire-build  库内,所以您需要根据实际情况,选择性加回。

    • 如果只是 okio 冲突,但不存在 wire 冲突,需要加回 wire。

      implementation 'com.squareup.wire:wire-lite-runtime:1.5.3.4@jar'
    • 如果只是 wire 冲突,但不存在 okio 冲突,需要加回 okio。

      'com.squareup.okio:okio:1.7.0@jar'

10.2.3 基线

完全移除 mPaaS 的版本依赖,使用业务本身需要的版本。解决 wire/okio 冲突,需要执行以下几步操作:

  1. 去除 mPaaS 中的 wire,目前 mPaaS 内部不强依赖 wire。  

    • 原生 AAR 项目中需执行如下操作:

      configurations {
      	all*.exclude group: 'com.alipay.android.phone.thirdparty', module: 'wire-build' 
      }
    • mPaaS Inside & 组件化(Portal & Bundle)项目中需执行如下操作:

      mpaascomponents {
              excludeDependencies = [
                      "com.alipay.android.phone.thirdparty:wire-build"
                  ]
      }
  2. 所有业务方 rpc 的 pb 类继承 com.squareup.wire.Message,需要改成继承com.mpaas.thirdparty.squareup.wire.Message

    以下组件功能需要回归: