背景:
由于android前期在使用上存在差异化管理,在后期会出现各种冲突问题。google在后期将库整合一个新库,adnroidX系列。相对原来的v4和v7,这样便于有效管理。
AndroidX 对原始 Android 支持库进行了重大改进,后者现在已不再维护。androidx
软件包完全取代了支持库,不仅提供与支持库同等的功能,而且还提供了新的库。
此外,AndroidX 还包括以下功能:
- AndroidX 中的所有软件包都使用一致的命名空间,以字符串
androidx
开头。支持库软件包已映射到对应的androidx.*
软件包。如需获取所有旧类到新类以及旧构建工件到新构建工件的完整映射,请参阅软件包重构页面。 - 与支持库不同,
androidx
软件包会单独维护和更新。从版本 1.0.0 开始,androidx
软件包使用严格的语义版本控制。您可以单独更新项目中的各个 AndroidX 库。 - 版本 28.0.0 是支持库的最后一个版本。我们将不再发布
android.support
库版本。 所有新功能都将在androidx
命名空间中开发。 - 官方文档地址:AndroidX 概览 | Android 开发者 | Android Developershttps://developer.android.google.cn/jetpack/androidx
1.androidX的前期准备
如果要在新项目中使用命名空间为 androidx
的库,就需要将编译 SDK 设置为 Android 9.0(API 级别 28)或更高版本,并在 gradle.properties 文件中将以下两个 Android Gradle 插件标志设置为 true
。
使用 Android Studio 3.2 及更高版本,您只需从菜单栏中依次选择 Refactor > Migrate to AndroidX,即可将现有项目迁移到 AndroidX。
compileSdkVersion 28
在module工程下的gradle.properties新增支持androidX的标志
-
android.useAndroidX
:该标志设置为true
时,Android 插件会使用对应的 AndroidX 库,而非支持库。如果未指定,那么该标志默认为false
。 -
android.enableJetifier
:该标志设置为true
时,Android 插件会通过重写其二进制文件来自动迁移现有的第三方库,以使用 AndroidX 依赖项。如果未指定,那么该标志默认为false
。 - android.useAndroidX=true;//是开启androidX,如果设备false,将不会开启 android.enableJetifier=true//第三方库是否引用androidX,如果使用,将会将第三方库也转为androidX
2.一键转换
2.2点击Migrate to AndroidX,点击Migrate
这个时候会弹窗,跳出一个是否备份,如果你选择备份,将会保存一个zip的文件。
2.3会跳出一个转换提示:点击Do Refactor,将执行转换。然后等待IDE自动转换
转换完可能会存在报错
AndroidX和库映射对应的文件:
工件映射:https://developer.android.google.cn/jetpack/androidx/migrate/artifact-mappings
类映射:类映射 | Android 开发者 | Android Developershttps://developer.android.google.cn/jetpack/androidx/migrate/class-mappings
可以自行根据官方文档对比,找到对应的工件和库类
问题:
1.KeyEventCompat类不存在,
KeyEventCompat.startTracking(event);无法继续使用,需要用KeyEvent自身来处理 event.startTracking();
2.28失效 Canvas.MATRIX_SAVE_FLAG
int flags = Canvas.MATRIX_SAVE_FLAG |
Canvas.CLIP_SAVE_FLAG |
Canvas.HAS_ALPHA_LAYER_SAVE_FLAG |
Canvas.FULL_COLOR_LAYER_SAVE_FLAG |
Canvas.CLIP_TO_LAYER_SAVE_FLAG;
解决:
int sc = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);
3.如果你使用了kotlin,请将annotationProcessor替换为kapt