Skip to content

Instantly share code, notes, and snippets.

@alexsinger
Last active July 10, 2019 04:42
Show Gist options
  • Star 29 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save alexsinger/2b5b1b7ae2d2fca1ffdb to your computer and use it in GitHub Desktop.
Save alexsinger/2b5b1b7ae2d2fca1ffdb to your computer and use it in GitHub Desktop.
Separate Crashlytics reporting for debug and release buildTypes using a Gradle build
// 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
}
@wwdablu
Copy link

wwdablu commented Nov 1, 2017

@jeffdgr8
I do have the question of how the apiKey in fabric.properties works. Does this replace the need for having it in the AndroidManifest.xml?

+1
How do we separate out fabric.properties for debug and release build?

@DmitriyYakovlev
Copy link

Hi.
Can you please, specify where to get crashlyticsApiSecret. I can see where to get crashlyticsApiKey. For example, with using of fabric plugin for IDE

@heliobmartins
Copy link

@DmitriyYakovlev, you can get the crashlyticsApiSecret on

https://fabric.io/settings/organizations

Select your desired organisation and right bellow the name of your organization you will find API key and Build Secret.

Hope it helps.

@MehulKK
Copy link

MehulKK commented Jul 10, 2019

If you get an error like could not find method leftshift() after applying the above thing then.
Replace leftshift(<<) with doLast.

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}") doLast {
        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
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment