Crashlytics在运行时没有在crashlytics.properties中找到API密钥

Cla*_*der 15 java android properties-file crashlytics build.gradle

我目前正在实现此处建议的API密钥切换脚本,除了使用构建类型而不是flavor.我的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()
        }
    }
}
...
Run Code Online (Sandbox Code Playgroud)

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"/>
Run Code Online (Sandbox Code Playgroud)

将其拆分为静态crashlytics.properties文件(即删除gradle文件中的动态脚本,并在crashlytics.properties中只有一个apiKey和apiSecret)会产生相同的错误,即使它成功构建.

AndroidManifest或build.gradle文件是否有一些变化我应该指向crashlytics.properties?

Hps*_*urn 14

适用于:

# Fabric properties file: app/fabric.properties
apiSecret=xx68f6074dxxxxxc11dxxx97c172e8ebf0
apiKey=xxxe76c4xxxx97e8cxxxx0135e9d46f5a2xxx
Run Code Online (Sandbox Code Playgroud)

添加.gitignore(用于开源项目)

AndroidManifest.xml上的REMOVE条目:

<meta-data
    android:name="io.fabric.ApiKey"
    android:value="xxx6c41xxx6ec601xxxd4xxxa2" />
Run Code Online (Sandbox Code Playgroud)

官方文档:https://docs.fabric.io/android/fabric/settings/working-in-teams.html#android-projects

  • 我没有使用fabric.properties工作.仍然收到由于缺少清单条目而无法初始化结构的消息 (2认同)

Ada*_*m S 6

虽然这不是原始问题的答案(因为2014年不存在Instant Run),您可能会发现Instant Run可能会导致问题.我的过程是:

  • 安装Fabric插件
  • 生成Crashlytics代码(包括清单中的API密钥)
  • 切换到fabric.properties文件
  • 花一个小时试图弄清楚它为什么不起作用
  • 禁用即时运行 - >重建 - >安装 - >成功

我在Android Studio 2.0.0-beta6上.这可能会在将来得到解决,但这是我在网上找到的唯一有同样问题的资源,所以希望我可以在那个小时保存其他人.

  • 禁用InstantRun为我解决了这个问题.希望我在花一个小时尝试预言之前找到这篇文章. (3认同)