본문 바로가기
Firebase

[Firebase 사용하기] 2 Crashlytics 안드로이드 앱 버그 리포트 SDK 적용

by Jay Son 아기 냥이 해린 짱💖 2020. 6. 15.

- 안드로이드 앱 오류 보고 솔루션 SDK 적용하기 Crashlytics

 

1. Crashlytics 페이지 진입

   - 화면 상단 적용 프로젝트 선택

   - 왼쪽 하단 Crashlytics 탭 선택

   - Crashlytics 화면 안드로이드 아이콘 선택

 

2. 안드로이드 앱에 Firebase 추가

2.1 앱 등록

2.1.1  패키지 이름

      - 안드로이드 앱 패키지명 등록

         > Android Studio -> build.gradle(Module:app) -> applicationId

         ex) com.json.client.firebasetest

패키지명

2.1.2  앱 닉네임 및 인증서 SHA-1 등록 (선택 사항으로 미입력 진행 가능)

       - 앱 닉네임 : 임의 이름 등록

       - 디버그 서명 인증서 SHA-1 : 앱에 사용할 사이닝 키 SHA-1 등록

2.2 구성 파일 다운로드

     - 다운로드 버튼을 누르고 파일 다운 로드

     - google-services.json 파일을 안드로이드 앱 모듈 루트 디렉토리로 붙혀 넣기

Android Studio -> Project -> app -> google-services.json 확인

 

2.3. Firebase SDK 추가

2.3.1 build.gradle (Module)

    - repositories, dependencies 추가되지 않은 내용이 있다면 오른쪽 복사 아이콘을 누르고 build.gradle 파일에 추가.

    - 보통 google()은 추가되어 있기 때문에 dependencies의 classpath 내용만 추가 

적용 전

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    
    repositories {
        google()
        jcenter()
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.2'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

적용 후

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    
    repositories {
        google()
        jcenter()
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.2'

        // for Crashlytics
        classpath 'com.google.gms:google-services:4.3.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

2.3.2 build.gradle (app)

    - 모듈 추가와 같이 누락된 내용을 추가.

    - 모두 추가 후 Android Studio "Sync now" 을 실행하여 변경된 설정 내용을 적용.

 

적용 전

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "com.json.client.firebasetest"
        minSdkVersion 22
        targetSdkVersion 29
        versionCode 1
        versionName "1.0.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

적용 후

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'  // for Crashlytics

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "com.json.client.firebasetest"
        minSdkVersion 22
        targetSdkVersion 29
        versionCode 1
        versionName "1.0.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'com.google.firebase:firebase-analytics:17.2.2'  // for Crashlytics
}

2.4 앱 설치 확인

     - 앱 설정이 정상적으로 완료 되었는지 확인.

     - 네트워크가 연결되어 있는 단말에 Crashlytics SDK를 등록한 앱을 설치 

     * Crashlytics 등록된 사이닝키와 앱 빌드된 사이닝키가 다를 경우 확인 되지 않음.

       - 앱이 정상 설치 되어 확인 완료 화면.

3. SDK 추가.

3.1 build.gradle(Module)

적용전

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.2'

        // for Crashlytics
        classpath 'com.google.gms:google-services:4.3.3'
        
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

 적용 후 

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    
    repositories {
        google()
        jcenter()

        // for Crashlytics
        maven {
            url 'https://maven.fabric.io/public'
        }
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.2'

        // for Crashlytics
        classpath 'com.google.gms:google-services:4.3.3'
        classpath 'io.fabric.tools:gradle:1.+'
        
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()

        // for Crashlytics
        maven {
            url 'https://s3.amazonaws.com/fabric-artifacts-private/internal-snapshots'
        }
        maven {
            url 'https://maven.fabric.io/public'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

3.2 build.gradle(App)

적용 전

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'  // for Crashlytics

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "com.json.client.firebasetest"
        minSdkVersion 22
        targetSdkVersion 29
        versionCode 1
        versionName "1.0.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'com.google.firebase:firebase-analytics:17.2.2'  // for Crashlytics
}

적용 후

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'  // for Crashlytics
apply plugin: 'io.fabric'  // for Crashlytics

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "com.json.client.firebasetest"
        minSdkVersion 22
        targetSdkVersion 29
        versionCode 1
        versionName "1.0.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'com.google.firebase:firebase-analytics:17.2.2'  // for Crashlytics
    implementation('com.crashlytics.sdk.android:crashlytics:2.7.0-SNAPSHOT@aar') {
        transitive = true;  // for Crashlytics
    }
}

3.3 앱 코드 추가.

     - 앱의 MainActivity에 대한 onCreate() 메소드에서 Crashlytics를 초기화

적용 전

package com.json.client.firebasetest;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);        
    }
}

 적용 후

package com.json.client.firebasetest;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.crashlytics.android.Crashlytics;

import io.fabric.sdk.android.Fabric;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fabric.with(this, new Crashlytics());
        setContentView(R.layout.activity_main);
        
        // Crashlytics 테스트를 위해 강제로 crash 발생
        Crashlytics.getInstance().crash(); // Force a crash
    }
}

 

오류 보고는 5분 내로 Firebase 콘솔에 업데이트 됨.

 

출처 : https://firebase.google.com/docs/crashlytics/get-started-android?hl=ko

 

Android에서 Firebase Crashlytics 시작하기

이 가이드를 따라 Android 앱에 Firebase Crashlytics를 설정하세요. 시작하기 전에 Android 프로젝트에 Firebase를 추가했는지 확인하세요. 빌드 파일에 Crashlytics SDK 추가하기 Crashlytics 저장소 및 종속 항목��

firebase.google.com

3.4 등록 완료

     - SDK 추가 완료 후 앱을 실행 할 경우 Crashlytics 화면 설치 완료 표시됨.

4. 오류 보고 확인

4.1 앱 강제 crash

     - Crashlytics.getInstance().crash(); // Force a crash 코드가 추가되어 앱 실행고 함께 crash 발생

4.2 Crashlytics 보고서 확인

 

안드로이드 Crashlytics SDK 적용 완료

반응형

'Firebase' 카테고리의 다른 글

[Firebase 사용하기] 1 안드로이드 앱 Firebase 등록  (0) 2020.06.15