Подтвердить что ты не робот

Crashlytics не находит API-ключ в crashlytics.properties во время выполнения

В настоящее время я реализую коммутатор API Key script, предлагаемый здесь, за исключением типов сборки вместо вкусов. Мой файл 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(т.е. удаляя динамический script в файле gradle и имея только один apiKey и apiSecret в crashlytics.properties), получается такая же ошибка, хотя она успешно строится.

Есть ли какие-то изменения в AndroidManifest или файле build.gradle, который я должен указать, чтобы указать на crashlytics.properties?

4b9b3361

Ответ 1

Работает нормально:

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

Добавить .gitignore (для проектов с открытым исходным кодом)

УДАЛИТЬ запись на AndroidManifest.xml:

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

Официальная документация: https://docs.fabric.io/android/fabric/settings/working-in-teams.html#android-projects

Ответ 2

Хотя это не ответ на исходный вопрос (так как Instant Run не существовал в 2014 году), вы можете обнаружить, что Instant Run может вызвать проблемы. Мой процесс:

  • Установить плагин Fabric
  • Создать код Crashlytics (включая ключ API в манифесте)
  • Переключитесь на fabric.properties файл
  • Проведите час, пытаясь понять, почему он не работает.
  • Отключить мгновенный запуск → Восстановить → Установить → Успех

Я на Android Studio 2.0.0-beta6. Вероятно, это будет разрешено в будущем, но это был единственный ресурс, который я смог найти в Интернете с той же проблемой, поэтому, надеюсь, я смогу спасти кого-то еще в тот час.