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

What is the best way to hide Crashlytics key?

我将我的 crashlytics 密钥放入 xml,但我收到了这个错误:

Error:Execution failed for task ':app:fabricGenerateResourcesDebug'.

Crashlytics Developer Tools error.

以下是我在 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(如果尚未添加!)希望对您有所帮助。

不需要像接受的答案那样复杂。

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

apiKey=fabric_api_key
apiSecret=fabric_api_secret

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

P.s。不要忘记将 fabric.properties 文件保存在版本控制系统

之外

好吧,将两个键都放在 fabric.properties 上对我不起作用,而且 fabric 找不到 api 键,我想把它放在 Manifest 中。然后我发现了这个解决方案:

放置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 映射密钥,并且仍然保持应用程序可构建以供持续集成或想要尝试的人...