android 有些异常爆出来之后,并不能显示问题所在,我们看着也也知道到底哪的问题,这里记录下,这些问题碰到也确实蛋疼的很,搞不好是要花不少时间的,一天的好心情可能也要搞没了
1. supper 库版本和官方组件库不兼容
java.lang.NoSuchMethodError: No static method getFont(Landroid/content/Context;ILandroid/util/TypedValue;ILandroid/widget/TextView;)Landroid/graphics/Typeface; in class Landroid/support/v4/content/res/ResourcesCompat; or its super classes (declaration of 'android.support.v4.content.res.ResourcesCompat'
at android.support.v7.widget.TintTypedArray.getFont(TintTypedArray.java:119)
举个例子: recyclerview 版本比 supper V7高就会出现这个问题,app 中以 supper 库的版本为基准,所有官方组件库的版本都不能高于 supper 库的版本。
2. AS 升3.0之后 gradle 脚本 APK 重命名
-
编译的时候报错:
-
发现是在gradle里打包输出apk的代码出的问题,原代码是这样的:
-
修改成这样就可以了:
3. gradle 版本异常
Error:Failed to open zip file.
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)
Re-download dependencies and sync project (requires network)
一看这问题就是zip解压失败,接着下面提示Gradle's dependency cache may be corrupt:Gradle的依赖缓存可能是损坏的。到这里大家应该明白,as出现这样的问题是怎么导致的了吧,文件损坏。
as 互译自动判断所需的 gradle 的版本地是否存在,不存在回去自动下载的,问题是 gradle 的包基本都在100-80M 之间,且远程连接不稳定,经常存在下载终中断,失败的问题,所以造成一个 gradle 文件下载不完全的问题,所以会出现上述报错信息
我们查看 AS 默认 gradle 配置路径:
然后按照路径 xxx.gradle\wrapper\dists\gradle-3.3-all\55gk2rcmfc6p2dg9u9ohc3hw9 ,这里以3.3版本距离,找到我们对应的那个版本的 gradle 文件夹,找到最终的 gradle 文件
这里我发现,AS 自动下载的 gradle.zip 文件只有20M,明显是下载不完全的,我们游2种处理手段:
-
一个是删除 这个 gradle.zip 文件,AS 会再次自动下载,AS 升级到3.1之后,下载大文件会有提示,链接也稳定多了
- 另一个是我们自己下载,然后把 下载的 gradle.zip 文件放到这个位置
下载链接: services.gradle.org/distributions/gradle-3.3-all.zip , 版本号自自行替换即可
最后我们需要更新根目录下 gradle/wrapper/properties 下的 gradle 配置,需要更换版本号,AS 自动下载的不需要了。