美文网首页
Android项目优化随笔:从Butterknife不维护开始

Android项目优化随笔:从Butterknife不维护开始

作者: like26th | 来源:发表于2020-11-12 21:27 被阅读0次

    一

    疫情这一年,上半年在做小程序,下半年开始做了一个vue项目,然后我就不记得安卓是啥了...

    开玩笑,最近又要更新App功能,于是又把Android捡起来。把Android studio升级到4.1之后,发现Butterknife的注解全部都有warning提示。

    image.png

    搜索了一下发现。


    截屏2020-11-11 下午7.41.45.png

    竟然不维护了呀。

    bye old friend.gif

    大神自己也说了,最好移步至view binding


    image.png

    竟然这样,就迁移到view binding吧。其实view binding之前看过一些介绍,但是没在项目中使用。项目中都是老代码,一直在修修补补。

    那么首先看看view binding具体是怎么用的。

    百度了一下,需要先在build中添加

      android{
        viewBinding {
            enabled = true
        }
    }
    

    然后用这种方式使用布局和控件

    mInflate = ActivityCentersettingBinding.inflate(getLayoutInflater());
    setContentView(mInflate.getRoot());
    mInflate.tvVersion.setText(currVerion);
    

    as会自动把项目中的xml生成一个相应的***Binding.java文件,这些文件也是以驼峰形式命名的。同时xml中设置了id的控件,也会以变量的形式包含在文件中,id名称也是以驼峰形式出现的,在使用时直接调用就可以了。

    修改完了之后build一下项目,然后竟然报错。


    截屏2020-11-11 下午8.19.21.png

    全是乱码,根据报错的文件名称定位到对应的xml文件,发现文件中有未定义的标签,应该是以前项目重重构是删除的自定义控件。

    一片红

    再次rebuild,还是报错。

    这次是因为有两个名称相似的布局,这样在生成对应Binding文件是会有冲突。

    两个名字类似.png

    由于view binding会扫描一遍整个项目的xml文件,在这个过程中,我发现项目里竟然还存在以下这样的错误

    ???.png

    这他么写的是啥,这些老代码里究竟多少这样不知所以的地方。

    我陷入了漫长沉思...

    1秒钟吧.png

    然后我思考完了。我决定把这个项目做个大范围的优化,正好最近不怎么忙。

    对了,补充一下,我发现使用view binding后,就不要随便给xml重命名了,不然调用的时候还要重新修改文件名。

    二
    既然决定要优化了,首先看一下项目里有多少遗留的无效文件,不知道以前从那看的,说as打包的时候会自动忽略那些未被调用的文件。所以项目里有很多重构时遗弃的文件未被删除。

    我这次想彻底清理一下。可以在as中的analyze - run inspection by name 查看无效的文件。

    出现结果后,直接删除,然后控制台又报错了。


    image.png

    然后定位到一段有tabLayout的代码

    066F2E0C-2E87-41AB-8787-70DA70EA5745.png

    这里的view_indicator文件刚已经删除了,仔细看了一下,是tab的customview其实一直为null,因为就没设置过,可能之前想用自定义的样式,结果后来还是没用,这都检查出来了...老代码啊...

    然后发现一处警告

    DSL element 'android.viewBinding.enabled' is obsolete and has been replaced with 'android.buildFeatures.viewBinding'.
    

    刚在网上搜到view binding的配置方式竟然也过期了

        buildFeatures {
    //        dataBinding = true
            viewBinding = true
        }
    

    换一下,这样就可以了。

    重新打了个包,发现大小小了3M,看来as打包的时候并不会忽略未使用的资源,好吧。

    三
    刚才rebuild的过程中,build控制台总是出现乱码,这当然不能忍受,继续处理。

    根据搜索到的方法在Edit Custom VM Options中添加-Dfile.encoding=UTF-8,测试一番之后,重启as后无效,重启电脑后才生效。于是之前乱码的地方变为

    EF4EDA69-00FC-4863-82C5-FEDF3EFFA93A.png

    然后再全局build中加入

    allprojects { 
      gradle.projectsEvaluated { 
            tasks.withType(JavaCompile) { 
                options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" 
          }
        }
     }
    

    再次build可以显示具体信息,那些api过期了。

    接下来的时间,就从过期的api开始,逐步修改和优化吧。

    相关文章

      网友评论

          本文标题:Android项目优化随笔:从Butterknife不维护开始

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