3. AndroidX 迁移步骤?
1. 更新 Android Studio 与 Gradle 版本
-
将 Android studio 升级到 3.2 及以上;
-
Gradle 插件版本改为 4.6 及以上;
-
compileSdkVersion 版本升级到 28 及以上;
-
buildToolsVersion 版本改为 28.0.2 及以上。
2. 迁移 AndroidX 配置
- 在项目的gradle.properties文件里添加如下配置:
android.useAndroidX=trueandroid.enableJetifier=true
配置 | 说明 |
---|---|
android.useAndroidX=true | 表示当前项目启用 androidx |
android.enableJetifier=true | 表示将依赖包也迁移到androidx |
备注:enableJetifier 如果取值为 false, 表示不迁移依赖包到 androidx,但在使用依赖包中的内容时可能会出现问题,当然了,如果你的项目中没有使用任何三方依赖,那么,此项可以设置为 false。
3. 修改依赖库
修改项目 app 目录下的 build.gradle 依赖库,具体可以参照 AndroidX 变化中的依赖库映射。
修改前 | 修改后 |
---|---|
implementation ‘com.android.support:appcompat-v7:28.0.2’ | implementation ‘androidx.appcompat:appcompat:1.0.0’ |
implementation ‘com.android.support:design:28.0.2’ | implementation ‘com.google.android.material:material:1.0.0’ |
implementation ‘com.android.support.constraint:constraint-layout:1.1.2’ | implementation ‘androidx.constraintlayout:constraintlayout:1.1.2’ |
… | … |
4. 依赖类重新导包
将原来 import 的 android.** 包删除,重新 import 新的 androidx.** 包
import android.support.v7.app.AppCompatActivity; → import androidx.appcompat.app.AppCompatActivity;
5. 一键迁移 AndroidX 库
AS 3.2 及以上版本提供了更加方便快捷的方法一键迁移到 AndroidX。选择菜单上的 ReFactor —— Migrate to AndroidX… 即可。(如果迁移失败,就需要重复上面 1,2,3,4 步手动去修改迁移)
备注:如果你的项目 compileSdkVersion 低于 28,点击 Refactor to AndroidX… 会提示:
Q&A
- 同一个项目中 Android Support 和 AndroidX 可以共存吗?
不可以共存。需要将依赖修改为Android Suppor或AndroidX中任一种。
- 执行 Migrate to AndroidX 之后就完成 AndroidX 迁移了?
不一定。部分控件的包名/路径名转换的有问题,所以还需要我们手动调整(包括修改xml布局文件和.java/.kt 文件)。
- DataBinding 中的错误(重名 id 错误)?
在 AndroidStudio3.2 + androidx 环境下,对错误的检查和处理更为严格。如果同一个xml布局文件中存在同名id,
在之前的版本中,我们可以正常编译和运行,但是,在新的环境下, 必然会报错,错误信息如下:
- attr.xml 中重复的属性名称会报错?
在迁移到 androidX 之前,我们为自定义控件编写自定义属性时,可以与android已有的属性重名,
但是,在AndroidX环境下不行了,如果存在重名的情况,必然会报错——会提示你重复定义。
- 错误示例
- 正确示例
- Glide 中的注解不兼容 androidX?
迁移到 androidX 之后,Glide 中使用的
android.support.annotation.CheckResult 和
android.support.annotation.Non 这两个注解无法迁移。之前有用户在 Glide 中提过 issue: https://github.com*/bumptech/glide/issues/3*185**
在上述 issue 中有用户表示,将 Glide 升级到 4.8.0 之后,可以正常迁移。但是,我这边并不行。然后,我先升级了 Glide , 又在 gralde 文件中增加了 support.annotation ,这样才能正常编译通过。貌似在后续 Glide 5.x 版本中会完成对 androidx 的完全兼容。
- 规范包名(即文件夹名)?
这里所说的包名,指的是项目中的文件夹名称。在之前版本中,我们命名包名时可能会出现大写字母,虽然这并不符合 Java 命名规范,但起码能正常编译和运行。然而,升级到 AndroidStudio3.2 + androidX 环境后,必须严格遵守命名规范,否则,可能报错,从而导致不能正常编译和运行。
学习分享
最近有朋友在我面前炫耀,自己在阿里内部得到了一份多牛批的学习资料,对于他这种只炫耀不分享的人,我表示不就是一份资料吗?我自己整理的比你更加系统,全面谁不会一样!在这里我不小气,免费分享给大家。学无止尽,祝大家都能找到自己满意的工作。
点击【Android高级工程师进阶学习】加入我们的圈子领取资料和我们一起吧学习交流吧!
Android进阶学习全套手册
Android高级架构师进阶知识体系图
尾声
你不踏出去一步,永远不知道自己潜力有多大,千万别被这个社会套在我们身上的枷锁给捆住了,30岁我不怕,35岁我一样不怕,去做自己想做的事,为自己拼一把吧!不试试怎么知道你不行呢?
改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
获取](https://bbs.csdn.net/topics/618156601)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!