Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 隐藏Crashlytics密钥的最佳方法是什么?_Android_Crashlytics - Fatal编程技术网

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

Android 隐藏Crashlytics密钥的最佳方法是什么?,android,crashlytics,Android,Crashlytics,我将crashlytics键放在xml中,出现以下错误: 错误:任务“:app:fabricGenerateResourcesDebug”的执行失败 Crashlytics开发人员工具错误 以下是我在AndroidManifest.xml中的预期代码 <meta-data android:name="io.fabric.ApiKey" android:value="@string/crashlytics_key" /> 隐藏它的最佳方法是什么?将API密钥放在l

我将crashlytics键放在
xml
中,出现以下错误:

错误:任务“:app:fabricGenerateResourcesDebug”的执行失败

Crashlytics开发人员工具错误

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

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


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

将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中(如果还没有!),希望这会有所帮助。

没有必要像接受答案那样以如此复杂的方式进行操作

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

apiKey=fabric_api_key
apiSecret=fabric_api_secret
就这样。Fabric插件(或Gradle任务)将自动完成发动机罩内所需的所有工作


另外,别忘了将您的
fabric.properties
文件放在版本控制系统之外

fabric.properties的两个键都放好。属性对我不起作用,fabric在那里找不到api键,希望我将其放入清单中。然后我发现了这个解决方案:

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

要添加以下内容:

<meta-data
            android:name="io.fabric.ApiKey"
            android:value="@string/fabric_api_key" />
然后在defaultConfig闭包中:

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

通过这种方式,您还可以从开源项目的源代码管理中隐藏google maps密钥,并保持应用程序可构建以进行持续集成,或者让想要尝试它的人保持可构建性…

为什么要尝试从存储库中隐藏密钥?如果你不能信任那些能够访问你的代码的开发人员,你将会遇到比他们拥有密钥更大的问题。如果你担心将来会有一个不满的员工,你可以根据需要刷新API密钥。这是一个公开的回复,很有意义。那么,为什么不在repo上设置一个伪键(并在自述文件中加以澄清)?但是,这意味着每次我想要提交时,我都需要记住自己用伪键替换api键。如果我将它放在另一个文件中,我可以将该文件放在
.gitignore
中,然后我可以像往常一样继续开发。这样应该可以工作:--您可以从未提交的文件(如local.properies,使用Groovy)中提取变量,然后将其注入清单中
defaultConfig {
   .....
         resValue "string", "fabric_api_key", fabricApiKey
    }