Android Studio 打開已有項目,編譯出錯,提示“錯誤: 找不到符號”的解決方法

在開發過程中,經常會遇到多人、異地協同工作的模式。

鑑於每個人使用的Android Studio版本不同、gradle環境的不同,我們可能會遇到打開別人的項目編譯不過的問題。

對於Android Studio的這個臭毛病,如果遇到了真的還挺燒腦。比如下面這種報錯:

> Task :app:compileROWDebugJavaWithJavac FAILED
E:\Source\test\SetupWizardExt\app\src\main\java\com\test\setup\network\AccessPoint.java:20: 錯誤: Nullable在android.annotation中不是公共的; 無法從外部程序包中對其進行訪問
import android.annotation.Nullable;
                         ^
E:\Source\test\SetupWizardExt\app\src\main\java\com\test\wizardmanager\utils\WizardActionParser.java:3: 錯誤: NonNull在android.annotation中不是公共的; 無法從外部程序包中對其進行訪問
import android.annotation.NonNull;
                         ^
E:\Source\test\SetupWizardExt\app\src\main\java\com\test\wizardmanager\WizardManager.java:21: 錯誤: 找不到符號
import static android.content.Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT;
^
  符號:   靜態 FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
  位置: 類
E:\Source\test\SetupWizardExt\app\src\main\java\com\test\setup\utils\GlobalConfigUtil.java:28: 錯誤: 找不到符號
import static android.app.ActivityManager.getCurrentUser;
^
  符號:   靜態 getCurrentUser
  位置: 類
E:\Source\test\SetupWizardExt\app\src\main\java\com\test\setup\LenovoGestureNavigationSettingsActivity.java:51: 錯誤: 找不到符號
import static android.os.UserHandle.USER_CURRENT;
^
  符號:   靜態 USER_CURRENT
  位置: 類
E:\Source\test\SetupWizardExt\app\src\main\java\com\test\setup\LenovoGestureNavigationSettingsActivity.java:50: 錯誤: 找不到符號
import static android.app.ActivityManager.getCurrentUser;
^
  符號:   靜態 getCurrentUser
  位置: 類

......


E:\Source\test\SetupWizardExt\app\src\main\java\com\test\setup\network\WifiTracker.java:330: 錯誤: 找不到符號
                            Settings.Global.SPEED_LABEL_CACHE_EVICTION_AGE_MILLIS,
                                           ^
  符號:   變量 SPEED_LABEL_CACHE_EVICTION_AGE_MILLIS
  位置: 類 Global
E:\Source\test\SetupWizardExt\app\src\main\java\com\test\setup\network\WifiTracker.java:500: 錯誤: 找不到符號
                        !(config.selfAdded && config.numAssociation == 0)) {
                                ^
  符號:   變量 selfAdded
  位置: 類型爲WifiConfiguration的變量 config
注: 某些輸入文件使用或覆蓋了已過時的 API。
注: 有關詳細信息, 請使用 -Xlint:deprecation 重新編譯。
注: 某些輸入文件使用了未經檢查或不安全的操作。
注: 有關詳細信息, 請使用 -Xlint:unchecked 重新編譯。
注: 某些消息已經過簡化; 請使用 -Xdiags:verbose 重新編譯以獲得完整輸出
100 個錯誤

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileROWDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.1.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 5s
45 actionable tasks: 8 executed, 37 up-to-date
16:03:06: Task execution finished 'assembleROW'.

上面所示的找不到符號的共有二十多個文件(中間以省略號代替),我試着找了幾個,提到的變量或者方法在指定的類中都是存在的,很奇怪爲啥AS睜眼說瞎話呢,隨後我把我的解決過程附在下面:

  • 點Build-Clean Project試了沒用。。。
  • 點File-Invalidate Caches/Restart試了沒用。。。
  • 於是懷疑版本不對,詢問了做這個項目的同事,對比了sdk,gradle配置等都一樣。。。
  • 然後懷疑與Android Studio一些設置有關。。。
  • 經確認,沒問題的版本是3.4.2,我的3.5的,別的同事的3.6等等版本的Android Studio都不可以,一樣樣的問題。然後我覺得是高版本的不行,於是下載了3.4.2,唉,還是不行。。。
  • 最後沒辦法了,諮詢了一個朋友,建議我清除AndroidStudio的緩存試試,我就清了一下,然後重新打開項目,竟然編譯通過了!

【緩存在C:\Users\主機名 找到 .AndroidStudiox.x(可能有多個版本的,至少要清了不再使用的版本緩存)】

總結:經歷一番鏖戰(總計三天的時間,22333...),終於解決了,希望這篇文章能給存在同樣問題的你一個幫助,拿走不謝!!!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章