之前的android个人项目有一年多没有维护了,尽两年的重心也主要是小程序开发及.net,.net core相关开发,android从8以后开发比较少了,主要是维护,而因为电脑一直没换,所以维护也仅仅是解决部分bug,没有做大版本升级...
近一个月来,不管是公司电脑还是个人电脑都换了,然后重新安装了新的as及相关插件,于是,打开旧项目就有很多问题了,最初是原项目gradle版本过低,新装的5.4.1,项目中用到的是3.5.3,编译时老提示最低编译版本为26,然后又是butterknife版本用了10.2.1,然后提示对应build sdk要用28,于是,又有一大堆问题需要去解决。
这里记录下Android低版本升级到高版本后的几个问题及解决方案:
问题一:butterknife10.2.1与android Api 28.0.0 support-v4/v7库冲突问题
因为太久没搞android,所以这一问题花了些时间去处理,后来出现了androidx替代v4/v7包,于是找到了对应的解决方案:gradle.properties中增加下面两句(其实28新建项目会带有这两句,只是我这是老项目,所以没有,需要手动添加)
android.useAndroidX=true android.enableJetifier = true
然后gradle sync,之前用到v4/v7的地方会报错,这里我也暂时没啥好方法,只有一个个改,能想到的简单点的操作有两点:1.使用ctrl+R替换,2.用alt+enter自动添加import;这里需要注意的是不仅仅是类中需要改,布局文件中,AndroidManifest.xml中也可能要改。
ps: 后来发现这里有比较轻松的解决方法,在gradle和build sdk切换为高版本后使用Migrate to Androidx自动替换v4/v7位androidx, https://www.jianshu.com/p/f7a7a8765294
问题二:butterknife的@Bind(R.id.xxx)找不到
用@BindView(R.id.xxx)替换,全局替换下即可
问题三:java.lang.BootstrapMethodError: Exception from call site #0 bootstrap method问题
这里需要在build.gradle的android节点下增加
compileOptions{ sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
以及,Refactor菜单,点击Migrate to Androidx...
问题四:Flag android.useDeprecatedNdk is no longer supported and will be removed in the next...
这里去掉gradle.properties中的android.useDeprecatedNdk=true,换成在build.gradle中使用cmake即可
问题五:butterknife.bind()后,控件对象还是null
在gradle中应用butterknife,应该以下两句都有
implementation 'com.jakewharton:butterknife:10.2.1' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1'
问题六:Glide的crossfade没有该方法
使用 .transition(withCrossFade()) 替代 .crossFade()
其实还有很多其他问题,只是这几个问题是刚解决的,还留有一些记忆,就先记录下来,后续再汇总其他问题
个人博客: IT老五 简书:ThinkinLiu