Mark 一下折腾了一天的gradle sync failed

背景, 

在一台电脑上创建的app 提交到gitee. 在另外一台电脑上clone下来, 然后就遇到了gradle sync failed: unknown reason问题. 为此折腾了近一天.

baidu google很多都是如下处理流程:

1. invalidate caches and restart....

2. remove C:/users/.gradle

3. remove project directory/.caches .idea

4. restart AS

还有很多说下载gradle-7.0.2-all.zip然后修改gradle-wraper.properties 指向改文件的. 这在本案例中不实用, 因为本案例可以下载.

反复折腾了gradle的很多版本, 通过修改gradle-wraper.properties文件. 但都无济于事.

然后静下心来仔细阅读stackoverflow上6年前帖子:https://stackoverflow.com/questions/29808199/error-running-android-gradle-project-sync-failed-please-fix-your-project-and-t

点赞最多的方法仍然于事无补.

说升级SDK的方法也无效.

此问题最大的困难在于其原因是未知的. 于是乎只能瞎猜. 猜对了, 就解决了. 不对就更麻烦.

有一个点赞为5的方法, 引起了我的注意, 因为它并没有提供解决方案, 而是给了一个debug方法:

进入项目所在目录, 然后执行:

gradle installDebug 或

gradle --info installDebug (注: windows上直接执行此命令会提示找不到gradle命令, 解决方法是对应版本grade 所在的绝对路径. 一般会在C:/Users/.gradle/wrapper/dist/..../bin下.)

这非常有用,因为它会告述你为什么失败了.

在我的case中, 第一次执行显示jdk的版本不对. AS 2020.3.1以后使用的gradle是7.0.0, 要求JDK11及以上.

而我之前也修改过jdk, 不论是OPEN jdk 16还是AS自带的jdk 11, 现象仍然一样.

根据提示, 我看到我的电脑之前安装了jdk 1.8, 并且设置JAVA-HOME JDK_HOME和CLASS_PATH三个环境变量, 都指向jdk1.8.

于是修改这三个环境变量指向open jdk 16. 然后再重新执行上述命令. 很幸运地看到, jdk不匹配的问题没有了. 但是仍然有错误. 

不过,这一次提示的找不到platform android (S). 此时尝试sync project with gradle, 错误现象一样.

仔细回想前面的操作, 根据网上的建议, 确实升级了SDK到31(S), 而创建项目时设置的目标版本是30. 于是打开project structure查看, 果真, modules 的compile sdk version 变成了31.

把它改回来. 再把project下的Android Gradle Plugin(AGP)设置为默认版本(之前尝试升级到了7.1.1,但是会出现找不到pod文件的情况.), 把gradle的版本设置为对应的7.0.2. 

然后sync. 终于看到了久违的daemon started successfully.

 

启示:

1. 有几个Java Home的设置需要注意:

a. 系统的环境变量(JAVA_HOME, JDK_HOME, CLASS_PATH)

b, AS IDE使用的java

c. gradle使用的java

AS 2020.3.1版本后好像只能设置c. b会默认使用a的设置??

2. 正确的debug方法, 事半工倍. 网上大量的直接告述你里修改啥啥, 且没有说明原因的都是"耍流氓"🙂.

 

posted @ 2021-08-11 16:10  耕读编码  阅读(2196)  评论(0编辑  收藏  举报