Attualmente sto implementando lo script di commutazione della chiave API suggerito here, tranne con tipi di build anziché aromi. Il mio build.gradle assomiglia a questo:Crashlytics non trova la chiave API in crashlytics.properties in fase di esecuzione
...
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()
}
}
}
...
Il file Gradle costruisce con successo, e crashlytics.properties aggiornamenti con le informazioni corrette in base al tipo di costruzione. Questo metodo di utilizzo di crashlytics.properties è stato suggerito here e sembra funzionare senza altri aggiornamenti oltre all'inclusione delle dipendenze nel file gradle. Tuttavia, quando viene chiamato dalla Crashlytics.start(this)
l'attività principale, ottengo un'eccezione di runtime:
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"/>
Spogliarello giù in un file crashlytics.properties statico (ad esempio eliminando lo script dinamica nel file Gradle e solo per avere un apikey e apiSecret in crashlytics.properties) produce lo stesso errore, anche se si costruisce con successo.
C'è qualche modifica all'AndroidManifest o al file build.gradle che dovrei fare per indicarlo verso crashlytics.properties?
Disabilitazione di InstantR un problema risolto per me. Vorrei aver trovato questo post prima di passare un'ora a profetizzare. – Soumya