Gỡ rối mã nguồn hoặc thay thế dấu vết ngăn xếp của sự cố bằng biểu tượng

Sự cố và lỗi ANR trên Android gây ra dấu vết ngăn xếp. Dấu vết ngăn xếp được coi như ảnh chụp nhanh hiện trạng trình tự của các hàm được lồng và gọi trong chương trình của bạn tới thời điểm xảy ra sự cố. Các ảnh chụp nhanh này có thể giúp bạn xác định và khắc phục mọi vấn đề trong nguồn.

Nếu bạn sử dụng Java để phát triển ứng dụng hoặc trò chơi, đồng thời, sử dụng ProGuard để tối ưu hóa và làm rối mã nguồn tệp APK thì bạn có thể tải một tệp ánh xạ ProGuard lên cho từng phiên bản của ứng dụng đó trên Play Console. Nếu bạn sử dụng mã gốc, chẳng hạn như C++, để phát triển ứng dụng hoặc trò chơi thì bạn có thể tải một tệp biểu tượng gỡ lỗi lên cho từng phiên bản của ứng dụng đó trên Play Console. Thao tác này giúp việc phân tích và khắc phục sự cố và lỗi ANR của bạn trở nên dễ dàng hơn.

Quan trọng: Chỉ các tệp ánh xạ tương thích với ReTrace mới được hỗ trợ để gỡ rối mã nguồn các ứng dụng được biên dịch trong Java. Đây cũng là định dạng được ProGuard hoặc R8 sử dụng.

Bước 1: Tạo tệp gỡ rối mã nguồn hoặc tệp biểu tượng gỡ lỗi

Để gỡ rối mã nguồn hoặc thay thế các sự cố và lỗi ANR bằng biểu tượng cho một phiên bản của ứng dụng, trước tiên bạn cần tạo các tệp theo yêu cầu cho chính phiên bản này của ứng dụng. Bạn phải tạo và tải một tệp lên cho từng phiên bản mới của ứng dụng thì mới có thể gỡ rối mã nguồn hoặc thay thế bằng biểu tượng.

Java: Tạo tệp ánh xạ ProGuard

Để gỡ rối mã nguồn dấu vết ngăn xếp Java, trước tiên bạn cần tạo một tệp ánh xạ ProGuard. Để tìm hiểu cách thực hiện, hãy truy cập vào trang web của Google Developers.

Mã gốc: Tạo tệp biểu tượng gỡ lỗi

Plugin Android cho Gradle phiên bản 4.1 trở lên

Nếu dự án của bạn xây dựng Android App Bundle thì bạn có thể tự động đưa tệp biểu tượng gỡ lỗi vào đó. Để đưa tệp này vào, hãy thêm nội dung sau đây vào tệp build.gradle:

  • android.defaultConfig.ndk.debugSymbolLevel = 'FULL'

Lưu ý: Tệp biểu tượng gỡ lỗi chỉ được giới hạn trong 300 MB. Nếu mức sử dụng của biểu tượng gỡ lỗi quá lớn, hãy dùng SYMBOL_TABLE thay cho FULL để giảm kích thước tệp.

Nếu dự án của bạn xây dựng APK, hãy thiết lập cài đặt dựng build.gradle trên đây để tạo tệp biểu tượng gỡ lỗi riêng rẽ. Tải tệp biểu tượng gỡ lỗi lên Google Play Console theo cách thủ công như được mô tả dưới đây trong Bước 2: Tải tệp gỡ rối mã nguồn hoặc tệp thay thế bằng biểu tượng lên. Là một phần trong quy trình xây dựng, Plugin Android cho Gradle sẽ cho ra tệp này tại vị trí trong dự án như dưới đây:

  • app/build/outputs/native-debug-symbols/variant-name/native-debug-symbols.zip

Plugin Android cho Gradle phiên bản 4.0 trở về trước (và các hệ thống xây dựng khác)

Là một phần trong quy trình xây dựng APK hoặc Android App Bundle, Plugin Android cho Gradle sẽ giữ một bản sao của các thư viện chứa biểu tượng gỡ lỗi trong thư mục của dự án. Thư mục này theo cấu trúc tương tự như sau:

app/build/intermediates/cmake/universal/release/obj

├── armeabi-v7a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── arm64-v8a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── x86/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

└── x86_64/

    ├── libgameengine.so

    ├── libothercode.so

    └── libvideocodec.so

Lưu ý: Nếu bạn sử dụng một hệ thống xây dựng khác thì bạn có thể sửa đổi để lưu trữ các thư viện chứa biểu tượng gỡ lỗi trong thư mục có cấu trúc bắt buộc như trên.

  1. Nén nội dung của thư mục này:
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. Tải tệp symbols.zip lên Play Console theo cách thủ công như được mô tả dưới đây trong Bước 2: Tải tệp gỡ rối mã nguồn hoặc tệp thay thế bằng biểu tượng lên.

Tệp biểu tượng gỡ lỗi chỉ được giới hạn trong 300 MB. Nếu tệp của bạn quá lớn, có thể là do tệp .so của bạn chứa bảng biểu tượng (tên hàm) và cũng có thể là thông tin gỡ lỗi DWARF (tên tệp và dòng mã). Các dữ liệu này không cần thiết trong quá trình thay thế mã của bạn bằng biểu tượng và có thể loại bỏ bằng cách chạy lệnh sau:

  • $OBJCOPY --strip-debug lib.so lib.so.sym

Lưu ý: $OBJCOPY chỉ đích danh phiên bản cho ABI mà bạn đang loại bỏ, ví dụ:ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy

Bước 2: Tải tệp gỡ rối mã nguồn hoặc tệp thay thế bằng biểu tượng lên

Để gỡ rối mã nguồn hoặc thay thế các sự cố và lỗi ANR bằng biểu tượng cho một phiên bản của ứng dụng, bạn phải tải các tệp gỡ rối mã nguồn hoặc tệp thay thế bằng biểu tượng lên cho từng phiên bản của ứng dụng.

Quan trọng: Bước này chỉ bắt buộc đối với các nhà phát triển sử dụng APK. Nếu bạn đang sử dụng Android App Bundle và Plugin Android cho Gradle phiên bản 4.1 trở lên thì bạn không cần làm gì ở bước này. Chúng tôi sẽ tự động lấy tệp gỡ rối mã nguồn từ gói và bạn có thể bỏ qua và chuyển tới Bước 3: Xem dấu vết ngăn xếp sự cố đã được gỡ rối mã nguồn. Bạn có thể tìm hiểu thêm về gói ứng dụng trên trang web dành cho nhà phát triển Android.

Tải tệp lên bằng Play Console

Để tải tệp gỡ rối mã nguồn hoặc tệp thay thế bằng biểu tượng lên, bạn hãy thực hiện như sau:

  1. Mở Play Console.
  2. Chọn một ứng dụng.
  3. Trên trình đơn bên trái, chọn Phát hành > Thiết bị và phiên bản> Trình khám phá gói ứng dụng.
  4. Sử dụng bộ chọn ở góc trên cùng bên phải để chọn cấu phần phần mềm có liên quan.
  5. Chọn thẻ Tệp đã tải xuống và di chuyển xuống phần "Nội dung".
  6. Hãy nhấp vào mũi tên tải lên cho tệp ánh xạ hoặc biểu tượng gỡ lỗi áp dụng để tải tệp gỡ rối mã nguồn hoặc tệp biểu tượng gỡ lỗi lên cho phiên bản này của ứng dụng của bạn.
Tải tệp lên bằng API Nhà phát triển Google Play

Để tải tệp lên bằng cách sử dụng API Nhà phát triển Google Play, hãy truy cập trang web của Google Developers.

Bước 3: Xem dấu vết ngăn xếp sự cố đã được gỡ rối mã nguồn

Sau khi bạn đã tải tệp ánh xạ ProGuard hoặc tệp biểu tượng gỡ lỗi lên cho một phiên bản của ứng dụng thì các sự cố và lỗi ANR xuất hiện sau đó sẽ được gỡ rối mã nguồn. Bạn có thể xem lại các dấu vết ngăn xếp đã được gỡ rối mã nguồn cho từng sự cố và lỗi ANR cụ thể tại trang Sự cố và lỗi ANR của ứng dụng.

  1. Mở Play Console.
  2. Chọn một ứng dụng.
  3. Trên trình đơn bên trái, hãy chọn Chất lượng > Android vitals > Sự cố & lỗi ANR.
  4. Chọn một sự cố.
  5. Trong phần "Dấu vết ngăn xếp", bạn sẽ xem được các dấu vết ngăn xếp đã được gỡ rối mã nguồn và thay thế bằng biểu tượng.

Quan trọng: Một khi bạn đã tải tệp ánh xạ lên cho một phiên bản của ứng dụng, chỉ các sự cố và lỗi ANR gặp phải sau này trong phiên bản đó mới được gỡ rối mã nguồn. Các sự cố và lỗi ANR đã xảy ra trên một phiên bản của ứng dụng của bạn trước khi bạn tải tệp ánh xạ tương ứng lên sẽ không được gỡ rối mã nguồn.

Câu hỏi thường gặp

Tôi không muốn sử dụng tính năng gỡ rối mã nguồn/thay thế bằng biểu tượng trên Play Console. Tôi có thể thực hiện ngoại tuyến không?

Play Console sử dụng ndk-stack để thay thế dấu vết ngăn xếp bằng biểu tượng cho các ứng dụng gốc, và ReTrace cho các sự cố Java. Nếu bạn không muốn chia sẻ tệp gỡ rối mã nguồn của mình thì bạn có thể sao chép các ngăn xếp sự cố đã được làm rối mã nguồn từ Play Console và sử dụng công cụ ngoại tuyến phù hợp để thay thế các ngăn xếp này bằng biểu tượng. Tuy nhiên, do quy trình này yêu cầu phải thực hiện thủ công cho từng ngăn xếp sự cố nên sẽ chậm và tốn thời gian. Chỉ cần bạn cung cấp tệp gỡ rối mã nguồn, Play Console sẽ giải quyết vấn đề này cho bạn.

Tôi đã tải tệp gỡ rối mã nguồn/tệp biểu tượng gỡ lỗi lên, vậy vì sao mã nguồn của các sự cố và lỗi ANR của tôi vẫn bị làm rối?

Sau khi bạn đã tải tệp ánh xạ ProGuard hoặc tệp biểu tượng gỡ lỗi lên cho một phiên bản của ứng dụng thì chỉ các sự cố và lỗi ANR xuất hiện sau đó mới được gỡ rối mã nguồn. Bạn sẽ cần dành thời gian để các sự cố và lỗi ANR mới được thiết bị của người dùng báo cáo trước khi bạn có thể thấy được các sự cố và lỗi ANR đã được gỡ rối mã nguồn trên Play Console.

Sau khi tôi đã tải tệp gỡ rối mã nguồn/tệp biểu tượng gỡ lỗi lên, vì sao các sự cố và lỗi ANR của tôi chỉ được gỡ rối mã nguồn một phần?

Việc này xảy ra khi tệp gỡ rối mã nguồn/tệp biểu tượng gỡ lỗi chưa hoàn chỉnh được tải lên. Hãy đảm bảo bạn đã đưa các tệp biểu tượng gỡ lỗi lên cho toàn bộ ứng dụng, đặc biệt khi bạn sử dụng một quy trình xây dựng phức tạp hoặc có nhiều giai đoạn. Một trong những lý do phổ biến nhất gây ra gỡ rối mã nguồn một phần là khi bạn sử dụng thư viện của bên thứ ba. Trong trường hợp này, bạn có thể có khả năng nhận tệp gỡ rối mã nguồn từ nhà cung cấp thư viện.

Sau khi đã tải tệp gỡ rối mã nguồn/tệp biểu tượng gỡ lỗi lên, vì sao có vẻ như tôi gặp ít sự cố và lỗi ANR hơn nhưng các sự cố và lỗi ANR này lại nghiêm trọng hơn?

Khi không có tệp gỡ rối mã nguồn, cùng một sự cố hoặc lỗi ANR trên thiết bị 32-bit và 64-bit, hoặc thiết bị ARM và Intel sẽ được hiển thị riêng rẽ. Bằng cách cung cấp các tệp gỡ rối mã nguồn, chúng tôi có thể phân nhóm các sự cố này với nhau và cho bạn góc nhìn toàn diện hơn về các sự cố và lỗi ANR tác động mạnh nhất tới ứng dụng của bạn.

Điều gì xảy ra nếu tôi quên tải tệp lên?

Nếu bạn quên tải tệp lên cho một phiên bản mới của ứng dụng thì các sự cố và lỗi ANR sẽ bị làm rối mã nguồn trở lại. Hãy làm theo hướng dẫn ở trên để tải lên ngay bây giờ. Sau khi bạn đã tải tệp ánh xạ ProGuard hoặc tệp biểu tượng gỡ lỗi lên cho một phiên bản của ứng dụng thì chỉ các sự cố và lỗi ANR xuất hiện sau đó mới được gỡ rối mã nguồn. Bạn sẽ cần dành thời gian để các sự cố và lỗi ANR mới được thiết bị của người dùng báo cáo trước khi bạn có thể thấy được các sự cố và lỗi ANR đã được gỡ rối mã nguồn trên Console.

Để tránh nguy cơ quên tải tệp lên, hãy xem xét thay đổi quy trình xây dựng của bạn để sử dụng gói ứng dụng với Plugin Android cho Gradle phiên bản 4.1 trở lên. Trong trường hợp này, bạn có thể tự động đưa tệp biểu tượng gỡ lỗi vào gói ứng dụng bằng cách làm theo hướng dẫn trên trang web dành cho nhà phát triển Android.

Điều gì xảy ra nếu tôi tải nhầm tệp lên?

Nếu bạn tải tệp không đúng lên cho một phiên bản của ứng dụng thì các sự cố và lỗi ANR sẽ bị làm rối mã nguồn trở lại. Để tải phiên bản đúng lên, hãy thực hiện như sau:

  1. Mở Play Console.
  2. Chọn một ứng dụng.
  3. Trên trình đơn bên trái, chọn Phát hành > Thiết bị và phiên bản> Trình khám phá gói ứng dụng
  4. Sử dụng bộ chọn ở góc trên cùng bên phải để chọn cấu phần phần mềm có liên quan.
  5. Chọn thẻ Tệp đã tải xuống và di chuyển xuống phần "Nội dung".
  6. Nhấp vào biểu tượng xóa bên cạnh tệp gỡ rối mã nguồn hoặc tệp biểu tượng gỡ lỗi không đúng.
  7. Sau khi đã xóa phiên bản không đúng của tệp, hãy nhấp vào biểu tượng tải lên và tải tệp đúng lên cho phiên bản này của ứng dụng.

Sau khi bạn đã tải tệp ánh xạ ProGuard hoặc tệp biểu tượng gỡ lỗi chính xác lên cho một phiên bản của ứng dụng thì chỉ các sự cố và lỗi ANR xuất hiện sau đó mới được gỡ rối mã nguồn. Bạn sẽ cần dành thời gian để các sự cố và lỗi ANR mới được thiết bị của người dùng báo cáo trước khi bạn có thể thấy được các sự cố và lỗi ANR đã được gỡ rối mã nguồn trên Console.

Mẹo: Để tránh rủi ro tải phiên bản không đúng của tệp lên, hãy xem xét thay đổi quy trình xây dựng của bạn để sử dụng gói ứng dụng với Plugin Android cho Gradle phiên bản 4.1 trở lên. Trong trường hợp này, bạn có thể tự động đưa tệp biểu tượng gỡ lỗi vào gói ứng dụng bằng cách làm theo hướng dẫn trên trang web dành cho nhà phát triển Android.

Tôi hiện đang sử dụng APK. Tôi có thể làm cách nào để chuyển sang sử dụng gói ứng dụng?

Để bắt đầu, hãy truy cập vào trang web dành cho nhà phát triển Android.

Ứng dụng của tôi chứa cả mã gốc và mã Java. Tôi có thể tải đồng thời tệp biểu tượng gỡ lỗi gốc và tệp gỡ rối mã nguồn Java lên được không?

Có.

Thông tin này có hữu ích không?
Chúng tôi có thể cải thiện trang này bằng cách nào?

Bạn cần trợ giúp thêm?

Đăng nhập để xem thêm tùy chọn hỗ trợ giúp nhanh chóng giải quyết sự cố