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

时间:2018-03-16 18:57:22

标签: crashlytics google-fabric

我希望对构建是否为我的应用创建版本进行构建时控制。我目前只为特定的Jenkins作业启用了Crashlytics(事实上,如果它不是由我的Release作业构建的,那么该插件甚至不应用),而我的Jenkins PR作业同时构建了调试和发布。 / p>

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

如何才能将 nothing 发送到崩解服务器?我是否需要隔离Fabric.with()调用,以便它不会在遇到崩溃的情况下运行?与目前相反,它与:

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

那就够了吗?

注意:我已经看到了这个问题What is an effective way of segregating dev builds in Crashlytics?,迈克的回答是不可行的

1 个答案:

答案 0 :(得分:0)

来自Fabric的Mike。

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

或者,将构建分开,以便仅针对生产构建,数据仅流入组织,仅用于prod构建,然后让所有其他构建流入不同组织中的同一应用程序。像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
}