Cách tắt Crashlytics trong quá trình phát triển


245

Có cách nào đơn giản để tắt SDK Android của Crashlytics trong khi phát triển không?

Tôi không muốn nó gửi một vụ tai nạn mỗi khi tôi làm điều gì đó ngu ngốc

Mặt khác, tôi không muốn bình luận Crashlytics.start()và có thể có nguy cơ quên không ghi chú và cam kết


Bạn đã thử xóa khóa api khỏi bảng kê khai chưa, tôi không nhớ đó có phải là sự cố không.
Timmetje

@timmied Nó bị treo. Cũng bình luận toàn bộ dòng trong sự Manifestcố ứng dụng để điều này làm cho câu hỏi hợp pháp hơn một chút.
Michael

Câu trả lời:


172

Marc từ Crashlytics ở đây. Dưới đây là một số cách để vô hiệu hóa Crashlytics trong khi bạn đang thực hiện các bản dựng gỡ lỗi của mình!

  1. Sử dụng một Android khác: versionString để gỡ lỗi và phát hành bản dựng và sau đó vô hiệu hóa báo cáo sự cố từ bảng điều khiển web Crashlytics cho phiên bản gỡ lỗi.

  2. Kết thúc cuộc gọi đến Crashlytics.start () trong câu lệnh if kiểm tra cờ gỡ lỗi. Bạn có thể sử dụng cờ tùy chỉnh hoặc cách tiếp cận như cách được đề xuất ở đây: Làm cách nào để kiểm tra xem APK có được ký hay "gỡ lỗi xây dựng" không?


5
@marcr Làm thế nào về việc chỉ sử dụng BuildConfig.DEBUG?
dannyroa

3
@dannyroa BuildConfig.DEBUG không phải là cờ tiêu chuẩn hoạt động trên tất cả các môi trường xây dựng. Tôi tin rằng nó được đặt một cách nhất quán khi xây dựng với Eclipse & ADT, nhưng không phải ở nơi khác.
marcr

11
BuildConfig.DEBUGnên được sử dụng nếu bạn đang xây dựng bằng Gradle. Nó sẽ luôn được tạo ra đúng cách.
Austyn Mahoney

3
@marcr làm thế nào về phiên bản mới nhất của crashlytics (vì nó dường như được hợp nhất với Fabric), thư viện có thực hiện kiểm tra nội bộ BuildConfig.DEBUGkhông?
akhy

2
@akhyar Nó không được kiểm tra tự động, tôi sử dụng: if (! BuildConfig.DEBUG) {Fabric.with (cái này, Crashlytics mới ());}
Bjorn Kechel

387

Tôi đã tìm thấy giải pháp từ Crashlytics (tích hợp Fabric)

Đặt mã sau trong lớp Ứng dụng của bạn onCreate()

Crashlytics crashlytics = new Crashlytics.Builder().disabled(BuildConfig.DEBUG).build();
Fabric.with(this, crashlytics);

BIÊN TẬP:

Trong Crashalencies 2.3 trở lên, điều này không được chấp nhận. Mã chính xác là:

CrashlyticsCore core = new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build();
Fabric.with(this, new Crashlytics.Builder().core(core).build());

hoặc là

Fabric.with(this, new Crashlytics.Builder().core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build());

(được sao chép từ phương thức không dùng nữa của Crashlytics bị vô hiệu hóa () )


EDIT2:

Bạn cũng có thể tùy ý thêm cái này vào lớp của bạn buildType. Lệnh này vô hiệu hóa việc gửi tệp ánh xạ crashlytics và tạo ID cho mỗi bản dựng, giúp tăng tốc độ xây dựng lớp của các hương vị đó. (Nó không vô hiệu hóa Crashlytics trong thời gian chạy.) Xem câu trả lời của Mike B tại đây.

buildTypes {
    release {
           ....
    }
    debug {
        ext.enableCrashlytics = false
    }
}

2
Điều này sẽ dễ sử dụng hơn nhiều và sẽ ngăn ứng dụng của bạn bị sập nếu bạn thực hiện các cuộc gọi tới Crashlytics trong mã của bạn, bên ngoài lớp Ứng dụng của bạn.
speedynomads

1
Nó đã bị phản đối trong Crashlytics 2.3.0 :(
Damian Walczak

1
ext.enableCrashlytics = false không làm việc cho tôi với 2.5. Trên thực tế, nó không bao giờ làm việc. Ngay cả trước khi Vải.
Bao-Long Nguyễn-Trong

2
Tôi có một mối quan tâm ở đây. Điều này có cho phép Trả lời và Beta không? Có vẻ như điều này sẽ đúng hơn: CrashlyticsCore core = new CrashlyticsCore.Builder (). Bị vô hiệu hóa (BuildConfig.DEBUG) .build (); Fabric.with (this, new answer (), new Beta (), new Crashlytics.Builder (). Core (core) .build ());
gbero

1
ext.enableCrashlytics = false không bị sập nếu bạn sử dụng đúng cách. Cách khắc phục sự cố có trong tài liệu Vải: docs.foven.io/android/crashlytics/build-tools.html .
Frank

46

Câu trả lời được chọn không còn đúng nữa. Google đã thay đổi sự tích hợp của Crashlytics. Phiên bản hiện tại của tôi là 2.9.1và điều duy nhất tôi phải làm là, để thêm implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'vào tập tin Gradle của tôi. Không yêu cầu gì thêm, tốt đẹp nhưng điều này có nghĩa là Crashlytics luôn chạy.

Giải pháp 1

Chỉ biên dịch Crashlytics trong phiên bản phát hành:

dependencies {
   ...
   releaseImplementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version
}

Giải pháp 2

Nếu bạn muốn định cấu hình bổ sung Crashlytics thì Giải pháp 1 không hoạt động, vì các lớp Crashlytics sẽ không được tìm thấy trong Debug Builds. Vì vậy, thay đổi việc thực hiện Gradle trở lại:

implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version

Sau đó đi đến Bản kê khai của bạn và thêm meta-datathẻ sau vào trong applicationthẻ:

<application
        android:name="...>

        <meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="false" />

...

</application>

Thêm vào Hoạt động khởi động của bạn (chỉ yêu cầu một lần, không phải mọi Hoạt động)

if (!BuildConfig.DEBUG) { // only enable bug tracking in release version
   Fabric.with(this, new Crashlytics());
}

Điều này sẽ chỉ kích hoạt Crashlytics trong các phiên bản phát hành. Hãy cẩn thận, đồng thời kiểm tra BuildConfig.DEBUG khi bạn định cấu hình Crashlytics, vd:

if (!BuildConfig.DEBUG) {
   Crashlytics.setUserIdentifier("HASH_ID");
}

2
Điều này có vẻ sạch sẽ. Thay vì khởi tạo trong hoạt động chính, khi không phải trong trường hợp Ứng dụng thay thế?
Jules

Họ tuyên bố trên trang web: Enable collection for selected users by initializing Crashlytics from one of your app's activitiesnhưng tôi đoán nó không thay đổi nhiều nếu bạn khởi tạo Crashlytics trong ứng dụng. Bạn đã thử à? Nếu nó hoạt động, sau đó tôi có thể thêm nó vào câu trả lời của tôi. firebase.google.com/docs/crashlytics/customize-crash-reports
Paul Spiesberger

2
Tôi không thể làm cho bất kỳ giải pháp nào khác hoạt động, để vô hiệu hóa sự cố khi chạy. Giải pháp 1 chỉ hoạt động hoàn hảo - tại sao tôi không nghĩ về điều đó.

Cảm ơn giải pháp. Khi tôi đặt firebase_crashlytics_collection_enabledthành false trong tệp kê khai, sự cố không xuất hiện trên bảng điều khiển (tôi sử dụng v2.9.9). Vì vậy, tôi đã sửa lỗi này bằng cách thêm tệp kê khai riêng để xây dựng gỡ lỗi firebase_crashlytics_collection_enabled=falsetruephát hành
Vasily Kabunov

30

Nếu bạn sử dụng Gradle, chỉ cần thêm nó vào một hương vị:

ext.enableCrashlytics = false

1
Đó chỉ là cho hương vị? Điều gì về gỡ lỗi so với phát hành? Tôi đã cố gắng vô hiệu hóa để gỡ lỗi nhưng vẫn gửi sự cố
xialin

Tôi nghĩ rằng nó chỉ hoạt động trên hương vị. IMO sử dụng cờ Austyn và Marcc nhọn là dễ nhất.
dùng1998494

Tôi tìm ra giải pháp. nhưng không chắc nó có tương thích với Crashlytics cũ không. đó là cho Crashlytics mới trong SDK vải. kiểm tra câu trả lời của tôi dưới đây
xialin

1
Lệnh này vô hiệu hóa việc gửi tệp ánh xạ crashlytics và tạo ID cho mỗi bản dựng, giúp tăng tốc độ xây dựng lớp của các hương vị đó. (Nó không vô hiệu hóa Crashlytics trong thời gian chạy.) Xem câu trả lời của Mike B tại đây: stackoverflow.com/questions/28339323/ chủ
Aphex

18
Điều này đã gây ra một vụ tai nạn ... " This app relies on Crashlytics."
Sakiboy

27

Kiểm tra tài liệu mới nhất. https://docs.foven.io/android/crashlytics/build-tools.html#gradle-advified-setup .

Ngoài việc thêm ext.enableCrashlytics = falsevào build.THER bạn cần làm,

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);

Tôi đã thử theo cách này và vẫn gặp sự cố với ứng dụngThis app relies on Crashlytics. Please sign up for access at
Balflear

Tôi đoán bạn đang thiếu ext.enableCrashlytics = falsetrong build.gradle.
Abhishek Patidar

Không, tôi đã thêm vào loại bản dựng gỡ lỗi trong tệp build.gradle, đó là trong buildTypes -> debug, also i'm applying the plugin via plugin áp dụng: 'io.foven'`
Balflear

Tôi không chắc tại sao giải pháp này thậm chí còn được nâng cấp 24 lần. Sự cố vớiThis app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
TROD

24

Tôi thấy đây là giải pháp dễ nhất:

    release {
        ...
        buildConfigField 'Boolean', 'enableCrashlytics', 'true'
    }
    debug {
        buildConfigField 'Boolean', 'enableCrashlytics', 'false'
    }

Các dòng trên sẽ tạo ra một trường boolean tĩnh được gọi enableCrashlyticstrong BuildConfigtệp mà bạn có thể sử dụng để quyết định có bắt đầu Fabrichay không:

    if (BuildConfig.enableCrashlytics)
        Fabric.with(this, new Crashlytics());

LƯU Ý: Với phương pháp này, Vải chỉ được khởi tạo trong các bản dựng phát hành (như chỉ định trong đoạn mã trên). Điều này có nghĩa là bạn cần đặt các cuộc gọi đến các phương thức thống kê trong Crashlyticslớp trong một ifkhối để kiểm tra xem Vải có được khởi tạo như dưới đây không.

if (Fabric.isInitialized())
    Crashlytics.logException(e);

Nếu không, ứng dụng sẽ Must Initialize Fabric before using singleton()gặp lỗi khi thử nghiệm trên trình giả lập.


17

Trả lời 2019

Tôi đã cố gắng chỉ kích hoạt Crashlytics trong bản phát hành và vô hiệu hóa trong gỡ lỗi trong 2 giờ, kiểm tra bảng điều khiển Firebase để xem liệu Ngoại lệ có được tải lên hay không.

Có 2 cách có thể để làm điều này.

LỰA CHỌN 1

Nó hoạt động, nhưng nếu bạn gọi bất kỳ Crashlyticsphương thức nào trong quá trình gỡ lỗi, ứng dụng sẽ bị sập .

ứng dụng / 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}" />

LỰA CHỌN 2

Một thay thế nếu điều đó cho phép bạn gọi Crashlyticscác phương thức mà không cần kiểm tra BuildConfig.DEBUGtrước. Với thiết lập này, bạn có thể gọi các phương thức như một cách an toàn Crashlytics.logException()- đơn giản là chúng không làm gì trong các bản dựng gỡ lỗi. Tôi không thấy các báo cáo được tải lên trong gỡ lỗi.

ứng dụng / 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" />

Ứng dụng onCreate ()

val crashlytics = Crashlytics.Builder()
    .core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build()
Fabric.with(this, crashlytics)

Tôi nghĩ rằng android:value="false"phải được thay đổi để android:value="${enableCrashlytics}". Phải không?
JaydeepW

Một lợi thế khác với Tùy chọn # 2 là bạn bắt đầu với bộ sưu tập phân tích ban đầu bị vô hiệu hóa và sau đó có thể hỏi người dùng trước tiên để theo dõi việc sử dụng ứng dụng của họ (nghĩ GDPR). Sau đó, bạn chỉ thực hiện cuộc gọi Fabric.with nếu người dùng đồng ý theo dõi.
Per Christian Henden

Nhược điểm duy nhất của tùy chọn # 2, là nó vẫn tạo các phiên bản gỡ lỗi trong bảng điều khiển Firebase, mặc dù sẽ không có sự cố nào được hiển thị ở đó (vì chúng bị vô hiệu hóa). Điều này làm cho hai vấn đề - thứ nhất, khó tìm phiên bản phát hành hơn; thứ hai - Bảng điều khiển Firebase chỉ hiển thị 100 phiên bản mới nhất - có thể ngăn bạn nhìn thấy sự cố trong một số phiên bản cũ. Trong bảng điều khiển Fabric, bạn có thể vô hiệu hóa một phiên bản cụ thể, điều này là không thể trong bảng điều khiển của Firebase.
Alex Lipov

14

Sử dụng cái này trong MyApplication#onCreate()

if (!BuildConfig.DEBUG) Crashlytics.start(this);

EDIT Nếu bạn đã nâng cấp lên Fabric, thay vào đó hãy sử dụng câu trả lời này .


BuildConfig.DEBUG không phải lúc nào cũng được đặt đúng. Dựa vào nó để bật / tắt Crashlytics đã gây ra khá nhiều vấn đề cho tôi khi sử dụng IntelliJ.
Zeb Barnett

5
Bạn đang sử dụng công cụ xây dựng nào? Gradle sẽ LUÔN đặt giá trị đó. Đó là một vấn đề một năm trước, nhưng các công cụ xây dựng mới tốt hơn nhiều.
Austyn Mahoney

Tôi đang sử dụng v0.9. + Của plugin Gradle cho IntelliJ và v1.11 cho chính Gradle.
Zeb Barnett

Tôi chưa thấy bất kỳ vấn đề nào trong bất kỳ ứng dụng nào của mình. BuildConfigđược tạo bởi một nhiệm vụ Gradle, được đảm bảo để chạy. Tôi cũng sử dụng buildConfigFieldđể đặt các trường tùy chỉnh và những trường luôn hoạt động. tools.android.com/recent/androidstudio045release cũng gợi ý rằng bạn nên sử dụng BuildConfig.DEBUG.
Austyn Mahoney

Là một người duy tâm, tôi chắc chắn muốn có thể sử dụng nó vì nó sẽ đơn giản hóa quá trình xây dựng không hoàn toàn tự động cho công ty nhỏ mà tôi làm việc. Chỉ là chúng tôi đã phát hành vào một bản dựng phụ thuộc vào lá cờ đó và Crashlytics chưa bao giờ thấy nó được phát hành. Sau khi chúng tôi quay lại để bật nó bằng tay, Crashlytics đã thấy nó ngay lập tức.
Zeb Barnett


9

Một giải pháp đơn giản khác mà tôi thích, vì nó không yêu cầu các tệp kê khai khác nhau:

Bước 1 - xác định trình giữ chỗ tệp kê khai trong build.gradle

android {
    ...
    buildTypes {
        release {
            manifestPlaceholders = [crashlytics:"true"]
        }
        debug {
            manifestPlaceholders = [crashlytics:"false"]
        }
    }
    ...
}

Bước 2 - sử dụng chúng trong AndroidManifest.xml của bạn

<meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="${crashlytics}" />

6

Lưu ý rằng bạn cũng có thể vô hiệu hóa việc tải lên các biểu tượng gây phiền nhiễu trong quá trình gỡ lỗi:

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
    }
}

Chỉ cần đặt nó vào build.gradlemô-đun ứng dụng của bạn.


6

Nếu bạn muốn chụp tất cả các sự cố (để gỡ lỗi và phát hành bản dựng) nhưng muốn tách chúng trong Bảng điều khiển Crashlytics, bạn có thể thêm dòng mã này vào build.gradle:

debug {
    versionNameSuffix "-DEBUG"
}

Ví dụ: nếu phiên bản tên ứng dụng của bạn là 1.0.0, các bản dựng phát hành của bạn sẽ được gắn thẻ là 1.0.0 trong khi các bản dựng gỡ lỗi sẽ là 1.0.0-DEBUG


Đây là nó? Không cần làm hương vị?
portfoliobuilder

6

Có rất nhiều câu trả lời hay ở đây, nhưng để thử nghiệm, tôi sử dụng các bản dựng gỡ lỗi cho betas trong nhà và thử nghiệm ngoài phòng thí nghiệm trong đó nhật ký sự cố vẫn rất hữu ích và tôi vẫn muốn báo cáo chúng. Giống như OP, tất cả những gì tôi muốn là vô hiệu hóa chúng trong quá trình phát triển tích cực, nơi tôi thường gây ra và nhanh chóng giải quyết các sự cố.

Thay vì loại bỏ TẤT CẢ các sự cố gỡ lỗi, bạn có thể chọn chỉ tắt các báo cáo trong khi thiết bị được kết nối với máy phát triển của bạn với mã sau đây.

if (!Debug.isDebuggerConnected()) {
    Fabric.with(this, new Crashlytics());
}

Nó sai. Tôi ghi nhật ký các trường hợp ngoại lệ không nghiêm trọng trong mã của mình bằng cách sử dụng Crashlytics.logException(e)và câu lệnh này đưa ra một ngoại lệ trong các bản dựng gỡ lỗi vì Fabric singleton không được khởi tạo. Nếu bạn sử dụng Crashlytics thì luôn khởi tạo Fabric singleton. Xem câu trả lời của fahmy .
naXa

5

Vấn đề là không có giải pháp nào hoạt động cho sdk phân tích mới nhất. (Tôi đang sử dụng 2.9.0)

Bạn không thể vô hiệu hóa nó bằng mã vì nó biên dịch vào dự án của bạn và chạy trước cả một cuộc gọi onCreate của ứng dụng của bạn. Vì vậy, giải pháp khác rất đơn giản - không biên dịch crashlytics khi không cần thiết. Thay thế cuộc gọi 'biên dịch' bằng 'releaseCompile' trong tệp build.gradle.

 releaseCompile('com.crashlytics.sdk.android:crashlytics:2.9.0@aar') {
        transitive = true
    }

3

Phiên bản cập nhật dễ nhất khi sử dụng Gradle để xây dựng:

if (!BuildConfig.DEBUG) {
    Fabric.with(this, new Crashlytics());
}

Nó sử dụng Cú pháp tích hợp mới từ Fabric cho Crashlytics và hoạt động tự động với bản dựng Gradle.


3

Một vấn đề kỳ lạ mà tôi gặp phải: Tôi đã làm theo câu trả lời của xialin (cũng xuất hiện trên trang web chính thức) và nó không hoạt động. Hóa ra tôi đã tham chiếu BuildConfigtrong gói Fabric cũng chứa biến DEBUG tĩnh được đặt thành false ngay cả trong chế độ gỡ lỗi.

Vì vậy, nếu bạn làm theo giải pháp đã nói ở trên và bạn vẫn nhận được báo cáo gỡ lỗi, hãy đảm bảo rằng bạn đang tham khảo điều này:

import com.yourpackagename.BuildConfig;

Và không phải cái này:

import io.fabric.sdk.android.BuildConfig;    

2

Nếu bạn lo lắng về việc BuildConfig.DEBUGkhông được thiết lập chính xác, hãy sử dụng ApplicationInfothay thế:

boolean isDebug = ( mAppContext.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) != 0;
Crashlytics crashlytics = new Crashlytics.Builder().disabled( isDebug ).build();
Fabric.with( uIContext, crashlytics );

2

Sử dụng hương vị hoặc xây dựng cấu hình. Sử dụng một mã định danh xây dựng riêng cho dev build và tất cả các sự cố của bạn sẽ tiếp tục đến một ứng dụng riêng. Có thể có ích trong trường hợp chia sẻ bản dựng với các đồng nghiệp hoặc sử dụng nó mà không cần trình gỡ lỗi. Một cái gì đó như thế này -

    productFlavors {
    dev {
        applicationId "io.yourapp.developement"
    }
    staging {
        applicationId "io.yourapp.staging"
    }

    production {
        applicationId "io.yourapp.app"
    }

2

Nếu bạn muốn xây dựng bản phát hành có thể sửa lỗi, đây là cách:

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'
    }
}

Khi bạn đặt debuggable true BuildConfig.DEBUG sẽ được khởi tạo bằng true, đó là lý do tại sao tôi đã thêm biến đó vào lớp BuildConfig.

Vải ban đầu:

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);

Mục đích của ext.enableCrashlyticsext.alwaysUpdateBuildIdvì chúng dường như không được tham chiếu ở bất cứ đâu. Tui bỏ lỡ điều gì vậy?
Jules


BuildConfig.BUILD_TYPE_DEBUG là dự phòng, BuildConfig.DEBUG có thể được sử dụng để nhận cùng một giá trị
Antonis Radz

@AntonisRadz Bởi vì tôi cần một bản phát hành có thể sửa lỗi
M. Reza Nasirloo

1

Chúng ta có thể sử dụng phương thức isDebuggable () của vải.

import static io.fabric.sdk.android.Fabric.isDebuggable;

if(! isDebuggable()){
    // set Crashlytics ... 
}

Chúc mừng mã hóa :)


1

Bạn có thể sử dụng tệp kê khai chuyên dụng cho chế độ gỡ lỗi (hoạt động với tôi với Crashlytics 2.9.7):

Tạo tập tin app/src/debug/AndroidManifest.xmlvà thêm vào như sau:

<application>

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false"/>

</application>

Lưu ý rằng yếu tố siêu dữ liệu này phải được đưa vào debug / AndroidManifest.xml chỉ , và không vào AndroidManifest.xml thường xuyên

Giải pháp sử dụng CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()không hiệu quả với tôi và tôi phát hiện ra rằng crashlytics được CrashlyticsInitProvider khởi tạo trước khi Application.onCreate () được gọi hoặc bất kỳ hoạt động nào được bắt đầu, điều đó có nghĩa là khởi tạo thủ công vải trong ứng dụng hoặc hoạt động không có hiệu ứng vì vải đã được khởi tạo.


1

Bước 1: Trong bản dựng.

buildTypes {
        debug {
            debuggable true
            manifestPlaceholders = [enableCrashlytic:false]
        }
        release {
            debuggable false
            manifestPlaceholders = [enableCrashlytic:true]
        }
    }

Bước 2: Trong bảng kê khai

<meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="${enableCrashlytic}" />

Bước 3: Trong ứng dụng hoặc Hoạt động đầu tiên

private void setupCrashReport() {
        if (BuildConfig.DEBUG) return;
        Fabric.with(this, new Crashlytics());
    }

Tôi không chắc liệu bước 3 có cần thiết hay không, nhưng để đảm bảo phiên bản phát hành sẽ hoạt động mà không gặp sự cố. nguồn: https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt-in_Vporting


1

Công việc này đối với tôi:

    releaseCompile  'com.crashlytics.sdk.android:crashlytics:2.9.9'

và trong buildTypes:

debug {
ext.enableCrashlytics = false
}

Làm thế nào về việc sử dụng Crashlytics trong mã? Nó sẽ cung cấp cho bạn các lỗi biên dịch.
Micer

1

Có hai tùy chọn để tắt Firebase Crashlytics cho phiên bản sau com.google.firebase: firebase-crashlytics: 17.0.0:

  1. Thêm thẻ meta vào Bản kê khai của ứng dụng

<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />

HOẶC LÀ

  1. Định cấu hình trực tiếp trong ứng dụng (lưu ý khi được đặt thành false, giá trị mới không áp dụng cho đến lần chạy ứng dụng tiếp theo)

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)


0

Một cách khác nếu bạn chỉ muốn làm điều đó trên IDE của mình là đăng xuất khỏi plugin. Rõ ràng nó sẽ ngừng gửi báo cáo trong khi bạn đang tạo các bản dựng mà không đăng nhập lại.


0
  1. Thêm phần này vào build.gradle của ứng dụng của bạn:

    android {
        buildTypes {
            debug {
              // Disable fabric build ID generation for debug builds
              ext.enableCrashlytics = false
              ...
  2. Vô hiệu hóa bộ Crashlytics khi chạy. Nếu không, bộ công cụ Crashlytics sẽ đưa ra lỗi:

    // 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);
  3. Trong AndroidManifest.xml, thêm

    <meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="false" />

0

2020 Trả lời vải

Dán mã dưới đây vào lớp Ứng dụng của bạn và gọi phương thức setCrashlyticsStatetừ ứng dụng của bạn onCreate. Bạn có thể tùy ý thêm Id thiết bị thử nghiệm của mình vàodebugDevices Hashset để có thể bỏ qua các thiết bị cá nhân của bạn, ngay cả khi xây dựng ở chế độ phát hành.

Ghi chú. Id thiết bị được trả về bởi Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);không được đảm bảo là duy nhất hoặc không đổi (Nó có thể thay đổi khi khôi phục cài đặt gốc hoặc thủ công trên thiết bị đã root). Nhưng nó phải đủ tốt.

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);
    }
}

Kiểm tra BuildConfig. đang xem xét lớp BuildConfig chính xác. Thường có một vài lựa chọn và cái sai có thể được kéo vào.


-8

Đây là câu trả lời ngớ ngẩn, tôi biết
Chỉ cần bình luận Fabric.with(this, new Crashlytics());, làm việc trên đó và bỏ ghi chú khi bạn muốn phát hành nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.