我已经使用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。
我面临类似的问题-避免类冲突的唯一可能方法是用不同的包名称重建依赖项之一。可以通过下载其中一个库的代码并在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。
同时包含ConstraintLayout
和MotionLayout
,因此它们不会在您的代码中产生冲突。不过,您当前的代码可能需要一些小的调整。
希望有帮助。
编辑:我创建了a sample,在这里我使用aosp中的jetifier gradle plugin重写程序包名称,并演示了如何在同一项目中同时使用1.1.3
和2.0.0-beta
版本。
您可以将jetifier与custom config file一起使用来重写软件包名称。只需像这样在constraintlayout-2.0.0-beta2.aar
和constraintlayout-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.aar
和myconstraintlayout-solver-2.0.0-beta2.jar
。显然,您必须在项目中更改MotionLayout
的程序包名称。
应该也可以通过编写gradle插件来自动化该过程。
编辑:最好重新包装constraintlayout-1.1.3
,以便在发行新版本时可以轻松地更新MotionLayout
。