개발 중 크래쉬리틱스를 비활성화하는 방법
개발하는 동안 Crashlytics Android SDK를 끄는 간단한 방법이 있습니까?
내가 바보 같은 짓을 할 때마다 충돌이 일어나길 원하지 않습니다.
반면에 나는 언급하고 싶지 않습니다.Crashlytics.start()
그리고 아마도 그것에 대해 언급하지 않고 약속하는 것을 잊는 위험을 감수할 것입니다.
Crashlytics(Fabric 통합 포함)에서 솔루션을 찾았습니다.
응용프로그램 클래스에 다음 코드를 넣습니다.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에서 복사한 사용 안 함 메서드()
EDIT2:
선택적으로 사용자에게 추가할 수에 추가할 수도 있습니다.buildType
꾸벅꾸벅이 명령어는 크래쉬리틱스 매핑 파일을 전송하고 각 빌드에 대해 ID를 생성할 수 없도록 설정하여 해당 맛의 그래들 빌드 속도를 높입니다. (실행 시 크래쉬리틱스를 사용할 수 없도록 설정하지는 않습니다.)여기 마이크 B의 답변을 보세요.
buildTypes {
release {
....
}
debug {
ext.enableCrashlytics = false
}
}
여기 크래슬리틱스의 마크.디버그 빌드를 수행하는 동안 크래시틱스를 비활성화하는 몇 가지 방법이 있습니다!
디버그 및 릴리스 빌드에 대해 다른 Android:versionString을 사용한 다음 디버그 버전에 대해 Crashlytics 웹 대시보드에서 크래시 리포트를 사용하지 않도록 설정합니다.
디버그 플래그를 확인하는 if 문으로 Crashlytics.start() 호출을 래핑합니다.사용자 정의 플래그 또는 여기에 제안된 것과 같은 접근 방식을 사용할 수 있습니다.APK가 서명되었는지 "디버그 빌드"인지 확인하는 방법은?
선택한 답변이 더 이상 정확하지 않습니다.구글은 크래쉬리틱스의 통합을 변경했습니다.현재 버전은.2.9.1
그리고 내가 해야할 일은 추가하는 것 뿐입니다.implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'
그래들 파일로.더 이상 필요한 것은 없지만, 이는 Crashlytics가 항상 작동한다는 것을 의미합니다.
해결책1
릴리스 버전에서는 크래시틱스만 컴파일합니다.
dependencies {
...
releaseImplementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version
}
솔루션2
추가로 Crashlytics를 구성하려면 Debug Builds에서 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());
}
그러면 릴리스 버전에서만 크래시틱스를 사용할 수 있습니다.조심하고 BuildConfig도 확인합니다.DEBUG(DEBUG)는 크래시틱스를 구성할 때 다음과 같이 수행됩니다.
if (!BuildConfig.DEBUG) {
Crashlytics.setUserIdentifier("HASH_ID");
}
그래들을 사용하는 경우에는 맛을 내기만 하면 됩니다.
ext.enableCrashlytics = false
최신 문서를 확인합니다.https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup .
추가하는 것과는 별개로ext.enableCrashlytics = false
당신이 해야할 빌드.등급,
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());
참고: 이 방법을 사용하면 Fabrics는 릴리스 빌드에서만 초기화됩니다(위의 코드에 표시되어 있음).즉, 에서 정적 메서드에 호출을 해야 합니다.Crashlytics
수업시간에if
아래와 같이 Fabrics가 초기화되었는지 확인하는 block.
if (Fabric.isInitialized())
Crashlytics.logException(e);
그렇지 않으면 앱이 다음과 충돌합니다.Must Initialize Fabric before using singleton()
에뮬레이터에서 테스트할 때 오류가 발생했습니다.
2019년답변
릴리스에서 크래시틱스만 활성화하고 디버그에서는 2시간 동안 비활성화하려고 했고 파이어베이스 콘솔에서 업로드된 예외가 있는지 확인하려고 했습니다.
이를 수행하는 방법은 두 가지가 있습니다.
옵션 1
효과는 있지만, 전화를 걸면Crashlytics
디버그 빌드에 대한 메서드는 앱이 충돌합니다.
app/build.gradle
android {
buildTypes {
release {
manifestPlaceholders = [crashlyticsEnabled: true]
}
debug {
manifestPlaceholders = [crashlyticsEnabled: false]
}
Android Manifest.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
}
debug {
ext.enableCrashlytics = false
}
Android Manifest.xml
<manifest
<application
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
생성 시 응용프로그램()
val crashlytics = Crashlytics.Builder()
.core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
.build()
Fabric.with(this, crashlytics)
에 사용합니다.MyApplication#onCreate()
if (!BuildConfig.DEBUG) Crashlytics.start(this);
편집 패브릭으로 업그레이드한 경우 이 답변을 대신 사용합니다.
다른 매니페스트 파일을 필요로 하지 않기 때문에 제가 좋아하는 또 다른 간단한 솔루션:
1단계 - build.gradle에서 매니페스트 자리 표시자 정의
android {
...
buildTypes {
release {
manifestPlaceholders = [crashlytics:"true"]
}
debug {
manifestPlaceholders = [crashlytics:"false"]
}
}
...
}
2단계 - AndroidManifest.xml에서 사용합니다.
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="${crashlytics}" />
구글에 따르면 이 코드를 사용하여 크래쉬리틱스를 비활성화하면 빌드 프로세스도 개선됩니다.
참조-https://developer.android.com/studio/build/optimize-your-build
FirebaseCrashytics를 이용한 2022년 답변.
두 가지 경우가 있습니다.
- 모든 앱 실행에 대해 크래쉬리틱스 데이터 수집을 비활성화하려면(예: 디버그 모드에서 크래쉬리틱스 비활성화) 플래그를 설정하여 매니페스트 파일을 비활성화해야 합니다.
firebase_crashlytics_collection_enabled
로.false
build.gradle (:app)
// Next two flags to enable/disable Crashlytics
def enableCrashlyticsInDebugBuild = false
def enableCrashlyticsInReleaseBuild = true
android {
buildTypes {
release {
manifestPlaceholders = [crashlyticsEnabled:"${enableCrashlyticsInReleaseBuild}"]
}
debug {
manifestPlaceholders = [crashlyticsEnabled:"${enableCrashlyticsInDebugBuild}"]
}
}
}
그런 다음 매니페스트 파일에 아래에 추가합니다.application
꼬리표를 매다
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="${crashlyticsEnabled}" />
- 일부 사용자가 데이터 수집에서 제외될 때 크래시리틱스를 비활성화하려면 다음과 같이 하십시오.
방법을 사용해야 하는 경우setCrashlyticsCollectionEnabled
.
코틀린 API (Java API도 유사):
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false)
false로 설정하면 새 값은 앱을 다음에 실행할 때까지 적용되지 않습니다.
참조:
모든 충돌을 캡처하고(디버그 및 릴리스 빌드의 경우) 크래쉬리틱스 대시보드에서 분리하려면 다음 코드 라인을 build.gradle에 추가할 수 있습니다.
debug {
versionNameSuffix "-DEBUG"
}
예를 들어 앱의 versionName이 1.0.0인 경우 릴리스 빌드는 1.0.0으로 태그가 지정되는 반면 디버그 빌드는 1.0.0-DEBUG입니다.
디버그 빌드에서 성가신 심볼 업로드를 비활성화할 수도 있습니다.
def crashlyticsUploadStoredDeobsDebug = "crashlyticsUploadStoredDeobsDebug"
def crashlyticsUploadDeobsDebug = "crashlyticsUploadDeobsDebug"
tasks.whenTaskAdded { task ->
if (crashlyticsUploadStoredDeobsDebug.equals(task.name) ||
crashlyticsUploadDeobsDebug.equals(task.name)) {
println "Disabling $task.name."
task.enabled = false
}
}
그냥 집어넣어요.build.gradle
사용자의 애플리케이션 모듈에 대해 설명입니다.
여기에는 좋은 답변이 많이 있지만, 테스트를 위해 디버그 빌드를 사용하여 사내 베타 및 연구소 밖 테스트를 수행합니다. 여기서 크래시 로그는 여전히 매우 유용하고 보고하고 싶습니다.OP와 마찬가지로, 제가 원하는 것은 제가 자주 충돌을 일으키고 빠르게 해결하는 능동적인 개발 중에 그것들을 비활성화하는 것이었습니다.
모든 디버그 충돌을 제거하는 대신 장치가 다음 코드로 개발 컴퓨터에 연결되어 있는 동안에만 보고서를 비활성화하도록 선택할 수 있습니다.
if (!Debug.isDebuggerConnected()) {
Fabric.with(this, new Crashlytics());
}
문제는 최신 crashlytics sdk에서 어떤 솔루션도 작동하지 않는다는 것입니다. (저는 2.9.0을 사용하고 있습니다.)
프로그램 생성을 호출하기도 전에 프로젝트에 컴파일되고 실행되기 때문에 코드로는 비활성화할 수 없습니다.따라서 다른 솔루션은 간단합니다. 필요하지 않을 때 충돌 분석을 컴파일하지 마십시오.build.gradle 파일 내에서 'compile' 호출을 'releaseCompile'로 대체합니다.
releaseCompile('com.crashlytics.sdk.android:crashlytics:2.9.0@aar') {
transitive = true
}
다음 버전 com.google에 대해 Firebase Crashlytics를 비활성화하려면 두 가지 옵션이 있습니다.파이어베이스:파이어베이스- crash분해:17.0.0:
- 앱 매니페스트에 메타태그 추가
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
오어
- 앱에서 직접 구성(false로 설정된 경우 새 값은 앱의 다음 실행 시까지 적용되지 않음)
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)
응용프로그램에 클래스가 없는 경우 응용프로그램에서 확장되는 클래스를 만듭니다.
그런 다음 다음 작업을 수행합니다.
public class BaseApplication extends Application { // extend from MultidexApplication if multidex is required by your application
@Override
public void onCreate() {
super.onCreate();
/*
* Crashlytics is enabled by default,
* Disable it for debug builds & USB Debugging
* */
if(BuildConfig.DEBUG){
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false);
}
}
}
AndroidManifest.xml에 클래스를 추가하는 것을 잊지 마십시오.
<application
android:name=".BaseApplication"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
........>
업데이트된 답변: 그레이들 구성에서 크래시리틱스를 비활성화하면 빌드 속도가 향상됩니다.
android {
...
buildTypes {
debug {
ext.enableCrashlytics = false
}
}
}
또는 코틀링크:
android {
...
buildTypes {
getByName("debug") {
extra["enableCrashlytics"] = false
}
}
}
그리고 프로그램적으로 다음을 수행합니다.
// Initializes Fabric for builds that don't use the debug build type.
Crashlytics.Builder()
.core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
.build()
.also { crashlyticsKit ->
Fabric.with(this, crashlyticsKit)
}
또한 디버그 빌드에서 크래쉬리틱스를 계속 사용할 수도 있지만, 크래쉬리틱스가 각 빌드에 대해 새 ID를 생성하지 못하도록 함으로써 빌드 속도가 향상되는 이점을 얻을 수 있습니다.
android {
...
buildTypes {
getByName("debug") {
extra["alwaysUpdateBuildId"] = false
}
}
}
또는 그루비:
android {
...
buildTypes {
debug {
ext.alwaysUpdateBuildId = false
}
}
}
아래 문서 링크 확인: https://developer.android.com/studio/build/optimize-your-build#disable_crashlytics
Gradle을 사용하여 빌드할 때 가장 쉬운 최신 버전:
if (!BuildConfig.DEBUG) {
Fabric.with(this, new Crashlytics());
}
크래쉬리틱스용 패브릭의 새로운 내장 신택스를 사용하며 그라들 빌드와 자동으로 작동합니다.
이상한 문제가 발생했습니다.xialin의 답변(공식 홈페이지에도 나와 있음)을 따라해 보았더니 작동이 되지 않았습니다.알고 보니 제가 언급한 것은BuildConfig
디버그 모드에서도 false로 설정된 정적 DEBUG 변수를 포함하는 Fabric's package.
따라서 앞서 설명한 솔루션을 따르면서도 디버그 보고서가 표시되는 경우 이를 참조해야 합니다.
import com.yourpackagename.BuildConfig;
그리고 이건 아닙니다.
import io.fabric.sdk.android.BuildConfig;
걱정이 되시면BuildConfig.DEBUG
올바르게 설정되지 않음, 사용ApplicationInfo
대신:
boolean isDebug = ( mAppContext.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) != 0;
Crashlytics crashlytics = new Crashlytics.Builder().disabled( isDebug ).build();
Fabric.with( uIContext, crashlytics );
맛을 사용하거나 구성을 만듭니다.개발 빌드에 별도의 빌드 식별자를 사용하면 모든 충돌이 계속해서 별도의 앱으로 이동합니다.빌드를 피어와 공유하거나 디버거 없이 사용할 경우 편리하게 사용할 수 있습니다.이런 거...
productFlavors {
dev {
applicationId "io.yourapp.developement"
}
staging {
applicationId "io.yourapp.staging"
}
production {
applicationId "io.yourapp.app"
}
디버깅 가능한 릴리스 빌드를 원하는 경우 다음 방법을 사용할 수 있습니다.
buildTypes {
release {
signingConfig signingConfigs.config
debuggable true //-> debuggable release build
minifyEnabled true
multiDexEnabled false
ext.enableCrashlytics = true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
buildConfigField 'boolean', 'BUILD_TYPE_DEBUG', 'false'
}
debug {
minifyEnabled false
multiDexEnabled true
ext.enableCrashlytics = false
ext.alwaysUpdateBuildId = false
// Disable fabric build ID generation for debug builds
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
buildConfigField 'boolean', 'BUILD_TYPE_DEBUG', 'true'
}
}
설정할 때debuggable true
BuildConfig.DEBUG는 true로 초기화되므로 BuildConfig 클래스에 해당 변수를 추가했습니다.
Init 패브릭:
Crashlytics crashlytics = new Crashlytics.Builder()
// disable crash reporting in debug build types with custom build type variable
.core(new CrashlyticsCore.Builder().disabled(BuildConfig.BUILD_TYPE_DEBUG).build())
.build();
final Fabric fabric = new Fabric.Builder(this)
.kits(crashlytics)
//enable debugging with debuggable flag in build type
.debuggable(BuildConfig.DEBUG)
.build();
// Initialize Fabric with the debug-disabled crashlytics.
Fabric.with(fabric);
2020년 포스트 패브릭 답변
아래 코드를 응용프로그램 클래스에 붙여넣고 메소드를 호출합니다.setCrashlyticsState
Create에 있는 응용 프로그램에서 확인할 수 있습니다.선택적으로 테스트 장치 ID를 에 추가할 수 있습니다.debugDevices
릴리스 모드로 빌드할 때도 개인 장치를 무시할 수 있도록 해시셋(HashSet)도 제공합니다.
참고. 반환된 장치 ID는Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
고유하거나 일정하지 않다고 보장됩니다(공장 재설정 시 변경되거나 루트 장치에서 수동으로 변경될 수 있음).하지만 충분히 좋을 겁니다.
private final HashSet<String> debugDevices = new HashSet<String>(Arrays.asList("6a3d5c2bae3fd32c"));
private boolean isDebugDevice(String deviceId) {
return debugDevices.contains(deviceId);
}
private void setCrashlyticsState() {
@SuppressLint("HardwareIds")
String deviceId = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
if (BuildConfig.DEBUG || isDebugDevice(deviceId)) {
Log.v("DeviceId", deviceId);
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false);
}
}
BuildConfig를 확인합니다.올바른 BuildConfig 클래스를 살펴보고 있습니다.종종 여러 가지 선택지가 있어서 잘못된 선택지가 끌려 들어갈 수도 있습니다.
원단의 isDebuggable() 공법을 사용할 수 있습니다.
import static io.fabric.sdk.android.Fabric.isDebuggable;
if(! isDebuggable()){
// set Crashlytics ...
}
해피코딩 :)
디버그 모드를 위해 전용 매니페스트 파일을 사용할 수 있습니다(Crashlytics 2.9.7과 함께 사용 가능).
파일 만들기app/src/debug/AndroidManifest.xml
다음을 추가합니다.
<application>
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false"/>
</application>
이 메타 데이터 요소는 debug/AndroidManifest.xml에만 있어야 하며 일반 AndroidManifest.xml에는 넣지 않아야 합니다.
사용하는 솔루션CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()
제게 도움이 되지 않았고, 크래쉬리틱스가 크래쉬리틱스에 의해 초기화된다는 것을 알게 되었습니다.Application.onCreate() 이전의 InitProvider가 호출되거나 모든 활동이 시작됩니다. 즉, 패브릭이 이미 초기화되었기 때문에 애플리케이션이나 활동에서 패브릭을 수동으로 초기화해도 아무런 영향을 미치지 않습니다.
1단계: in build.grade
buildTypes {
debug {
debuggable true
manifestPlaceholders = [enableCrashlytic:false]
}
release {
debuggable false
manifestPlaceholders = [enableCrashlytic:true]
}
}
2단계: 매니페스트에서
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="${enableCrashlytic}" />
3단계: 응용 프로그램 또는 첫 번째 활동에서
private void setupCrashReport() {
if (BuildConfig.DEBUG) return;
Fabric.with(this, new Crashlytics());
}
3단계가 필요한지는 모르겠지만 릴리스 버전이 충돌 없이 작동하는지 확인하기 위해서입니다. 출처: https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt-in_reporting
IDE에서만 실행하고자 하는 경우 플러그인에서 로그아웃하는 것도 방법입니다.다시 로그인하지 않고 빌드를 생성하는 동안 보고서 전송이 중지되는 것으로 보입니다.
나를 위한 일:
releaseCompile 'com.crashlytics.sdk.android:crashlytics:2.9.9'
기본적으로유형:
debug {
ext.enableCrashlytics = false
}
이것을 앱의 빌드에 추가합니다.gradle에 추가합니다.
android { buildTypes { debug { // Disable fabric build ID generation for debug builds ext.enableCrashlytics = false ...
런타임에 Crashlytics 키트를 비활성화합니다.그렇지 않으면 Crashlytics 키트에서 다음 오류가 발생합니다.
// Set up Crashlytics, disabled for debug builds // Add These lines in your app Application class onCreate method 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);
AndroidManifest.xml에서 추가합니다.
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
언급URL : https://stackoverflow.com/questions/16986753/how-to-disable-crashlytics-during-development
'programing' 카테고리의 다른 글
#1227 - 접근이 거부되었습니다. 이 작업을 위해 SUPER 권한이 필요합니다. (0) | 2023.11.01 |
---|---|
Base64 String을 파일 입력 양식과 같은 자바스크립트 파일 개체로 변환하는 방법은 무엇입니까? (0) | 2023.11.01 |
Laravel 5.2 성공 메시지와 함께 다시 연결 (0) | 2023.11.01 |
트리거 내부의 변수 선언 (0) | 2023.11.01 |
스팬 안에 텍스트 설정 (0) | 2023.11.01 |