Android 隐藏Crashlytics密钥的最佳方法是什么?
我将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
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
}