Android 迁移到androidX教程 Kotlin支持androidX

背景:

由于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.一键转换

Android 迁移到androidX教程 Kotlin支持androidX_第1张图片
 

2.2点击Migrate to AndroidX,点击Migrate

Android 迁移到androidX教程 Kotlin支持androidX_第2张图片

这个时候会弹窗,跳出一个是否备份,如果你选择备份,将会保存一个zip的文件。

Android 迁移到androidX教程 Kotlin支持androidX_第3张图片

 2.3会跳出一个转换提示:点击Do Refactor,将执行转换。然后等待IDE自动转换

Android 迁移到androidX教程 Kotlin支持androidX_第4张图片

 转换完可能会存在报错

 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

你可能感兴趣的:(android,android,android,studio,gradle)