给androidx和AS3.2的路上加上保险
2023-10-24 21:17:22
现在有一句话讲得很好:别人都拿去做 rocket 了,你还在拿着做小推车。
所以我们也要不断的更新自己知识,接触新的事物和环境,毕竟我们不是为了用编程工具吃饭,而是用编程工具创造价值。这是我最近换了部门后的一个很大的感受。
前不久的 Googel IO 大会上亮相的 JetPack ,他为android 开发带来了极大地便利,于是开启了尝(爬)鲜(坑)之旅。
自从接手了一个 MVVM 架构的项目,就喜欢上了这种模式的开发,使用 Kotlin 开发,里面用到了 Databinding,LiveData,和 ViewModel,简直不要太爽。以至于现在又将自己老的个人项目从头重构,用 RxJava 实现了对 viewmodel 的包装,各种拓展,爽的一批。
不过在这当中也遇到了很多坑,老程序员们还遇见过什么坑没?今天在这里分享出来大家一起讨论一下。
一、起手式异常:could not find androidx.appcompat:appcompat:1.2.0
一般都是第一次升级 androidx,或者同事升级了 androidx 而自己没有,这个问题就出来了。出现这个问题解决办法,也是很简单,直接用 bundle 的方式更新下就好。这个版本跳跃太快,期间肯定出现了很多不兼容的地方,过渡期间可能频繁遇到这个问题。
allprojects {
repositories {
google()
jcenter()
mavenCentral()
}
}
二、你这是在搞笑吧:java.lang.RuntimeException: Cannot find the tag handler because it is not part of any tag library
主要问题:
1、开着你的脑洞,用了 layout 标签
2、不用的话出现这个问题,那几乎 99% 出在你引入的 library 包。
处理办法:
1、在 xml 标签前加命名空间:xmlns:app="http://schemas.android.com/apk/res-auto"
2、排除依赖
implementation("com.android.support:customtabs:1.0.0") {
exclude group: "com.android.support", module: "support-compat"
}
三、我死了:warning: failed to find generated static file 'androidx.appcompat.R.txt'
主要问题:
1、你新引入了androidx的包,而AS是旧的。
2、as没显示更新,但是可以去https://developer.android.com/studio 查看下载新版本。
解决办法:
1、等待你的as 更新。
2、直接去下载最新版本的AS。
四、救命:java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/annotation/Nullable;
主要问题:
1、你的 support 包混了
2、升级了 support 包没有同步到 module
解决办法:
1、用lint工具统一全部
2、java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/annotation/Nullable;
五、恶心的?:Android resource linking failed
主要问题:
1、安卓3.2的版本,可能是你开发工具,build tool的版本都不支持,特别是 appcompat 包版本要升高到 1.3.0 以上,其他 androidx 包兼容 1.3.0
2、还有可能是一些历史遗留版本库,总之根据错误提示一点点升级,直到错误消失
解决办法:
1、你得检查你的整个版本
2、你可以去 issue 上查找对应问题
到目前为止,我已经罗列了 5 个坑,但我们仍然有很多坑需要填。欢迎大家在评论中分享你们遇到的其他坑,让我们共同克服这些困难,成为更好的开发者。