大家都知道Android support library 28是google发布的最后一版android.support的库了,原因是google同时发布了androidx 1.0.0 第一个正式版本。发布androidx的理由是:Support包依赖混乱,AndroidX是对Support的整理。所以早晚都要把项目依也迁移到 Androidx ,而我也将项目迁移到了AndroidX包,这里记录一下步骤和遇到的问题。
提前准备
AndroidX的迁移要求在在AndroidStudio 3.2 或更高版本中执行,要求的targetSdkVersion版本为9.0即28.也就是我们的 classpath 'com.android.tools.build:gradle:3.2.0'要3.2.0或者更高。
也就时在我升级tools.build的时候遇到了问题:始终下载失败3.2.0,不知道咋回事,困扰了好久?
这个问题的解决参考:https://www.cnblogs.com/whycxb/p/9760805.html
最终的解决办法是:
-
(1).添加 mavenCentral()仓库支持
image.png -
(2).翻墙,并设置“代理全部流量”。
我这里翻墙用到的是蓝灯,步骤如下:
直接打开蓝灯链接成功后,浏览器可以访问,但As还要做其他设置,如图打开蓝灯的设置:
image.png
选高级设置:
image.png
然后获取ip和端口:
image.png
打开As,File—>Settings—>Appearance & Behavior-->System Settings-->HTTP Proxy—>Manual proxy configuration
选择HTTP,host name填127.0.0.1,Port number 填之前你lantern上的端口号:52593。
image.png
Apply即可,然后你就可以下载tool.build:gradle3.2.0即以上版本了。
迁移项目
如果你的项目已经开发部分了想引入AndroidX包的支持,只需要两步:
第一步:.在你的 gradle.properties 文件中添加:
## 表示使用 androidx
android.useAndroidX=true
##表示将第三方的依赖库也迁移到 androidx,如果你的项目中没有依赖库可以设置为false
android.enableJetifier=true
第二步:.菜单栏 Refactor -> Migrate to Androidx 就可以了,Android Studio 会自动把你项目中的依赖切换到 Androidx,并且修改项目中使用到依赖库的路径。
项目踩坑
- 首先你在编译完成后,要手动更改依赖库路径,比如我们的Fragment或AppCompatActivity等的地址都要变成androidX包下的,如:import androidx.appcompat.app.AppCompatActivity;
- 使用android.enableJetifier=true将项目中使用的第三方库也迁移到 Androidx,迁移后还需要 Flie -> Invalidate Caches /Restart 一下。
-
其次大部分都是注解处理器会产生冲突,也就是有的第三方版本还没有添加androidx的支持,比如我遇到的:
(1). image.png
找了半天才发现是buterknife的问题,还好butterknife已经添加了androidX的支持,只需要升级到最新的版本就好了,如:
image.png
另外在app的build.gradle中:
image.png
(2).还有Glide依赖也要改变,glide也添加了AndroidX的支持:
image.png
代码中的写法也变了,需要通过一个RequestOptions:
//升级到4.8版本之后的新写法
RequestOptions requestOptions = new RequestOptions()
.placeholder(R.mipmap.ic_launcher)
.error(R.drawable.errorview)
.fallback(new ColorDrawable(Color.RED));
Glide.with(mContext).load(imgUrl[position]).apply(requestOptions).into(imageView);
(3).其他类似 比如dagger 等注解冲突的,要不添加最新支持androidX的依赖,要不降低版本版本。
- 其他就是包名命名要规范,不允许同一个xml文件中有id重复的问题存在
- 再有就是根据错误信息灵活应对。
早点开始你的AndroidX迁移之旅吧。
网友评论