Crashlytics在运行时无法在crashlytics.properties中找到API密钥
我目前正在实施API密钥切换脚本建议here,除了使用生成类型而不使用flavor。我的build.gradle看起来是这样的:Crashlytics在运行时无法在crashlytics.properties中找到API密钥
...
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文件中包含依赖关系之外没有任何其他更新。然而,当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这个文件中删除动态脚本,只是有一个apiKey和在crashlytics.properties中的apiSecret)会产生相同的错误,即使它成功构建。
是否对AndroidManifest或build.gradle文件进行了一些更改,我应该将它指向crashlytics.properties?
虽然这不是原始问题的答案(因为即时运行在2014年不存在),但您可能会发现即时运行可能会导致问题。我的过程是:
- 安装插件面料
- 生成Crashlytics代码(包括在清单中的API密钥)
- 切换到
fabric.properties
文件 - 花一个小时试图弄清楚为什么它不工作
- 禁用即时运行 - >重建 - >安装 - >成功
我对Android的工作室2.0.0-beta6。这可能会在未来得到解决,但这是我在网上找到的唯一资源,因此希望我可以在那个小时内拯救别人。
工作正常:
# Fabric properties file: app/fabric.properties
apiSecret=xx68f6074dxxxxxc11dxxx97c172e8ebf0
apiKey=xxxe76c4xxxx97e8cxxxx0135e9d46f5a2xxx
添加上的.gitignore(开源项目)
REMOVE项上的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
无法使用fabric.properties工作。由于缺少清单条目,仍然收到织物无法初始化的消息 – CyberpunkDreams 2018-01-16 21:55:38
禁用InstantR我解决了这个问题。希望我在尝试预言之前花了一个小时才找到这篇文章。 – Soumya 2017-11-01 00:07:26