一、gradle 同步报 Caused by: java.lang.NoSuchFieldError: ASCII的错误
场景:之前又一个2018年那时候的项目,但不记得那时候的Android studio的版本了,目前是2022年的AS版本是4.2.2版本。运行那个2018年的项目就无法跑起来了,报错就是提示ASCII的错误,当时就在想是不是项目中包含了中文路径,或者非法的字符,一顿查一顿改都没用。
解决:升级gradle的版本:gradle之前版本是3.2.0更新到高一些的版本就可以了。(可以找一个能跑起来的项目看看gradle版本。)
project项目级别的gradle文件:
classpath 'com.android.tools.build:gradle:x.x.x'
同时,gradle-wrapper.properties更新到5.6.4版本:
distributionUrl=https://services.gradle.org/distributions/gradle-5.6.4-all.zip
二、AS编译报错:line 1:0 mismatch input '?' expecting {COMMENT, SEA_WS, '<',PI}
场景:从github拉了一个项目,从项目中拷贝了一个xml文件到我的正常的可编译的项目中,拷进去后编译运行报错如下:
Caused by: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ‘:app:mergeDebugResources’.
……
Caused by: java.lang.NullPointerException
at android.databinding.tool.store.LayoutFileParser.parseOriginalXml(LayoutFileParser.java:128)
相关的报错信息直指向这个xml文件引发的空指针(因为可以点击错误信息跳转到这个xml文件,我忘记截图了)。第一次遇到因为一个xml文件(文件没有报错信息,文件表面看上去没任何问题)看到空指针,一脸懵。
在stackoverflow上找到了最终原因:android studio UTF-8 BOM format 的问题,如图
知道是 UTF-8 BOM format 的问题,说实话我也不知道这个BOM是啥,可能就是一种编码格式吧。
解决方案:右键项目->Remove Bom(菜单最底部有这个选项,点击即可),然后重新运行编译就可以了。
三、Could not resolve com.android.tools.build:gradle:7.4.1
今天打开AS的一个项目,遇到如上标题的gradle报错,截图如下:
我的AS版本:
gradle版本:
项目的build.gradle:
问题所在:是因为jdk的版本不对,是最新的AndroidStudio 所用的gradle需要使用jdk11才能构建 ,因此要更改AndroidStudio的jdk版本。
解决办法:File -> ProjectStructure -> Gradle Setting . -> Gradle JDK
重新同步一下gradle就好了。