操作步骤
①迁移前提
- compileSdkVersion改为28(因为AnroidX 1.0.0版本是与Support Library 28.0.0一致的二进制文件,support最新的是28,所以可以直接迁移)
- buildToolsVersion改为28.0.2以上(笔者使用的是 28.0.3 ,仅供参考)
- gradle插件版本改为4.6及以上(gradle-wrapper.properties中修改distributionUrl)
- Android Studio版本升级到3.2及以上,建议直接改为最新(笔者目前使用的是Android 4.0,可以通过Help -> About 查看当前AS版本)。重新构建后的gradle版本是5.4.1,因此上面一步自动完成。
注:关于AS如何升级,以及升级后的一系列问题网上已经有很多教程,读者可以自行搜索。
②开始迁移
- step 1:在gradle.properties文件中添加以下配置
#Android 插件会使用对应的 AndroidX 库而非支持库。
android.useAndroidX=true
#Android 插件会通过重写现有第三方库的二进制文件,自动将这些库迁移为使用 AndroidX,但并不完全自动。
android.enableJetifier=true
-
step 2:如下图,AS打开项目 -> 菜单栏Refactor -> Migrate to AndroidX…
-
step 3:如下图,执行后会弹框询问是否备份。勾选上,会生成一个.zip文件,点击Migrrate。此时会弹出一个弹框,选择保存到哪里即可。
-
step 4:找到底部的Find,点击 Do refactor 即可(即重构项目)。AS会自动将原先的 support 依赖切换成 androidx ,并且修改项目中使用到的依赖库路径。
-
step 5:点击菜单栏 -> File -> Invalidate Caches /Restart 重启AS,清除缓存重启下。
emmm…到这里,老项目迁移到AndroidX的基本工作就已经完成,如果你人品好,程序就已经迁移完毕。但是如果项目比较复杂,基本上都是一堆报错。这时。不要着急,不要着急,不要着急,重要的事情要说三遍!!!!!点击下图中任意一个,重新编译项目。这时在底部的Build就会有错误出现的原因,这时就需要你自己慢慢跟着错误定位到位置去修改了。这里笔者总结了几个自己遇到的问题,做以下总结供读者参考
③迁移遇到的问题
- part 1:res下java文件的导包问题,三部完成。操作流程图如下:
①去除旧包引用,导入新包。(注释掉就行,待会全局替换要用到)
②使用全局替换(Ctrl+Shift+R)将旧包替换为新包。如果你有代码洁癖,顺便Alt+Shift+O清除没用包,Ctrl+Shift+L格式化代码。
③将Build中所有错误按照①②步骤处理完之后,点击Make Project重构项目。
不出意外的话,会出来一堆新的错误。这时只要根据以上三个步骤,重复,重复,重复。直到没问题!!!暂时没发现什么捷径,无奈.jpg
part 2:引入的第三方库内部仍然使用support包造成的问题。
从github上找到最新的依赖版本,替换原来的版本。重新Sync now即可。不出意外的话在底部的Build还会出现一堆错误,这时重复part 1的工作即可。如下图。(一般都是glide,butterknife这些)
完成了以上两步之后,程序就不会有报错了。但是,如果你点击Run运行到手机。你会发现有的界面根本显示不了,甚至有可能连启动都启动不了!!
原因就是res的导包问题,虽然从support迁移到androidx可以自动更换依赖,但是如下图:
可以看到,导入的包并不是我们想要的androidx包。
所以,还需要我们手动替换。不过还好,有了前面的操作之后,这点问题都比较容易解决。
Ctrl+Shift+R全局替换 -> Builde找下一个原因 -> Make Project -> Build找原因 -> 定位到问题 -> Ctrl+Shift+R全局替换 -> Builde找下一个原因 -> Make Project -> Build找原因 -> 定位到问题 -> Ctrl+Shift+R全局替换-> Builde找下一个原因 -> Make Project…直到没发现问题,套娃结束,迁移androidx成功!!!!