개발하는 동안 Crashlytics Android SDK를 끄는 간단한 방법이 있습니까?
바보 같은 짓을 할 때마다 충돌을 일으키고 싶지 않습니다.
반면에 나는 Crashlytics.start()
주석을 풀고 주석을 풀고 커밋하는 것을 잊어 버릴 위험 이 없습니다.
답변
Crashlytics의 마크가 여기 있습니다. 디버그 빌드를 수행하는 동안 Crashlytics를 비활성화하는 몇 가지 방법이 있습니다.
-
디버그 및 릴리스 빌드에 다른 android : versionString을 사용한 다음 디버그 버전에 대한 Crashlytics 웹 대시 보드에서 충돌보고를 사용하지 않도록 설정하십시오.
-
디버그 플래그를 확인하는 if 문에서 Crashlytics.start ()에 대한 호출을 래핑하십시오. 여기에 제안 된 것과 같은 사용자 정의 플래그 또는 접근 방식을 사용할 수 있습니다. APK가 서명되었는지 또는 “디버그 빌드”인지 확인하는 방법은 무엇입니까?
답변
Crashlytics에서 솔루션을 찾았습니다 (패브릭 통합 사용).
Application 클래스에 다음 코드를 넣습니다. onCreate()
Crashlytics crashlytics = new Crashlytics.Builder().disabled(BuildConfig.DEBUG).build();
Fabric.with(this, crashlytics);
편집하다:
Crashalitics 2.3 이상에서는 더 이상 사용되지 않습니다. 올바른 코드는 다음과 같습니다.
CrashlyticsCore core = new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build();
Fabric.with(this, new Crashlytics.Builder().core(core).build());
또는
Fabric.with(this, new Crashlytics.Builder().core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build());
( Crashlytics 더 이상 사용되지 않는 메소드 disabled () 에서 복사 됨 )
EDIT2 :
선택적으로 이것을 buildType
gradle에 추가 할 수도 있습니다 . 이 명령은 crashlytics 맵핑 파일 전송 및 각 빌드에 대한 ID 생성을 비활성화하여 해당 플레이버의 gradle 빌드 속도를 높입니다. 런타임에 Crashlytics를 비활성화하지는 않습니다. 여기에서 Mike B의 답변을 참조하십시오.
buildTypes {
release {
....
}
debug {
ext.enableCrashlytics = false
}
}
답변
선택한 답변이 더 이상 정확하지 않습니다. Google 은 Crashlytics 의 통합 을 변경했습니다 . 내 현재 버전은 내가 Gradle 파일 2.9.1
에 추가 implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'
하는 것뿐입니다 . 더 이상 필요한 사항은 없지만 Crashlytics가 항상 실행 중임을 의미합니다.
해결책 1
릴리스 버전에서는 Crashlytics 만 컴파일하십시오.
dependencies {
...
releaseImplementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version
}
해결책 2
Crashlytics 를 추가로 구성 하려는 경우 디버그 빌드에서 Crashlytics 클래스를 찾을 수 없으므로 솔루션 1이 작동하지 않습니다. 따라서 Gradle 구현을 다음으로 다시 변경하십시오.
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version
그런 다음 매니페스트로 이동하여 meta-data
태그 안에 다음 태그를 추가하십시오 application
.
<application
android:name="...>
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
...
</application>
Launch-Activity에 추가 (모든 활동이 아니라 한 번만 필요)
if (!BuildConfig.DEBUG) { // only enable bug tracking in release version
Fabric.with(this, new Crashlytics());
}
릴리스 버전에서만 Crashlytics를 사용할 수 있습니다. Crashlytics를 구성 할 때 BuildConfig.DEBUG도 확인하십시오 (예 :
if (!BuildConfig.DEBUG) {
Crashlytics.setUserIdentifier("HASH_ID");
}
답변
Gradle을 사용하는 경우 이것을 풍미에 추가하십시오.
ext.enableCrashlytics = false
답변
최신 문서를 확인하십시오.
https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup .
ext.enableCrashlytics = false
build.grade를 추가하는 것 외에도 ,
Crashlytics crashlyticsKit = new Crashlytics.Builder()
.core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
.build();
// Initialize Fabric with the debug-disabled crashlytics.
Fabric.with(this, crashlyticsKit);
답변
이것이 가장 쉬운 해결책이라는 것을 알았습니다 .
release {
...
buildConfigField 'Boolean', 'enableCrashlytics', 'true'
}
debug {
buildConfigField 'Boolean', 'enableCrashlytics', 'false'
}
위의 행은 파일 enableCrashlytics
에서 호출되는 정적 부울 필드를 작성 BuildConfig
하여 시작 여부를 결정하는 데 사용할 수 있습니다 Fabric
.
if (BuildConfig.enableCrashlytics)
Fabric.with(this, new Crashlytics());
참고 : 이 방법을 사용하면 패브릭은 릴리스 빌드에서만 초기화됩니다 (위 코드에서 표시). 즉, 아래 그림과 같이 Fabric이 초기화되었는지 여부를 확인 Crashlytics
하는 if
블록에 클래스의 static 메소드를 호출해야 합니다.
if (Fabric.isInitialized())
Crashlytics.logException(e);
그렇지 않으면 Must Initialize Fabric before using singleton()
에뮬레이터에서 테스트 할 때 앱에서 오류 가 발생 합니다.
답변
2019 년 답변
릴리스에서 Crashlytics 만 사용하도록 설정하고 디버그에서 2 시간 동안 사용 중지하고 Firebase 콘솔에서 예외가 업로드되었는지 여부를 확인했습니다.
이를 수행 할 수있는 두 가지 방법이 있습니다.
옵션 1
작동하지만 Crashlytics
디버그 빌드에서 메소드 를 호출 하면 앱이 중단 됩니다.
app / build.gradle
android {
buildTypes {
release {
manifestPlaceholders = [crashlyticsEnabled: true]
}
debug {
manifestPlaceholders = [crashlyticsEnabled: false]
}
AndroidManifest.xml
<manifest
<application
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="${crashlyticsEnabled}" />
옵션 2
대안으로 먼저 Crashlytics
확인하지 않고 메소드 를 호출 할 수 있습니다 BuildConfig.DEBUG
. 이 설정을 사용하면 다음과 같은 메소드를 안전하게 호출 할 수 있습니다 Crashlytics.logException()
. 디버그 빌드에서는 아무 것도 수행하지 않습니다. 디버그로 보고서가 업로드되는 것을 볼 수 없습니다.
app / build.gradle
android {
buildTypes {
release {
ext.enableCrashlytics = true
}
release {
ext.enableCrashlytics = false
}
AndroidManifest.xml
<manifest
<application
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
응용 프로그램 onCreate ()
val crashlytics = Crashlytics.Builder()
.core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
.build()
Fabric.with(this, crashlytics)