隐藏Crashlytics密钥的最佳方法是什么?

时间:2017-08-01 03:45:54

标签: android crashlytics

我将我的崩溃关键字放在xml中,我收到了这个错误:

  

错误:任务':app:fabricGenerateResourcesDebug'执行失败。

     
    

Crashlytics Developer Tools错误。

  

以下是我在AndroidManifest.xml中的预期代码。

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

隐藏它的最佳方法是什么?

3 个答案:

答案 0 :(得分:5)

没有必要像接受的答案那样复杂地进行。

根据the official docs,您只需从Manifest中删除您的API密钥并将其存入fabric.properties文件,您的秘密已经存在于下一个表单中:

apiKey=fabric_api_key
apiSecret=fabric_api_secret

就是这样。 Fabric插件(或Gradle任务)将自动完成引擎盖内所需的所有工作。

P.S。别忘了将fabric.properties文件保留在版本控制系统之外

答案 1 :(得分:1)

将您的API密钥放在local.properties中。

crashlytics.key=api_key_here

在build.gradle中,添加此Groovy方法:

def getLocalProperty(String propertyName) {
    def propsFile = rootProject.file('local.properties')
    if (propsFile.exists()) {
        def props = new Properties()
        props.load(new FileInputStream(propsFile))
        return props[propertyName]
    } else {
        return ""
    }
}

然后添加一个清单占位符,例如:

android {
    defaultConfig {
        manifestPlaceholders = [crashlytics:getLocalProperty("crashlytics.key")]
    }
}

在清单中,您现在可以使用以下语法将API密钥作为注入变量进行访问:

${crashlytics}

您可能需要调整此代码以使其适合您的需求,但这应该足以让您入门。并确保将local.properties添加到.gitignore(如果它还没有!)希望有所帮助。

答案 2 :(得分:0)

把两个键都放在fabric.properties上对我来说不起作用,fabric在那儿找不到api键,我想把它放在清单中。然后我发现了这个解决方案:

放置io.fabric.ApiKey=676897890789790... 到您的local.properties

向AndroidManifest添加以下内容:

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

然后进入应用模块build.gradle

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def fabricApiKey = properties.getProperty('io.fabric.ApiKey')
if (fabricApiKey == null) fabricApiKey = "Place io.fabric.ApiKey to local.properties"

然后在defaultConfig中关闭:

defaultConfig {
   .....
         resValue "string", "fabric_api_key", fabricApiKey
    }

这样,您还可以从开源项目的源代码管理中隐藏google maps密钥,并仍使应用程序可构建以进行持续集成或希望试用的人...