Crashlytics 在运行时未在 crashlytics.properties 中找到 API Key
2022-09-03 06:37:36
我目前正在实现此处建议的 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()
}
}
}
...
gradle 文件生成成功,并且 crashlytics.properties 会根据生成类型使用正确的信息进行更新。这里建议使用 crashlytics.properties 的这种方法,除了在 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 文件中的动态脚本,在 crashlytics.properties 中只有一个 apiKey 和 apiSecret)会产生相同的错误,即使它成功构建。
AndroidManifest或build.gradle文件是否有一些更改,我应该将其指向crashlytics.properties?