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
這非常有用,因為它會告述你為什麼失敗了.
在我的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.