2014-10-10 29 views
12

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?

risposta

1

Sebbene questa non sia la risposta alla domanda originale (dal momento che Instant Run non esisteva nel 2014), è possibile che l'esecuzione istantanea possa causare problemi. Il mio processo è stato:

  • installazione plug Tessuto
  • Genera codice Crashlytics (compresi chiave API nel manifesto)
  • Passa alla fabric.properties file di
  • Passare un'ora cercando di capire il motivo per cui non funzionava
  • Disabilita istantanea Esegui -> Rebuild -> Installa -> Successo

sono su Studio Android 2.0.0-beta6. Questo sarà probabilmente risolto in futuro, ma questa era l'unica risorsa che potevo trovare online con lo stesso problema, quindi spero di poter salvare qualcun altro in quell'ora.

+1

Disabilitazione di InstantR un problema risolto per me. Vorrei aver trovato questo post prima di passare un'ora a profetizzare. – Soumya

8

funziona bene con:

# Fabric properties file: app/fabric.properties 
apiSecret=xx68f6074dxxxxxc11dxxx97c172e8ebf0 
apiKey=xxxe76c4xxxx97e8cxxxx0135e9d46f5a2xxx 

Add on .gitignore (per i progetti open source)

RIMUOVERE ingresso sul AndroidManifest.xml:

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

documentazione Oficial: https://docs.fabric.io/android/fabric/settings/working-in-teams.html#android-projects

+0

Non funziona sulla mia parte con fabric.properties. Viene comunque visualizzato il messaggio che il tessuto non può essere inizializzato a causa della mancanza di immissione manifest – CyberpunkDreams

Problemi correlati