Advertisement
  1. Code
  2. Android SDK

Báo cáo sự cố với Crashlytics

Scroll to top
Read Time: 13 min

() translation by (you can also view the original English article)

Trong Android, có một xác suất cao cho ứng dụng của bạn bị sự cố ngay cả sau khi bạn đã kiểm thử nó theo cách thủ công và cách tự động. Điều này có thể do các yếu tố như sự không tương thích với các level API khác nhau, kích cỡ màn hình, bộ nhớ điện thoại, cảm biến và sự tùy biến của các nhà cung cấp để cho phù hợp với từng thiết bị. Crashlytics sẽ giúp bạn chẩn đoán các vấn đề này.

Ứng dụng bị sự cố làm cho người dùng của bạn buồn và giận dữ. Họ thậm chí có thể muốn gỡ cài đặt ứng dụng nếu điều này xảy ra thường xuyên. Sau đó cung cấp cho ứng dụng của bạn một bài đánh giá xấu, cho phản hồi tiêu cực trên Play Store và sau đó đi cài đặt ứng dụng của đối thủ cạnh tranh! Trong thị trường ứng dụng ngày nay, việc làm cho người dùng của bạn hài lòng là rất quan trọng cho sự thành công của ứng dụng của bạn.

Không đơn giản để cho ứng dụng của bạn không bị đứng, nhưng giảm thiểu việc ứng dụng bị đứng là rất quan trọng. Trong quá trình phát triển và thử nghiệm, bạn có thể không gặp phải một vấn đề đặc biệt nào, nhưng trong giai đoạn sản phẩm khi người dùng của bạn đang sử dụng nó, bạn sẽ bắt đầu thấy vấn đề xảy ra. Sử dụng một giải pháp báo cáo lỗi mạnh mẽ là điều cần thiết để thu thập thông tin về việc bị sự cố của ứng dụng của bạn và cung cấp cho bạn một cái nhìn sâu sắc về cách làm thế nào bạn có thể khắc phục sự cố để giữ cho người dùng của bạn hài lòng.

Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách sử dụng Crashlytics, một giải pháp báo cáo lỗi miễn phí và mạnh mẽ nhưng nhẹ nhàng, nó là một phần của bộ công cụ phát triển Fabric bởi Twitter. Chúng ta sẽ tạo ra một ứng dụng đơn giản bị sự cố khi một nút được nhấp vào, do đó chúng ta có thể có được cái nhìn sâu sắc về sự cố với Crashlytics.

1. Tại sao sử dụng Crashlytics?

Dưới đây là một vài lý do bạn có thể muốn sử dụng nó:

  • Dễ dàng để thiết lập
  • Không giới hạn ứng dụng, người dùng, và số lần treo
  • Cảnh báo theo thời gian thực
  • Báo cáo sự cố theo thời gian thực
  • Phân tích sâu sự cố
  • Theo dõi ngoại lệ
  • Dễ dàng chia sẻ báo cáo sự cố
  • Phân phối phiên bản beta
  • Một ứng dụng mobile miễn phí để giám sát ứng dụng của bạn và có được cảnh báo theo thời gian thực cho các vấn đề quan trọng
  • Miễn phí!

2. Tạo một dự án Android Studio

Trước tiên, mở Android Studio lên và tạo một dự án mới ''CrashlyticsTutorial" với một Activity được gọi là MainActivity.

Create a new activityCreate a new activityCreate a new activity

3. Cài đặt Plugin Fabric

Trước tiên, bạn phải có một tài khoản tại Fabric để tích hợp Crashlytics vào ứng dụng của bạn. Vì vậy hãy điền vào các chi tiết cần thiết và một email xác nhận sẽ được gửi đến bạn.

Sign up for FabricSign up for FabricSign up for Fabric

Bạn có thể chọn để tích hợp Fabric với dự án của bạn bằng cách tải về plugin cho Android Studio, nó sẽ tự động chỉnh sửa các tập tin cần thiết cho việc tích hợp, hoặc tự chỉnh sửa tập tin build.gradle của bạn. Hướng dẫn này, chúng ta sẽ sử dụng cách dễ nhất, đó là với plugin.

Sau khi nhấp vào liên kết xác nhận, bạn sẽ được hướng dẫn để cài đặt plugin:

Bước 1

Lựa chọn Android như là nền tảng.

Select platform to install Select platform to install Select platform to install

Bước 2

Đối với người dùng Mac: chọn Preferences... từ menu Android Studio/IntelliJ. Người dùng Windows và Linux: chọn Settings từ menu File.

Open Android Studio SettingsPreferencesOpen Android Studio SettingsPreferencesOpen Android Studio SettingsPreferences

Bước 3

Chọn Plugins, nhấp vào nút Browse Repositories và tìm kiếm "Fabric for Android".

Android Studio browse pluginsAndroid Studio browse pluginsAndroid Studio browse plugins

Bước 4

Nhấp vào nút Install plugin để tải về và cài đặt plugin.

Install pluginInstall pluginInstall plugin
Final Fabric integration with Android studioFinal Fabric integration with Android studioFinal Fabric integration with Android studio

4. Tích hợp Crashlytics

Bước 1

Để bắt đầu tích hợp Crashlytics vào dự án Android Studio của bạn, nhập thông tin của bạn để đăng nhập.

Fabric welcome screen in Android Studio Fabric welcome screen in Android Studio Fabric welcome screen in Android Studio

Bước 2

Chọn dự án Android CrashlyticsTutorial và nhấp vào nút Next.

Select project to integrate with FabricSelect project to integrate with FabricSelect project to integrate with Fabric

Bước 3

Fabric sẽ liệt kê tất cả các tổ chức mà bạn đã đăng ký, vì vậy hãy chọn tổ chức mà bạn muốn kết hợp với ứng dụng và nhấp vào nút Next.

Select organisation Select organisation Select organisation

Bước 4

Sau đó Fabric sẽ liệt kê tất cả các bộ dụng cụ của nó. Vì đây là một hướng dẫn Crashlytics, hãy chọn Crashlytics và nhấp vào nút Next.

Select kitSelect kitSelect kit

Bước 5

Nhấp vào nút Install.

Install Crashlytics Install Crashlytics Install Crashlytics

Fabric muốn thực hiện thay đổi vào tập tin build.gradle, MainActivity.javaAndroidManifest.xml của bạn, vì vậy, bấm vào Apply để áp dụng những thay đổi xảy ra.

Final installation screen Final installation screen Final installation screen

Bước 6

Xây dựng và chạy ứng dụng của bạn để chúng ta có thể đảm bảo rằng tất cả mọi thứ được cấu hình đúng. Nếu ứng dụng của bạn được cấu hình thành công, bạn sẽ nhận được một email ngay lập tức được gửi đến địa chỉ email bạn đã sử dụng để đăng ký với Fabric.

Email received from FabricEmail received from FabricEmail received from Fabric

5. Xem bảng điều khiển

Bây giờ thì Crashlytics đã được tích hợp thành công với dự án của chúng ta, hãy truy cập bảng điều khiển chính để xem ứng dụng của chúng ta: CrashlyticsTutorial.

Fabric dashboardFabric dashboardFabric dashboard

Nhấp vào một dự án sẽ mở bảng điều khiển Crashlytics, nó sẽ liệt kê những vấn đề gặp phải. Cho đến lúc này chúng ta vẫn chưa có; về sau, chúng ta sẽ vào lại bảng điều khiển này khi chúng ta tạo ra một sự cố có chủ ý.

Crashlytics dashboardCrashlytics dashboardCrashlytics dashboard

Bên trong bảng điều khiển dự án Crashlytics, bạn có được một cái nhìn tổng quan chung về các sự cố. Bạn có thể lọc sự cố bằng các phiên bản ứng dụng, sự kiện, ngày tháng, tình trạng (mở, đóng cửa hoặc tất cả), thiết bị, Hệ điều hành hoặc hoạt động của người dùng (tuy vậy bộ kit Answers cần phải được kích hoạt để sử dụng tính năng này). Bạn cũng có thể xem tổng số sự cố, non-fatal, người dùng bị ảnh hưởng, và nhiều hơn nữa.

Bộ Answers cho bạn thống kê theo thời gian thực trên cách ứng dụng của bạn đang được sử dụng, bao gồm cả số lượng người dùng hoạt động, độ dài phiên sử dụng, đánh giá sự ổn định và duy trì.

6. Taạo ra một sự cố có chủ ý

Hiểu về sự khác biệt giữa các sự cố và vấn đề

Sự khác biệt giữa các sự cố và vấn đề là Crashlytics kết hợp các sự cố tương tự thành các vấn đề (các dòng code cụ thể xuất hiện để kích hoạt cùng loại sự cố). Ví dụ, nếu bạn đã có 100.000 sự cố được báo cáo, đây có thể được quy vào chỉ 60 vấn đề.

Hãy tạo ra một sự cố có chủ ý và xem vấn đề đăng nhập trên bảng điều khiển.

Tạo một layout

Đây là tập tin layout cho MainActivity:

1
<?xml version="1.0" encoding="utf-8"?>
2
<RelativeLayout
3
    xmlns:android="http://schemas.android.com/apk/res/android"
4
    xmlns:tools="http://schemas.android.com/tools"
5
    android:id="@+id/activity_main"
6
    android:layout_width="match_parent"
7
    android:layout_height="match_parent"
8
    android:paddingLeft="@dimen/activity_horizontal_margin"
9
    android:paddingRight="@dimen/activity_horizontal_margin"
10
    android:paddingTop="@dimen/activity_vertical_margin"
11
    android:paddingBottom="@dimen/activity_vertical_margin"
12
    tools:context="com.chikeandroid.crashlyticstutorial.MainActivity">
13
14
    <Button
15
            android:id="@+id/btn_crash_now"
16
            android:layout_height="wrap_content"
17
            android:layout_width="wrap_content"
18
            android:text="Crash Now!"
19
            android:layout_centerVertical="true"
20
            android:layout_centerHorizontal="true" />
21
22
</RelativeLayout>

Phương thức crashNow()

Sửa đổi lớp MainActivity để chạy phương thức crashNow(), nó sẽ kích hoạt một RuntimeException khi nút được nhấp.

1
package com.chikeandroid.crashlyticstutorial;
2
3
import android.os.Bundle;
4
import android.support.v7.app.AppCompatActivity;
5
import android.view.View;
6
import android.widget.Button;
7
8
import com.crashlytics.android.Crashlytics;
9
10
import io.fabric.sdk.android.Fabric;
11
12
public class MainActivity extends AppCompatActivity {
13
14
    private Button mCrashNowButton;
15
    @Override
16
    protected void onCreate(Bundle savedInstanceState) {
17
        super.onCreate(savedInstanceState);
18
        Fabric.with(this, new Crashlytics());
19
        setContentView(R.layout.activity_main);
20
        
21
        mCrashNowButton = (Button) findViewById(R.id.btn_crash_now);
22
        
23
        mCrashNowButton.setOnClickListener(new View.OnClickListener() {
24
            @Override
25
            public void onClick(View view) {
26
                crashNow();
27
            }
28
        });
29
    }
30
31
    private void crashNow() {
32
        throw new RuntimeException("This is a crash");
33
    }
34
}

Sự cố!

Chạy ứng dụng và nhấp vào nút crash.

app crashing in emulatorapp crashing in emulatorapp crashing in emulator

7. Xem xét lại bảng điều khiển

Sau khi tạo ra sự cố thành công, vào lại bảng điều khiển để xem vấn đề được ghi lại ngay lập tức. Bạn cũng sẽ nhận được một email thông báo từ Fabric về sự cố. Trong bảng điều khiển cho đến lúc này, bây giờ chúng ta có một vấn đề, một sự cố và người dùng bị ảnh hưởng. Bạn có thể tìm kiếm một vấn đề cụ thể với tên tập tin, tên phương thức, số dòng, hoặc ghi chú (cùng một thuật ngữ).

Crashlytics crash overview screenCrashlytics crash overview screenCrashlytics crash overview screen

Khi bạn nhấp vào một vấn đề, nó sẽ mở ra một trang nơi bạn nhận được một báo cáo sâu về sự cố. Trang tập hợp tất cả các sự cố xảy ra.

Crashlytics in-depth overviewCrashlytics in-depth overviewCrashlytics in-depth overview

Các phần quan trọng của giao diện này là như sau:

1

Tên dự án và tên gói, bao gồm cả số dòng nơi xảy ra sự cố

2

Lọc sự cố hiện tại

3

Tổng số sự cố

4

Tổng số người dùng bị ảnh hưởng bởi sự cố

5

Bật/tắt để đánh dấu vấn đề đã đóng hoặc mở

6

Biểu đồ về số sự cố mỗi ngày

7

Nút để chia sẻ các vấn đề thông qua Twitter hoặc với các thành viên trong nhóm của bạn

8

Tỷ lệ phần trăm các thiết bị bị sự cố với ước lượng kích hoạt

9

Tỷ lệ phần trăm sự cố đã xảy ra khi ứng dụng được focus

10 

Tỷ lệ phần trăm các thiết bị sự cố đã được root

11

Phân cấp tên model của thiết bị bị sự cố

12

Phân cấp hệ điều hành của thiết bị sự cố

13

Tải về exception stack trace như một tập tin .txt

14

Một view có thể mở rộng cho stack trace

15

Xem thông tin chi tiết của từng báo cáo sự cố.

Trên trang này, bạn cũng có thể xem ghi chú và viết ghi chú về mỗi sự cố.

8. Các tính năng khác của Crashlytics

Ứng dụng Fabric mobile

Fabric cũng có một ứng dụng điện thoại di động miễn phí có sẵn trên Google Play Store. Với ứng dụng điện thoại di động, bạn nhận được thông báo đẩy ngay lập tức bất cứ khi nào một sự cố nghiêm trọng xảy ra, cũng như một số dữ liệu đưa ra cái nhìn sâu sắc về vấn đề: một phân tích về các nền tảng và thiết bị bị ảnh hưởng, full stack trace, số lượng người dùng bị ảnh hưởng, những người bị ảnh hưởng, ghi chú được nhập về một vấn đề, và một tùy chọn để chia sẻ vấn đề với các thành viên trong nhóm. Tất cả các dữ liệu này được cập nhật theo thời gian thực.

Fabric mobile app screenFabric mobile app screenFabric mobile app screen

Log các ngoại lệ xảy ra

Crashlytics cũng cho phép bạn log lại ngoại lệ xảy ra trong khối catch bằng cách sử dụng Crashlytics.logException(Exception).

1
try {
2
  myMethodThatThrows();
3
} catch (Exception e) {
4
  Crashlytics.logException(e);
5
  // handle your exception here!

6
}

Tất cả các ngoại lệ được log sẽ xuất hiện như là các vấn đề "non-fatal" trong bảng điều khiển Fabric. Crashlytics xử lý ngoại lệ trên một tiến trình nền dành riêng, như vậy việc log ngoại lệ sẽ không ngăn chặn giao diện người dùng của ứng dụng và tác động đến hiệu năng đối với ứng dụng của bạn sẽ nhỏ.

Log tuỳ biến

Khi bạn log một ngoại lệ, bạn có thể tạo một thông điệp log tuỳ biến liên quan đến dữ liệu sự cố của bạn, và nó sẽ được hiển thị trên trang quản lý Crashlytics trên sự cố cụ thể đó.

1
Crashlytics.log(int priority, String tag, String msg);

Ngoài việc xuất hiện trong báo cáo của bạn, nó cũng sẽ được thêm vào LogCat của Android. Để ngăn chặn điều đó xảy ra, hãy sử dụng cái dưới đây để thay thế:

1
Crashlytics.log(String message);

Như trong ví dụ dưới đây:

1
private void crashNow() {
2
    Crashlytics.log("My log message");
3
    throw new RuntimeException("This is a crash");
4
}
Logged message in dashboardLogged message in dashboardLogged message in dashboard

Nhận dạng người dùng duy nhất

Để xác định người dùng cuối duy nhất trong ứng dụng của bạn trong bảng điều khiển để gỡ lỗi một cách dễ dàng, Crashlytics có phương thức dưới đây:

1
Crashlytics.setUserIdentifier("12345");
2
Crashlytics.setUserEmail("fakeemail@gmail.com");
3
Crashlytics.setUserName("Test User");

Sử dụng Crashlytics.setUserIdentifier để cung cấp một số ID, token, hoặc băm nhỏ giá trị định danh duy nhất người dùng trong ứng dụng của bạn mà không tiết lộ hay truyền bất kỳ thông tin cá nhân của họ.

Phân phối phiên bản beta

Nếu bạn muốn phân phối phiên bản beta của ứng dụng của bạn cho một tập hợp người dùng để thử nghiệm và nhận được phản hồi trước khi phát hành ứng dụng của bạn cho công chúng, Crashlytics có một công cụ rất hữu ích miễn phí được gọi là Beta. Tôi sẽ không đi sâu vào nó ở đây, nhưng hãy xem các tài liệu chính thức để biết thêm thông tin.

Vô hiệu hoá Crashlytics cho Debug Build

Bạn có thể vô hiệu hóa Crashlytics cho debug builde, nó sẽ đẩy nhanh tiến trình debug build của bạn.

Trước tiên, thêm vào tập tin build.gradle của bạn:

1
buildTypes {
2
    ...
3
    debug {
4
        // Disable fabric build ID generation for debug builds

5
        ext.enableCrashlytics = false
6
    }
7
}

Sau đó, vô hiệu hóa Crashlytics Kit tại runtime.

1
...
2
@Override
3
protected void onCreate(Bundle savedInstanceState) {
4
    super.onCreate(savedInstanceState);
5
    
6
    // Set up Crashlytics, disabled for debug builds

7
    Crashlytics crashlyticsKit = new Crashlytics.Builder()
8
    .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
9
    .build();
10
    
11
    Fabric.with(this, crashlyticsKit);
12
    setContentView(R.layout.activity_main);
13
14
}

Tổng kết

Crashlytics rất mạnh mẽ và hữu ích để có được các báo cáo sự cố có hiệu quả. Trong hướng dẫn này, bạn đã học được:

  • cách làm thế nào để tích hợp Crashlytics vào dự án Android của bạn
  • cách bảng điều khiên Crashlytics có thể cung cấp cho bạn cái nhìn sâu sắc về một vấn đề
  • cách log ngoại lệ
  • cách viết log tuỳ biến
  • cách nhận dạng người dùng riêng biệt để dễ dàng gỡ lỗi
  • cách vô hiệu hóa Crashlytics cho các debug-build

Để tìm hiểu thêm về Crashlytics, bạn có thể tham khảo tài liệu chính thức. Bạn cũng có thể tham khảo một số hướng dẫn khác của chúng tôi về các dịch vụ dựa trên đám mây cho phát triển Android.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.