Aktualnie implementuję skrypt zmiany klucza API sugerowany here, z wyjątkiem typów kompilacji zamiast smaków. Moja build.gradle wygląda następująco:Crashlytics nie znajduje klucza API w crashlytics.properties w środowisku wykonawczym
...
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()
}
}
}
...
Plik Gradle buduje pomyślnie, a crashlytics.properties aktualizacje o prawidłowej informacji według rodzaju kompilacji. Ta metoda użycia crashlytics.properties została zasugerowana jako here i wydaje się działać bez żadnych innych aktualizacji innych niż włączenie zależności w pliku gradle. Jednak, gdy Crashlytics.start(this)
jest wywoływana z głównej działalności, otrzymuję wyjątek środowiska wykonawczego:
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"/>
odizolowania go do statycznego pliku crashlytics.properties (czyli usunięcie dynamiczny skrypt w pliku Gradle i tylko o jeden apiKey i apiSecret w crashlytics.properties) generuje ten sam błąd, mimo że kompiluje się pomyślnie.
Czy jest jakaś zmiana w pliku AndroidManifest lub pliku build.gradle, który powinienem skierować na stronę crashlytics.properties?
Wyłączanie funkcji InstantR un naprawiono problem dla mnie. Żałuję, że nie znalazłem tego postu przed spędzeniem godziny na próbie prorokowania. – Soumya