回報錯誤

我們希望修正錯誤!但許多錯誤未包含必要資訊。因此,我們將著重在具備完整報告的錯誤相關資源。如要提高錯誤修正的機會,請花點時間閱讀這份文件。

如未完成下列步驟,我們會關閉您的錯誤。這種情況下,只要重新提交額外資訊即可。

另請注意,Issue Tracker 並非支援論壇。假使您對如何使用這些工具,或是如何讓 Android 應用程式順利運作,請造訪 stackoverflow.com 或其中一種 Android 開發人員支援資源

如何回報錯誤

  1. 請確認您使用的是最新版本的工具。因此能夠免於審查已修正的錯誤。可以的話,也請在 Android Studio 的 Issue Tracker 中搜尋類似的問題,看看問題是否已經回報 (通常使用錯誤訊息搜尋關鍵字)。

  2. 依序選取「說明」>「提交意見回饋」,在 Android Studio 中開啟錯誤報告。 這是啟動錯誤最簡單的方法,因為錯誤報告會在您的 Android Studio 版本、Java 版本和系統資訊中填入錯誤報告,所以我們必須正確重現問題。 (否則,請在這裡回報錯誤,然後手動新增版本資訊。)

  3. 具體說明重現問題的確切步驟。假使我們能在第一次嘗試重現問題,就比較容易解決。請盡可能包含程式碼片段 (或者,請指向目前可用於重現該錯誤的 GitHub 專案)。螢幕擷圖也有助您觀察事物。

  4. 說明您原本預期會發生情況,以及您實際觀察到的內容。

  5. 根據錯誤選出描述性的匯總。您可能很驚訝的是,有多少錯誤是由「錯誤」、「問題」、「例外狀況」、「無效」等匯總所提出,這使我們難以將問題排序。

  6. 對於特定類型的錯誤,我們需要更多資訊:

Android Studio 錯誤的詳細資料

請提供下列 Android Studio 錯誤的更多相關資訊。

假使 IDE 當機

假使 IDE 本身看起來非常緩慢或完全凍結,請產生幾個執行緒傾印,並附加到錯誤報告中。可讓我們瞭解 IDE 的忙碌狀況 (或預期等待的資源)。

假使 IDE 看起來很緩慢,但不凍結,請一併附上idea.log檔案 (選取 「說明」 > 「顯示登入檔案」,或顯示 Mac 上 Finder 的登入功能。我們可以從中找出 IDE 緩慢的原因,就是一直在將錯誤擲回到記錄檔中。

使用 CPU 分析器診斷速度緩慢情形

假使您在 Android Studio 中發生緩慢問題,CPU 分析器有時會協助診斷問題。請按照下列步驟使用 Android Studio/IntelliJ Performance Testing 外掛程式擷取 CPU 分析器:

  1. 安裝外掛程式。您可以直接從 Android Studio 搜尋外掛程式市集中的「效能測試」,也可以前往外掛程式網站下載與 Studio 相容的版本。

  2. 建立 CPU 分析器。 假使 Android Studio 看起來很緩慢,請選擇「啟動 CPU 用量剖析」,然後重複幾個會造成延遲問題的動作 (程式碼完成、輸入、等待醒目顯示),以及「停止 CPU 用量剖析。」

  3. 分享設定檔。說明框會顯示 CPU 快照檔案名稱,格式為 snapshot-NNN。請在錯誤報告中分享該快照檔案。

假使 IDE 的記憶體不足

有時候,Android Studio 中的記憶體問題並不容易重現及回報。為解決這個問題,Android Studio 內含記憶體用量報表。您可以將這份報告傳送給 Android Studio 團隊,協助我們找出記憶體問題的來源。

執行記憶體用量報表

如要執行記憶體用量報表,請按照下列步驟操作:

  1. 依序點選選單列中的「說明」>「分析記憶體用量」

    Android Studio 會載入堆積,並提示您重新啟動 IDE。假使重新啟動 IDE,記憶體快照資料分析會立即啟動。否則,記憶體快照資料分析會在您下次執行 Android Studio 時啟動。不論是哪一種情況,IDE 都會在記憶體用量報告可供審查時通知您。

    通知記憶體用量報表可供審查

  2. 按一下「評論報告」。

    傳送報告之前,您可以先審查所有資訊。

    記憶體用量報表。

  3. 完成審查後,請將報告的內容複製及貼上到文件中,並在提交錯誤時附加該檔案。

    以這種方式提交報表資訊,即可確保 Android Studio 團隊在調查記憶體問題時,使用 Issue Tracker 與您聯絡。

假使 IDE 當機或擲回例外狀況

假使是其他當機類型,請附上 idea.log 檔案。依序選取「說明」 >「顯示登入檔案」 或「顯示 Mac 上的登入 Finder

產生執行緒傾印

執行緒傾印是 JVM 中所有執行緒的列印工作,而針對每個執行緒,就是所有堆疊框架的列印。這有助您輕鬆查看 IDE 的忙碌情形,特別是假如您每隔兩秒會產生幾個執行緒傾印。

當您回報 IDE 因處理繁雜的 CPU 或 IDE 凍結時較常發生的錯誤時,執行緒傾印可以得知哪個程式碼正在執行過多工作,或哪些執行緒正在爭用資源並導致死結。

JDK 隨附一個名為「jstack」的工具,可用來產生執行緒傾印。首先,您必須先找到 Android Studio 程序的流程 ID。 您可以使用「jps」指令。(jstack 和 jp 都屬於 JDK 的 bin 目錄。假使您安裝了多個 JDK,請使用與執行 Android Studio 相同的版本,並查看 Android Studio「關於」方塊中的版本。))

使用 Linux、Mac:

jps -mv | grep studio

使用 Windows:

jps -mv | findstr studio

舉例來說,印出的長直線如下:

$ jps -mv | grep studio
37605 -Dfile.encoding=UTF-8 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djna.nosys=true ...

左邊的第一個數字是 37605,也就是程序 ID。

接著,您可以產生執行緒傾印並儲存到檔案 dump.txt 中,如下所示:

jstack -l pid >> dump.txt

假使這個方法無效,還有一些其他特定於平台的方法可以產生執行緒傾印。如需詳細的操作說明,請參閱 IntelliJ 支援

建構工具和 Gradle 錯誤的詳細資料

請附上能說明問題的實際或範例專案。這是確保擷取所有必要資訊的最佳方式。請務必移除所有機密資訊,再分享相關資訊。

假使無法分享專案,請指明您目前使用的工具版本 (嘗試先使用最新的穩定版本或預覽版本):

  • Android Gradle 外掛程式版本:選取「檔案」 >「專案結構」,按一下「專案」,然後找出「Android Gradle 外掛程式版本」
  • Gradle 版本:在上述頁面中找出「Gradle 版本」
  • Android Studio 版本:依序選取「說明」>「關於」,然後找出 Android Studio 版本。

此外,請提供下列適用資訊:

  • 假使行為從舊版變更為目前的版本,請指明這兩個版本。
  • 假使建構失敗而發生錯誤,請使用 --stacktrace 選項在指令列中執行建構作業 (例如 ./gradlew <task> --stacktrace) 並向我們提供堆疊追蹤。
  • 假使建構時間超出預期,請嘗試下列其中一種做法:
    • 執行 ./gradlew <task> --scan 並分享已產生的 Gradle 建構作業掃描
    • 執行 ./gradlew <task> -Pandroid.enableProfileJson=true 並分享 <root-project>/build/android-profile 目錄下產生的 Chrome 追蹤記錄檔案。

Android Emulator 錯誤詳細資料

收集模擬器詳細資料最簡單的方法,就是在擴充控制項中使用回報錯誤功能:

  1. 按一下模擬器面板中的「更多」
  2. 在「延伸控制項」視窗中,選取左側的「錯誤報告」

    會開啟一個畫面,供您查看錯誤報告的詳細資料,例如螢幕擷圖、AVD 設定資訊和錯誤報告記錄。您可以在這裡輸入重現步驟,或等到下一個步驟產生的報表再輸入。

  3. 等待錯誤報告完成收集,然後按一下「傳送到 Google」。系統會開啟另一個視窗,方便您將錯誤報告儲存至資料夾,接著開啟瀏覽器,並在 Google Issue Tracker 中建立報表,並填妥必要的模擬器詳細資料。

  4. 在報表中,完成其他詳細資料,例如重現錯誤的步驟,並附加建立錯誤報告時儲存的檔案。

否則,您必須手動輸入下列詳細資料:

  • 模擬器版本。在模擬器中開啟「擴充控制項」,按一下「說明」,然後按一下「相關」分頁找出「模擬器版本」
  • Android SDK 工具版本。 選取鍵「工具」>「SDK Manager」,按一下「SDK 工具」,然後找出「Android SDK 工具」
  • 代管 CPU 模型。
    • Linux:開啟 /proc/cpuinfo
    • Windows:在「我的電腦」上按一下滑鼠右鍵,然後選取「屬性」
    • Mac:按一下 Apple 圖示,然後按一下「關於這台 Mac」
  • 裝置名稱。在「AVD Manager」中,按一下裝置「動作」欄中的開啟下拉式選單,然後選取「檢視詳細資料」(或開啟 $avdname.avd/config.ini 檔案)。找出 hw.device.name 的項目。例如:hw.device.name=Nexus 5