昨天上线更新项目,收到反馈Google自11月2日后上线的项目,targetSDKVersion必须要在29以上,我的项目目前适配的是28

22 android api 下载 安卓api29_API


一开始以为简单的升级一下就好,把该改的改完后发现报错,编译不通过。

22 android api 下载 安卓api29_Android_02


网上查询后发现,自API29后,项目必须迁移AndroidX才可以用,原来的support只支持到28,并且后续官方可能不会继续维护了,看来迁移到AndroidX是大势所趋。

第一步

在一切开始前,确保Android studio版本3.2及以上,新建分支进行升级操作。

更新项目版本到29,原始项目API是28

22 android api 下载 安卓api29_android studio_03

第二步

用AS自带的Refactor > Migrate to AndroidX升级项目至AndroidX

22 android api 下载 安卓api29_android_04


出现弹出框,大致意思是一键迁移后可能还会有些错误,需要自己手动修改,是否需要把当前项目备份一个Zip压缩包,最好备份一下,不需要可以不勾选,点击Migrate

22 android api 下载 安卓api29_android_05


项目开始编译,编译器会帮我们找出需要重构的文件,点击do Refactor就好

22 android api 下载 安卓api29_22 android api 下载_06

第三步 编译完成

编译完成后,运气好基本没错,运气不好可能会满江红。我第一次迁移的是个小项目,编译完成后没啥问题。

迁移完成后会在项目根目录的gradle.properties中自动添加配置

22 android api 下载 安卓api29_android_07


项目build.gradle文件里依赖更新,由

22 android api 下载 安卓api29_API_08


变为

22 android api 下载 安卓api29_API_09


页面中的依赖变更

22 android api 下载 安卓api29_API_10

第四步 结束

如果和我一样没有遇到问题,直接ReBuild,然后运行,适配Android Q就可以了。

如果遇到报红,可以手动修改,将support依赖变更为对应的androidx依赖。

使用ctrl+h,进行全局搜索,查找对应的依赖表实现更新。

22 android api 下载 安卓api29_android_11


如果遇到包找不到等问题,可能是缓存导致,File——Invalidate Caches/Restart重启一下试试

22 android api 下载 安卓api29_android studio_12


可能还会有的第三方库会受到影响,我这里没有遇到,以后遇到了在更新。

第五步 进行Android Q适配

一般应用会影响到的主要有存储权限变更,IMEI 等设备信息无法获取等

Build.getSerial();
TelephonyManager.getImei();
TelephonyManager.getMeid();
TelephonyManager.getDeviceId();
TelephonyManager.getSubscriberId();
TelephonyManager.getSimSerialNumber();

以上API受影响等问题。

基本上迁移到这里就结束了,Android10.0的适配没有详细说,主要记录一下迁移的过程,附上support和AndroidX对照表。

support和androidx映射类