使用不同版本的MotionLayout和ConstraintLayout依赖项

问题描述 投票:0回答:2

我已经使用1.1.2版的ConstraintLayout已有相当一段时间了,并且运行良好。然后出现了新的MotionLayout,我想为什么不尝试一下。

而且一切似乎都很好。所以我在生产中使用它时犯了一个错误。不久之后,我注意到一些错误报告,指出ConstraintLayout工作不正常。但是已经有一些依赖MotionLayout的屏幕,要删除它,就需要大量的重构。

我可以在同一项目上使用MotionLayout(v2.0.0-alpha-05 / beta-02)和ConstraintLayout(v1.1.3),以便需要MotionLayout的屏幕具有v2.0.0,仅具有ConstraintLayout的屏幕具有v1 1.3?是否有一些打包工具可将MotionLayout移至其他包?我尝试使用shadowJar gradle插件,但失败了,因为MotionLayout是* .aar依赖项,而不是* .jar。

android android-layout kotlin android-gradle android-motionlayout
2个回答
0
投票

我面临类似的问题-避免类冲突的唯一可能方法是用不同的包名称重建依赖项之一。可以通过下载其中一个库的代码并在PC上手动重新编译来完成。例如来自here

但是我建议您使用ConstraintLayout库版本2.0

implementation 'com.android.support.constraint:constraint-layout:2.0.0-beta2'

implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'

如果使用的是AndroidX。

同时包含ConstraintLayoutMotionLayout,因此它们不会在您的代码中产生冲突。不过,您当前的代码可能需要一些小的调整。

希望有帮助。


0
投票

编辑:我创建了a sample,在这里我使用aosp中的jetifier gradle plugin重写程序包名称,并演示了如何在同一项目中同时使用1.1.32.0.0-beta版本。

您可以将jetifier与custom config file一起使用来重写软件包名称。只需像这样在constraintlayout-2.0.0-beta2.aarconstraintlayout-solver-2.0.0-beta2.jar上运行它即可:

./jetifier-standalone  -i constraintlayout-2.0.0-beta2.aar -o myconstraintlayout-2.0.0-beta2.aar -c config.json
./jetifier-standalone  -i constraintlayout-solver-2.0.0-beta2.jar -o myconstraintlayout-solver-2.0.0-beta2.jar -c config.json

其中config.json是这样的自定义配置:

{
  "restrictToPackagePrefixes": [
    "androidx/"
  ],
  "reversedRestrictToPackagePrefixes": [],
  "rules": [
    {
      "from": "androidx/(.*)",
      "to": "myandroidx/{0}"
    },
  ],
  "packageMap": [
    {
      "from": "androidx/constraintlayout/widget",
      "to": "myandroidx/constraintlayout/widget"
    }
  ],
  "pomRules": [],
  "versions": {
    "latestReleased": {}
  },
  "map": {
    "types": {}
  },
  "proGuardMap": {
    "rules": {
      "androidx/{any}": [
        "myandroidx/{any}"
      ]
    }
  },
  "stringsMap": {
    "types": {}
  }
}

您可以检查original config file以找出文件格式。

之后,您可以在项目中使用myconstraintlayout-2.0.0-beta2.aarmyconstraintlayout-solver-2.0.0-beta2.jar。显然,您必须在项目中更改MotionLayout的程序包名称。

应该也可以通过编写gradle插件来自动化该过程。

编辑:最好重新包装constraintlayout-1.1.3,以便在发行新版本时可以轻松地更新MotionLayout

© www.soinside.com 2019 - 2024. All rights reserved.