如何防止使用 Gradle build 在 Crashlytics 中为应用程序生成版本

How do I prevent versions from being generated for app in Crashlytics with Gradle build

我希望在构建时控制构建是否会为我的应用程序创建一个版本。我目前只为特定的 Jenkins 作业启用了 Crashlytics(事实上,如果它不是由我的发布作业构建的,则甚至不会应用该插件),而我的 Jenkins PR 作业同时构建调试和发布。

不幸的是,这似乎仍然会导致 PR 作业的功能分支构建出现在我的应用程序的版本列表中 - 当我尝试过滤最近发布的版本时,这会使搜索栏变得混乱。

我怎样才能做到 没有任何东西 被发送到 crashlytics 服务器?我是否需要隔离 Fabric.with() 调用,以便在禁用 crashlytics 的情况下不使用 运行?与目前相反,它是 运行 和:

Crashlytics crashlyticsKit = new Crashlytics.Builder()
    .core(new CrashlyticsCore.Builder().disabled(!enableCrashlytics()).build())
    .build();
Fabric.with(this, crashlyticsKit);

够了吗?

注意:我看过这个问题,Mike 的回复不可行

来自 Fabric 的迈克。

您根本不需要初始化 Fabric。您的初始化代码会阻止 Crashlytics 被初始化,但不会阻止 Answers,因此数据仍会被发送。

或者,将您的构建分开,这样只有生产构建的数据才流入您的生产构建的组织,然后让所有其他构建流入不同组织的同一个应用程序。类似于 this:

// The following code allows an app to report Crashlytics crashes separately 
// for release and debug buildTypes when using Gradle. This code should be inserted 
// into the specified locations within your build.gradle (Module:app) file

    // The buildTypes { } block should be inserted inside the android { } block
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            ext.crashlyticsApiSecret = "release api secret"
            ext.crashlyticsApiKey = "release api key"
        }
        debug {
            ext.crashlyticsApiSecret = "debug api secret"
            ext.crashlyticsApiKey = "debug api key"
        }
    }

// The following code can be inserted at the bottom of your build.gradle file
import com.crashlytics.tools.utils.PropertiesUtils

File crashlyticsProperties = new File("${project.projectDir.absolutePath}/fabric.properties")
android.applicationVariants.all { variant ->
    def variantSuffix = variant.name.capitalize()
    def generateResourcesTask = project.tasks.getByName("fabricGenerateResources${variantSuffix}")
    def generatePropertiesTask = task("fabricGenerateProperties${variantSuffix}") << {
        Properties properties = new Properties()
        println "...copying apiSecret for ${variant.name}"
        properties.put("apiSecret", variant.buildType.ext.crashlyticsApiSecret)
        println "...copying apiKey for ${variant.name}"
        properties.put("apiKey", variant.buildType.ext.crashlyticsApiKey)
        PropertiesUtils.injectPropertyInFile(crashlyticsProperties, properties, "")
    }
    generateResourcesTask.dependsOn generatePropertiesTask
}