Android-AndroidX迁移及踩坑

作者: 薛之涛 | 来源:发表于2019-01-27 14:28 被阅读8次

    大家都知道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迁移之旅吧。

    相关文章

      网友评论

        本文标题:Android-AndroidX迁移及踩坑

        本文链接:https://www.haomeiwen.com/subject/zhggjqtx.html