Crashlytics not finding API Key in crashlytics.properties at runtime

故事扮演 提交于 2019-12-18 04:01:01

问题


I'm currently implementing the API Key switching script suggested here, except with build types instead of flavors. My build.gradle looks like this:

...
buildTypes {
    debug {
        ...
        set("crashlyticsApiKey", "API_KEY_1")
        set("crashlyticsApiSecret", "API_SECRET_1")
    }
    release {
        ...
        set("crashlyticsApiKey", "API_KEY_2")
        set("crashlyticsApiSecret", "API_SECRET_2")
    }
}
...
productFlavors{...}
...
File crashlyticsProperties = new File("${project.projectDir.absolutePath}/crashlytics.properties")

applicationVariants.all { variant ->
    variant.productFlavors.each { flavor ->
        def variantSuffix = variant.name.capitalize()
        def generateResourcesTask = project.tasks.getByName("crashlyticsGenerateResources${variantSuffix}")
        def generatePropertiesTask = task("crashlyticsGenerateProperties${variantSuffix}") << {
            Properties properties = new Properties()
            println "...copying apiKey for ${variant.name}"
            properties.put("apiKey", variant.buildType.crashlyticsApiKey)
            println "...copying apiSecret for ${variant.name}"
            properties.put("apiSecret", variant.buildType.crashlyticsApiSecret)
            properties.store(new FileWriter(crashlyticsProperties), "")
        }
        generateResourcesTask.dependsOn generatePropertiesTask
        def cleanResourcesTask = project.tasks.getByName("crashlyticsCleanupResourcesAfterUpload${variantSuffix}")
        cleanResourcesTask.doLast {
            println "...removing crashlytics.properties"
            crashlyticsProperties.delete()
        }
    }
}
...

The gradle file builds successfully, and crashlytics.properties updates with the correct information according to the build type. This method of using crashlytics.properties was suggested here, and appears to work without any other updates other than the inclusion of dependencies in the gradle file. However, when Crashlytics.start(this) is called from the main activity, I get a runtime exception:

java.lang.RuntimeException: Unable to create application com.lookout.LookoutApplication: java.lang.IllegalArgumentException: Crashlytics could not be initialized, API key missing from AndroidManifest.xml. Add the following tag to your Application element
<meta-data android:name="com.crashlytics.ApiKey" android:value="YOUR_API_KEY"/>

Stripping it down to a static crashlytics.properties file (i.e. removing the dynamic script in the gradle file and just having one apiKey and apiSecret in crashlytics.properties) produces the same error, even though it builds successfully.

Is there some change to the AndroidManifest or the build.gradle file I should be making to point it towards crashlytics.properties?


回答1:


Works fine with:

# Fabric properties file: app/fabric.properties
apiSecret=xx68f6074dxxxxxc11dxxx97c172e8ebf0
apiKey=xxxe76c4xxxx97e8cxxxx0135e9d46f5a2xxx

Add on .gitignore (for open source projects)

REMOVE entry on AndroidManifest.xml:

<meta-data
    android:name="io.fabric.ApiKey"
    android:value="xxx6c41xxx6ec601xxxd4xxxa2" />

Oficial documentation: https://docs.fabric.io/android/fabric/settings/working-in-teams.html#android-projects




回答2:


While this is not the answer to the original question (since Instant Run didn't exist in 2014), you may find that Instant Run can cause problems. My process was:

  • Install Fabric plugin
  • Generate Crashlytics code (including API key in the manifest)
  • Switch to fabric.properties file
  • Spend an hour trying to figure out why it wasn't working
  • Disable Instant Run -> Rebuild -> Install -> Success

I'm on Android Studio 2.0.0-beta6. This will likely be resolved in future, but this was the only resource I could find online with the same problem so hopefully I can save someone else that hour.



来源:https://stackoverflow.com/questions/26290067/crashlytics-not-finding-api-key-in-crashlytics-properties-at-runtime

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!