java - Crashlytics 在运行时未在 crashlytics.properties 中找到 API key

标签 java android build.gradle properties-file crashlytics

我目前正在实现建议的 API key 切换脚本 here ,除了构建类型而不是口味。我的 build.gradle 看起来像这样:

...
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()
        }
    }
}
...

gradle 文件构建成功,crashlytics.properties 根据构建类型更新正确的信息。建议使用这种使用 crashlytics.properties 的方法 here ,并且除了在 gradle 文件中包含依赖项之外,似乎没有任何其他更新就可以工作。但是,当从主 Activity 调用 Crashlytics.start(this) 时,出现运行时异常:

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"/>

将其剥离为静态 crashlytics.properties 文件(即删除 gradle 文件中的动态脚本并在 crashlytics.properties 中只有一个 apiKey 和 apiSecret)会产生相同的错误,即使它构建成功。

我应该对 AndroidManifest 或 build.gradle 文件进行一些更改以将其指向 crashlytics.properties 吗?

最佳答案

适用于:

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

添加.gitignore(用于开源项目)

删除 AndroidManifest.xml 中的条目:

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

官方文档:https://docs.fabric.io/android/fabric/settings/working-in-teams.html#android-projects

关于java - Crashlytics 在运行时未在 crashlytics.properties 中找到 API key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26290067/

相关文章:

android - ForegroundService 取消通知不起作用

java - 将外部库导入到 eclipse - Android

android - Gradle 配置在新的 Android 构建系统中无法正常工作

android - Gradle : adding assets folder dynamically

java - Pentaho 数据源向导

java - 在j2EE中加载外部文件的最佳方式?

java - ml.DecisionTreeClassificationModel 中的 mllib.DecisionTreeModel.toDebugString() 等效项

java - 启动时启动java进程并在死机时自动重启

android - GNU make - 使用通配符从父目录查找源代码

gradle - 没有为gradle节点插件 'command'属性指定值