2014-10-10 15 views
12

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?

Odpowiedz

1

Chociaż nie jest to odpowiedź na oryginalne pytanie (ponieważ funkcja Instant Run nie istniała w 2014 r.), Może się okazać, że funkcja Instant Run może powodować problemy. Mój proces był:

  • zainstalować wtyczkę Fabric
  • Generowanie kodu Crashlytics (w tym klucz API w manifeście)
  • Przełącz na fabric.properties plik
  • spędzić godzinę próbuje dowiedzieć się, dlaczego to nie działa
  • Wyłącz Natychmiastowa Uruchom -> Rebuild -> Install -> Sukces

jestem na Android Studio 2.0.0-beta6. Prawdopodobnie zostanie to rozwiązane w przyszłości, ale był to jedyny zasób, jaki mogłem znaleźć w Internecie z tym samym problemem, więc mam nadzieję, że uda mi się ocalić kogoś innego o tej godzinie.

+1

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

8

Działa dobrze z:

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

Dodaj na .gitignore (dla projektów Open Source)

usunąć wpis na AndroidManifest.xml:

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

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

+0

Nie działa na moim końcu z fabric.properties. Nadal otrzymuję komunikat, że tkanina nie może zostać zainicjalizowana z powodu braku wyraźnego wpisu – CyberpunkDreams

Powiązane problemy