利用 Android Profiler 評估應用性能-CPU Profile

Android Studio 3.0 及更高版本中的 Android Profiler 取代了 Android Monitor 工具。Android Profiler 工具可提供實時數據,幫助您瞭解應用的 CPU、內存、網絡和電池資源使用情況。

要打開 Profiler 窗口,請依次選擇 View > Tool Windows > Profiler,或點擊工具欄中的 Profile 圖標 。如果 Select Deployment Target 對話框提示,請選擇要在哪個設備上分析您的應用。如果您通過 USB 連接了設備但系統未列出該設備,請確保您已啟用 USB 調試。如果您使用的是 Android Emulator 或已取得 root 權限的設備,Android Profiler 將列出所有正在運行的進程,即使這些進程可能無法調試也會列出。當您啟動可調試的應用時,默認情況下會選擇該進程。

Android Profiler 會持續收集分析數據,直到您斷開設備連接或點擊 End Session

使用 CPU Profiler 檢查 CPU Activity 和函數跟蹤

優化應用的 CPU 使用率能帶來諸多好處,如提供更快、更順暢的用戶體驗,以及延長設備電池續航時間。

您可以使用 CPU Profiler 在與應用交互時實時檢查應用的 CPU 使用率和線程活動,也可以檢查記錄的方法跟蹤數據、函數跟蹤數據和系統跟蹤數據的詳細信息。

CPU Profiler 記錄和顯示的特定信息類型由您選擇的記錄配置確定:

  • 系統跟蹤數據:捕獲精細的詳細信息,以便您檢查應用與系統資源的交互情況。
  • 方法和函數跟蹤數據:對於應用進程中的每個線程,您可以瞭解一段時間內執行了哪些方法 (Java) 或函數 (C/C++),以及每個方法或函數在其執行期間消耗的 CPU 資源。您還可以使用方法和函數跟蹤數據來識別調用方和被調用方。調用方是指調用其他方法或函數的方法或函數,而被調用方是指被其他方法或函數調用的方法或函數。您可以使用此信息來確定哪些方法或函數負責調用常常會消耗大量資源的特定任務,並優化應用的代碼以避免不必要的工作。記錄方法跟蹤數據時,您可以選擇“sampled”或“instrumented”記錄。記錄函數跟蹤數據時,只能使用“sampled”記錄。

要打開 CPU Profiler,請按以下步驟操作:

  1. 依次選擇 View > Tool Windows > Profiler 或點擊工具欄中的 Profile 圖標 。如果 Select Deployment Target 對話框顯示提示,請選擇要將您的應用部署到哪個設備上以進行分析。如果您已通過 USB 連接設備但系統未列出該設備,請確保您已啟用 USB 調試。
  2. 點擊 CPU 時間軸上的任意位置以打開 CPU Profiler。

當您打開 CPU Profiler 時,它會立即開始顯示應用的 CPU 使用率和線程活動。系統會顯示類似於圖 1 的界面。

利用 Android Profiler 評估應用性能-CPU Profile

圖 1. CPU Profiler 中的時間軸。

如圖 1 所示,CPU Profiler 的默認視圖包括以下時間軸:

  1. 事件時間軸:顯示應用中的 Activity 在其生命週期內不斷轉換而經歷各種不同狀態的過程,並指示用戶與設備的交互,包括屏幕旋轉事件。如需瞭解如何在搭載 Android 7.1(API 級別 25)及更低版本的設備上啟用事件時間軸,請參閱啟用高級分析。
  2. CPU 時間軸:顯示應用的實時 CPU 使用率(以佔總可用 CPU 時間的百分比表示)以及應用當前使用的線程總數。 此時間軸還會顯示其他進程(如系統進程或其他應用)的 CPU 使用率,以便您可以將其與您應用的 CPU 使用率進行對比。您可以通過沿時間軸的橫軸方向移動鼠標來檢查歷史 CPU 使用率數據。
  3. 線程活動時間軸:列出屬於應用進程的每個線程,並使用下面列出的顏色在時間軸上指示它們的活動。記錄跟蹤數據後,您可以從此時間軸上選擇一個線程,以在跟蹤數據窗格中檢查其數據。綠色
    :表示線程處於活動狀態或準備使用 CPU。也就是說,線程處於正在運行或可運行狀態。黃色:表示線程處於活動狀態,但它正在等待一項 I/O 操作(如磁盤或網絡 I/O),然後才能完成它的工作。灰色:表示線程處於休眠狀態並且沒有佔用任何 CPU 時間。 當線程需要訪問尚不可用的資源時,就會出現這種情況。在這種情況下,要麼線程主動進入休眠狀態,要麼內核將線程置於休眠狀態,直到所需的資源可用。CPU Profiler 還會報告 Android Studio 和 Android 平臺添加到應用進程的線程的 CPU 使用率,這些線程包括 JDWP、Profile Saver、Studio:VMStats、Studio:Perfa 和 Studio:Heartbeat 等(不過,它們在線程活動時間軸上顯示的確切名稱可能有所不同)。Android Studio 將報告此數據,以便您確定什麼時候線程活動和 CPU 使用率實際上是由您的應用的代碼引發的。

記錄跟蹤數據

要開始記錄跟蹤數據,請從 CPU Profiler 頂部的下拉菜單中選擇記錄配置,然後點擊 Record

利用 Android Profiler 評估應用性能-CPU Profile

圖 2. CPU Profiler 顯示了正在進行的記錄的狀態、持續時間和類型。

與您的應用交互,然後在完成時點擊 Stop。分析器將自動選擇記錄的時間範圍,並在跟蹤數據窗格中顯示其跟蹤信息,如圖 3 所示。如果要檢查其他線程的跟蹤數據,請從線程活動時間軸上選擇相應線程。

利用 Android Profiler 評估應用性能-CPU Profile

圖 3. 記錄方法跟蹤數據後的 CPU Profiler。

  • 選定範圍:確定要在跟蹤數據窗格中檢查所記錄時間的哪一部分。當您首次記錄跟蹤數據時,CPU Profiler 會自動在 CPU 時間軸上選擇記錄的完整長度。 要僅檢查已記錄的時間範圍中的一部分的跟蹤數據,請拖動突出顯示區域的邊緣。
  • 時間戳:指示所記錄跟蹤數據的開始和結束時間(相對於分析器開始收集 CPU 使用率信息的時間)。要選擇完整的記錄,請點擊時間戳。
  • 跟蹤數據窗格:顯示您選擇的時間範圍和線程的跟蹤數據。此窗格要在您至少記錄一條跟蹤數據後才會顯示。 在此窗格中,您可以選擇如何查看每個堆棧軌跡(使用跟蹤數據標籤頁),以及如何測量執行時間(使用時間參考下拉菜單)。
  • 跟蹤數據窗格標籤頁:選擇如何顯示跟蹤數據詳細信息。如需詳細瞭解各個選項,請參閱檢查跟蹤數據。
  • 時間參考菜單:選擇以下選項之一,以確定如何測量每次調用的時間信息:
    Wall clock time:該時間信息表示實際經過的時間。Thread time:該時間信息表示實際經過的時間減去線程沒有佔用 CPU 資源的那部分時間。對於任何給定的調用,其線程時間始終小於或等於其掛鐘時間。使用線程時間可以讓您更好地瞭解線程的實際 CPU 使用率中有多少是給定方法或函數佔用的。
  • 過濾器:按函數、方法、類或軟件包名稱過濾跟蹤數據。例如,如果您要快速識別與特定調用相關的跟蹤數據,請點擊 Filter 圖標 或按 Ctrl + F(在 Mac 上,按 Command + F 鍵),然後在搜索字段中輸入相應的名稱。在 Call chartFlame chart 標籤頁中,會突出顯示包含符合搜索查詢條件的調用、軟件包或類的調用堆棧。在 Top downBottom up 標籤頁中,這些調用堆棧優先於其他跟蹤結果。您還可以通過勾選搜索字段旁邊的相應方框來啟用以下選項:Regex:要在您的搜索中包含正則表達式,請使用此選項。
    Match case:如果您的搜索區分大小寫,請使用此選項。
  • 選擇記錄配置

    在開始記錄跟蹤信息之前,請為要捕獲的分析信息選擇適當的記錄配置:

    • 對 Java 方法採樣:在應用的 Java 代碼執行期間,頻繁捕獲應用的調用堆棧。分析器會比較捕獲的數據集,以推導與應用的 Java 代碼執行有關的時間和資源使用信息。基於採樣的跟蹤存在一個固有的問題,那就是如果應用在捕獲調用堆棧後進入一個方法並在下次捕獲前退出該方法,分析器將不會記錄該方法調用。如果您想要跟蹤生命週期如此短的方法,應使用檢測跟蹤。
    • 跟蹤 Java 方法:在運行時檢測應用,以在每個方法調用開始和結束時記錄一個時間戳。系統會收集並比較這些時間戳,以生成方法跟蹤數據,包括時間信息和 CPU 使用率。請注意,與檢測每個方法相關的開銷會影響運行時性能,並且可能會影響分析數據;對於生命週期相對較短的方法,這一點更為明顯。此外,如果應用在短時間內執行大量方法,則分析器可能很快就會超出其文件大小限制,因而不能再記錄更多跟蹤數據。
    • 對 C/C++ 函數採樣:捕獲應用的原生線程的採樣跟蹤數據。要使用此配置,您必須將應用部署到搭載 Android 8.0(API 級別 26)或更高版本的設備上。在內部,此配置使用 simpleperf 跟蹤應用的原生代碼。如果要為 simpleperf 指定其他選項,如對特定設備 CPU 採樣或指定高精度採樣持續時間,您可以從命令行使用 simpleperf。
    • 跟蹤系統調用:捕獲非常翔實的細節,以便您檢查應用與系統資源的交互情況。您可以檢查線程狀態的確切時間和持續時間、直觀地查看所有內核的 CPU 瓶頸在何處,並添加要分析的自定義跟蹤事件。 當您排查性能問題時,此類信息至關重要。要使用此配置,您必須將應用部署到搭載 Android 7.0(API 級別 24)或更高版本的設備上。使用此跟蹤配置時,您可以通過檢測代碼,在分析器時間軸上直觀地標記重要的代碼例程。要檢測 C/C++ 代碼,請使用由 trace.h 提供的原生跟蹤 API。要檢測 Java 代碼,請使用 Trace 類。如需瞭解詳情,請參閱檢測您的應用代碼。此跟蹤配置建立在 systrace 的基礎之上。您可以使用 systrace 命令行實用程序指定除 CPU Profiler 提供的選項之外的其他選項。systrace 提供的其他系統級數據可幫助您檢查原生系統進程並排查丟幀或幀延遲問題。

    創建、修改或查看記錄配置

    您可以在 CPU Recording Configurations 對話框中創建、修改和查看記錄配置,從 CPU Profiler 頂部的記錄配置下拉菜單中選擇 Edit configurations 即可打開該對話框。

    要查看某個現有記錄配置的設置,請在 CPU Recording Configurations 對話框的左側窗格中選擇該配置。

    要創建一個新的記錄配置,請執行以下操作:

    1. 點擊對話框左上角的 Add 圖標 。這樣會創建一個包含一些默認設置的新配置。
    2. 為您的配置命名。
    3. 選擇一種 Trace Technology
    4. 對於採樣記錄配置,以微秒 (μs) 為單位指定 Sampling interval。此值表示應用的每個調用堆棧樣本的時間間隔。指定的時間間隔越短,達到記錄數據的文件大小限制就越快。
    5. 對於寫入連接設備的記錄數據,以兆字節 (MB) 為單位指定 File size limit。當您停止記錄時,Android Studio 會解析此數據並將其顯示在分析器窗口中。因此,如果您提高此限制並記錄大量的數據,Android Studio 解析文件所需的時間會大大增加,並且可能會變得無響應。注意:如果
    6. 要接受所做的更改並繼續對其他配置進行更改,請點擊 Apply。要接受進行的所有更改並關閉對話框,請點擊 OK

    使用 Debug API 記錄 CPU 活動

    使用 Debug API,可以讓應用能夠在 CPU Profiler 中開始和停止記錄 CPU 活動。

    當您的應用調用 startMethodTracing(String tracePath) 時,CPU Profiler 將開始記錄;當您的應用調用 stopMethodTracing() 時,CPU Profiler 將停止記錄。在記錄使用此 API 觸發的 CPU 活動時,CPU Profiler 會將 Debug API 顯示為作用中的 CPU 記錄配置。

    要使用 Debug API 控制 CPU 活動的記錄,請將檢測的應用部署到搭載 Android 8.0(API 級別 26)或更高版本的設備上。

    重要提示:Debug 應該與用於開始和停止 CPU 活動記錄的其他方法(如 CPU Profiler 圖形界面中的按鈕,以及在應用啟動時執行的自動記錄的記錄配置中的設置)分開使用。

    在應用啟動過程中記錄 CPU 活動

    要在應用啟動過程中自動開始記錄 CPU 活動,請執行以下操作:

    1. 依次選擇 Run > Edit Configurations
    2. Profiling 標籤中,勾選 Start recording a method trace on startup 旁邊的複選框。
    3. 從菜單中選擇 CPU 記錄配置。
    4. 點擊 Apply
    5. 依次選擇 Run > Profile,將您的應用部署到搭載 Android 8.0(API 級別 26)或更高版本的設備上。

    導出跟蹤數據

    使用 CPU Profiler 記錄 CPU 活動後,您可以將相應數據導出為 .trace 文件,以便與他人共享或日後進行檢查。

    要從 CPU 時間軸導出跟蹤文件,請執行以下操作:

    1. 在 CPU 時間軸上,右鍵點擊要導出的記錄的方法跟蹤數據或系統跟蹤數據。
    2. 從菜單中選擇 Export trace
    3. 瀏覽到要保存文件的目標位置,指定文件名,然後點擊 OK

    要從 Sessions 窗格導出跟蹤文件,請執行以下操作:

    1. Sessions 窗格中,右鍵點擊要導出的記錄的跟蹤數據。
    2. 點擊會話條目右側的 Export method traceExport system trace 按鈕。
    3. 瀏覽到要保存文件的目標位置,指定文件名,然後點擊
      OK

    導入跟蹤數據

    您可以導入使用 Debug API 或 CPU Profiler 創建的 .trace 文件。

    要導入跟蹤文件,請在分析器的 Sessions 窗格中點擊 Start new profiler session 圖標 ,然後選擇 Load from file

    您可以檢查導入到 CPU Profiler 中的跟蹤數據,就像檢查直接在 CPU Profiler 中捕獲的跟蹤數據一樣,但有下面幾點不同:

    • CPU 活動未顯示在 CPU 時間軸上。
    • 線程活動時間軸僅指明瞭可在哪裡獲取各線程的跟蹤數據,而未指明實際線程狀態(如運行中、等待中或休眠中)。

    檢查跟蹤數據

    CPU Profiler 中的跟蹤數據窗格提供多個標籤頁,供您選擇如何查看所記錄的跟蹤數據中的信息。

    要查看方法跟蹤數據和函數跟蹤數據,您可以從

    Call ChartFlame ChartTop DownBottom Up 標籤頁中進行選擇。要查看系統跟蹤數據,您可以從 Trace EventsFlame ChartTop DownBottom Up 標籤頁中進行選擇。

    使用“Call Chart”標籤頁檢查跟蹤數據

    Call Chart 標籤頁會以圖形來呈現方法跟蹤數據或函數跟蹤數據,其中調用的時間段和時間在橫軸上表示,而其被調用方則在縱軸上顯示。對系統 API 的調用顯示為橙色,對應用自有方法的調用顯示為綠色,對第三方 API(包括 Java 語言 API)的調用顯示為藍色。圖 4 顯示了一個調用圖表示例,說明了給定方法或函數的 Self 時間、Children 時間和 Total 時間的概念。

    利用 Android Profiler 評估應用性能-CPU Profile

    圖 4. 一個調用圖表示例,說明了方法 D 的 Self 時間、Children 時間和 Total 時間。

    利用 Android Profiler 評估應用性能-CPU Profile

    example

    使用“Flame Chart”標籤頁檢查跟蹤數據

    Flame Chart 標籤頁提供一個倒置的調用圖表,用來彙總完全相同的調用堆棧。也就是說,將具有相同調用方順序的完全相同的方法或函數收集起來,並在火焰圖中將它們表示為一個較長的橫條(而不是將它們顯示為多個較短的橫條,如調用圖表中所示)。這樣更方便您查看哪些方法或函數消耗的時間最多。不過,這也意味著,橫軸不代表時間軸,而是表示執行每個方法或函數所需的相對時間。

    彙總的調用用於創建火焰圖,如圖 5 所示。 請注意,對於火焰圖中的任何給定調用,佔用最多 CPU 時間的被調用方最先顯示。

    利用 Android Profiler 評估應用性能-CPU Profile

    圖 5. 一個調用圖表,其中的多個方法調用具有相同的調用方順序。

    彙總的調用用於創建火焰圖,如圖 6 所示。 請注意,對於火焰圖中的任何給定調用,佔用最多 CPU 時間的被調用方最先顯示。

    利用 Android Profiler 評估應用性能-CPU Profile

    圖 6. 圖 5 中所示調用圖表的火焰圖表示形式。

    使用“Top Down”和“Bottom Up”檢查跟蹤數據

    Top Down 標籤顯示一個調用列表,在該列表中展開方法或函數節點會顯示它的被調用方。圖 7 顯示了圖 4 中調用圖表的自上而下圖。圖中的每個箭頭都是從調用方指向被調用方。

    如圖 7 所示,在 Top Down 標籤頁中展開方法 A 的節點會顯示它的被調用方,即方法 B 和 D。在此之後,展開方法 D 的節點會顯示它的被調用方,即方法 B 和 C,依此類推。與

    Flame chart 標籤頁類似,“Top Down”樹也彙總了具有相同調用堆棧的完全相同的方法的跟蹤信息。也就是說,Flame chart 標籤頁提供了 Top down 標籤頁的圖形表示方式。

    Top Down 標籤提供以下信息來幫助說明在每個調用上所花的 CPU 時間(時間也可表示為在選定範圍內佔線程總時間的百分比):

    • Self:方法或函數調用在執行自己的代碼(而非被調用方的代碼)上所花的時間,如圖 4 中的方法 D 所示。
    • Children:方法或函數調用在執行它的被調用方(而非自己的代碼)上所花的時間,如圖 4 中的方法 D 所示。
    • Total:方法的 Self 時間和 Children 時間的總和。這表示應用在執行調用時所用的總時間,如圖 4 中的方法 D 所示。
    利用 Android Profiler 評估應用性能-CPU Profile

    圖 7. 一個“Top Down”樹。

    利用 Android Profiler 評估應用性能-CPU Profile

    圖 8. 圖 7 中方法 C 的“Bottom Up”樹。

    Bottom Up 標籤頁顯示一個調用列表,在該列表中展開函數或方法的節點會顯示它的調用方。沿用圖 7 中所示的跟蹤數據示例,圖 8 提供了方法 C 的“Bottom Up”樹。在該“Bottom Up”樹中打開方法 C 的節點會顯示它獨有的各個調用方,即方法 B 和 D。請注意,儘管 B 調用 C 兩次,但在“Bottom Up”樹中展開方法 C 的節點時,B 僅顯示一次。在此之後,展開 B 的節點會顯示它的調用方,即方法 A 和 D。

    Bottom Up 標籤頁用於按照佔用的 CPU 時間由多到少(或由少到多)的順序對方法或函數排序。您可以檢查每個節點以確定哪些調用方在調用這些方法或函數上所花的 CPU 時間最多。 與“Top Down”樹相比,“Bottom Up”樹中每個方法或函數的時間信息參照的是每個樹頂部的方法(頂部節點)。 CPU 時間也可表示為在該記錄期間佔線程總時間的百分比。下表說明了如何解讀頂部節點及其調用方(子節點)的時間信息。

    使用“Trace Events”標籤頁檢查系統跟蹤數據

    檢查系統跟蹤數據時,您可以使用 Trace Events

    標籤查看每個線程上發生的事件的詳細信息。

    要查看某個線程的詳細信息,請在 Threads 窗格中選擇該線程。這樣將在 Kernel 窗格中突出顯示該線程在每個 CPU 內核上的活動,並在 Trace Events 標籤頁中顯示該線程的事件。在 Trace Events 標籤頁中將鼠標指針懸停在某個事件上可查看該事件的名稱以及在每種狀態下所用的時間。

    例如,在圖 9 中,在 Threads 窗格中選擇了 RenderThread,在 Kernel 窗格中突出顯示了該線程在 CPU 0 和 CPU 1 上的活動,並在 Trace Events 標籤頁中顯示了在特定事件上所花的時間。

    利用 Android Profiler 評估應用性能-CPU Profile

    圖 9. 查看渲染線程的 CPU 活動和跟蹤事件。

    檢查幀渲染數據

    您可以檢查應用在主線程和 RenderThread 上渲染每個幀所用的時間,以調查造成界面卡頓和幀速率低的瓶頸。

    要查看幀渲染數據,請使用可讓您跟蹤系統調用的配置記錄跟蹤數據。記錄跟蹤數據後,在名為 FRAMES 的部分下查找有關每個幀的信息。

    對預構建 APK 進行性能剖析和調試

    使用 Android Studio 3.0 及更高版本,您可以對 APK 進行性能剖析和調試,而不必從 Android Studio 項目構建這些 APK。不過,您需要確保是在啟用了調試功能的情況下使用 APK。

    要開始調試 APK,請在 Android Studio 的 Welcome 屏幕中點擊 Profile or debug APK。或者,如果您已經打開一個項目,請在菜單欄中依次點擊 File > Profile or Debug APK。在下一個對話框窗口中,選擇您想要導入 Android Studio 的 APK,然後點擊 OK

    Android Studio 隨後會顯示解壓縮後的 APK 文件,類似於圖 1。這不是完全反編譯的文件集,不過它為 .smali 文件提供了我們更容易讀懂的 .dex 版本。

    利用 Android Profiler 評估應用性能-CPU Profile

    圖 1. 將預構建 APK 導入 Android Studio。

    在“Project”窗格的 Android 視圖中,您可以檢查 APK 的以下內容:

    • APK file:雙擊 APK 可以打開 APK 分析器。
    • manifests:包含從 APK 中提取的應用清單。
    • java:包含 Android Studio 根據 APK 的 DEX 文件反彙編(成為 .smali 文件)的 Java 代碼。此目錄中的每個 .smali 文件對應於一個 Java 類。
    • cpp:如果應用包含原生代碼,此目錄將包含 APK 的原生庫(.so 文件)。
    • External Libraries:包含 Android SDK。

    您可以立即使用 Android Profiler 開始測試應用的性能。

    要調試應用的 Java 代碼,您需要附加 Java 源代碼並在 .java 文件中添加斷點。同樣,要調試原生代碼,您必須附加原生調試符號。

    利用 Android Profiler 評估應用性能-CPU Profile

    attach Java sources

    附加 Java 源代碼

    默認情況下,Android Studio 會從您的 APK 中提取 Java 代碼並將其另存為 .smali 文件。要使用斷點調試 Java 代碼,您需要將 IDE 指向與要調試的 .smali 文件對應的 .java 源文件。

    要附加 Java 源代碼,請按以下步驟操作:

    1. Project 窗格(使用 Android 視圖)中雙擊 .smali 文件。打開該文件後,編輯器會顯示一個要求您選擇 Java 源代碼的警告橫幅,類似於圖 1 中所示。
    2. 點擊編輯器窗口頂部橫幅中的 Attach Java Sources
    3. 轉到包含應用的 Java 源文件的目錄,然後點擊 Open

    Project 窗口中,IDE 會將 .smali 文件替換為對應的 .java 文件。此外,IDE 還會自動包含內部類。現在,您可以添加斷點並像往常一樣調試您的應用。

    附加原生調試符號

    如果您的 APK 包含的原生庫(.so 文件)不包含調試符號,IDE 會在 Messages 窗口中向您顯示一條警告,類似於圖 1 中所示。如果不附加可調試的原生庫,您將無法調試 APK 的原生代碼或使用斷點。

    如果您通過版本號構建 APK 中的原生庫,Android Studio 會檢查符號文件中的版本號是否與原生庫中的版本號匹配,如果不匹配,會拒絕符號文件。如果您不是使用版本號編譯的原生庫,則提供不正確的符號文件可能會導致調試出現問題。

    要附加可調試的原生庫,請按以下步驟操作:

    1. 如果您還未下載,請務必下載 NDK 和工具。
    2. Project 窗口中的 cpp 目錄(只有在您選擇了 Android 視圖時才可見,如圖 2 所示)下,雙擊一個不包含調試符號的原生庫文件。編輯器將顯示一個表格,其中列出了您的 APK 支持的所有 ABI。
    3. 點擊編輯器窗口右上角的
      Add
    4. 轉到包含要附加的可調試原生庫的目錄,然後點擊 OK
    利用 Android Profiler 評估應用性能-CPU Profile

    attach natvie library

    如果 APK 和可調試原生庫是使用不同的工作站編譯的,您還需要指定本地調試符號的路徑,具體操作步驟如下:

    1. 在編輯器窗口的
      Path Mappings 部分中的 Local Paths 列下修改相關字段,添加缺失調試符號的本地路徑,如圖 2 所示。在大多數情況下,您只需提供根文件夾的路徑,Android Studio 會自動檢查子目錄以映射其他源路徑。Android Studio 還會自動將遠程 NDK 的路徑映射到您的本地 NDK 下載路徑。
    2. 點擊編輯器窗口的 Path Mappings 部分中的 Apply Changes


    分享到:


    相關文章: