📜  Android – 使用 local.properties 文件避免 API 密钥签入到版本控制系统(1)

📅  最后修改于: 2023-12-03 14:39:09.341000             🧑  作者: Mango

Android – 使用 local.properties 文件避免 API 密钥签入到版本控制系统

在 Android 开发中,我们常常需要使用 API 密钥来访问各种服务,例如 Google Maps、FireBase、Twitter 等等许多第三方 API。

然而,API 密钥通常是私密的信息,不应该在源代码中明文存储。如果您将 API 密钥提交到版本控制系统(如 Git),那么其他人将能够轻松地查看到它们,并且可能会滥用它们。

本文将介绍如何将 API 密钥存储在一个私密的地方,不会在源代码中暴露。

local.properties 文件

在 Android Studio 项目中,您可以通过使用 local.properties 文件来保存本地的配置信息,该文件应该被添加到 .gitignore 中以防止其被提交到版本控制系统中。它的位置通常是在项目根目录下,如下所示:

.
├── app
│   ├── build.gradle
│   └── src
├── build.gradle
└── local.properties # <--- 这个文件

您可以通过以下方式在 local.properties 中保存 API 密钥:

my_api_key="your_api_key_here"

那么在您的代码中,您可以通过以下方式读取它:

buildConfigField "String", "MY_API_KEY", "\"${my_api_key}\""

这将在 BuildConfig 类中创建一个名为 MY_API_KEY 的常量,您可以通过该常量轻松地访问 API 密钥。

使用 API 密钥

由于我们现在已经将 API 密钥保存在 local.properties 文件中,因此您无需将其添加到版本控制系统中。但是在您使用它时,您仍然需要将其传递给相关应用程序。

下面是如何在 Android 应用程序中使用 API 密钥:

class MyActivity : AppCompatActivity() {
    private val api_key = BuildConfig.MY_API_KEY

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 访问 API
        val api = MyApi(api_key)
        api.call()
    }
}

在上面的示例中,我们首先从 BuildConfig 中获取 API 密钥,然后将其传递给 MyApi 类。

这样做的好处在于,即使您在使用 Git 等版本控制系统时意外提交了 local.properties 文件,或者您的合作者在提交到版本库中的代码中添加了 API 密钥,攻击者也无法轻易地访问到它们。

总结

通过将 API 密钥保存在 local.properties 文件中,而不是将它们硬编码到源代码中,可以有效地保护它们不受源代码管理系统的攻击。这是一种非常简单的技巧,但它可以为您的应用程序带来额外的安全性。

请务必牢记将 local.properties 添加到 .gitignore 中,以便将其排除在版本控制系统之外。