android - 使用不同版本的 MotionLayout 和 ConstraintLayout 依赖项
问题描述
我已经使用 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。
解决方案
编辑:我创建了一个示例,我使用来自 aosp 的jetifier gradle 插件来重写包名称并演示如何在同一个项目中同时使用它们1.1.3
和2.0.0-beta
版本。
您可以使用带有自定义配置文件的 jetifier来重写包名称。只需在两者上运行它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": {}
}
}
您可以检查原始配置文件以找出文件格式。
之后,您可以在您的项目中使用myconstraintlayout-2.0.0-beta2.aar
和。myconstraintlayout-solver-2.0.0-beta2.jar
显然,您必须MotionLayout
在项目中更改包名称。
应该可以通过编写一个 gradle 插件来自动化这个过程。
编辑:重新打包可能会更好constraintlayout-1.1.3
,因此您可以在新版本发布时轻松更新MotionLayout
它们。
推荐阅读
- reactjs - 如果道具改变了,我可以通过什么方式给出初始值,以避免反模式效应
- orbeon - 如何使屏幕阅读器可以使用提示文本?
- arrays - 如何找到数字数组中的所有范围
- ruby-on-rails - Watir:元素存在但.exists?返回假
- git - 删除分支后测试 Git 存储库大小减少
- php - php 函数参数的数据类型的行为
- c# - 相似配置文件推荐的机器学习算法(ML.NET 库).NET C#
- c# - 使用 C# 代码统一导入 .step 文件?
- c - libusb 设备描述符:bcdUSB 可能值
- robotframework - 如何使用 Robot Framework 编写代码来操作重复登录和注销多个凭据