Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Crashlytics在运行时未在Crashlytics.properties中找到API键_Java_Android_Build.gradle_Properties File_Crashlytics - Fatal编程技术网

Java Crashlytics在运行时未在Crashlytics.properties中找到API键

Java Crashlytics在运行时未在Crashlytics.properties中找到API键,java,android,build.gradle,properties-file,crashlytics,Java,Android,Build.gradle,Properties File,Crashlytics,我目前正在实现建议的API密钥切换脚本,除了使用构建类型而不是风格。我的build.gradle如下所示: ... buildTypes { debug { ... set("crashlyticsApiKey", "API_KEY_1") set("crashlyticsApiSecret", "API_SECRET_1") } release { ... set("crashlyticsA

我目前正在实现建议的API密钥切换脚本,除了使用构建类型而不是风格。我的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()
        }
    }
}
...
将其拆分为静态crashlytics.properties文件(即删除gradle文件中的动态脚本,并在crashlytics.properties中仅包含一个apiKey和apiSecret)会产生相同的错误,即使生成成功


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

虽然这不是原始问题的答案(因为2014年不存在即时运行),但您可能会发现即时运行会导致问题。我的过程是:

  • 安装结构插件
  • 生成Crashlytics代码(包括清单中的API密钥)
  • 切换到
    fabric.properties
    文件
  • 花一个小时试着找出它为什么不起作用
  • 禁用即时运行->重建->安装->成功
我在安卓Studio 2.0.0-beta6上。这可能会在将来得到解决,但这是我能在网上找到的唯一有相同问题的资源,因此希望我能在这一小时内为其他人节省时间。

适用于:

# Fabric properties file: app/fabric.properties
apiSecret=xx68f6074dxxxxxc11dxxx97c172e8ebf0
apiKey=xxxe76c4xxxx97e8cxxxx0135e9d46f5a2xxx
Add-on.gitignore(用于开源项目)

删除AndroidManifest.xml上的条目:

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


官方文档:

禁用InstantRun为我解决了这个问题。希望我在花一个小时尝试预言之前找到这篇文章。不要在fabric.properties上工作。仍然收到由于缺少清单条目而无法初始化结构的消息
<meta-data
    android:name="io.fabric.ApiKey"
    android:value="xxx6c41xxx6ec601xxxd4xxxa2" />