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

📅  最后修改于: 2022-05-13 01:58:44.573000             🧑  作者: Mango

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

作为一名 Android 开发人员,最好的方面之一就是能够创建和贡献于开源项目!我们有能力与全球数百万开发人员共享我们的代码。现在,当我们将代码作为公共存储库提供时,我们必须确保处理某些事情,例如私有 API 密钥的共享、受限 URL 等。我们如何使用根项目中的“ local.propertie s”文件来做到这一点?在本文中,我们将一探究竟。

分步实施

当我们在 Android Studio 中创建一个新项目时,会创建一个名为“local.properties”的文件,其内容如下:

## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file should *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=The Sdk Directory path

所以local.properties是 Android Studio 生成的文件,不应该包含在版本控制系统中。所以,看一下我们的 gitignore 文件,我们有:

*.iml
.gradle
/local.properties
/.idea
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
/buildSrc/build/*

我们可以看到版本控制系统已经排除了文件local.properties。

该项目有助于开发类似于 Uber 和 Lyft 的拼车 Android 出租车。你可以分叉它并学习很多很酷的功能。请阅读自述文件以获取有关该项目的更多信息。现在,因为我们的用例是一个拼车应用程序,我们将把谷歌地图整合到其中。要使用 Google 地图,开发人员必须拥有 API 密钥。让我们看看如何使用“local.properties”文件来做到这一点。首先,将以下参数添加到 local.properties 文件中:

sdk.dir=The sdk directory //already existing parameter
yourApi = ANY_OF_YOUR_API_KEY_HERE

然后要提取值,我们只需:

def someExtraProperty = new Properties()
someExtraProperty.load(new FileInputStream(rootProject.file("local.properties")))

现在要在使用时访问我们的 API 密钥,我们可以:

someExtraProperty['yourApiKey'] (or) 
someExtraProperty.getProperty("YourAPIKey")

在构建过程中会生成一些文件,例如 gradleResValues.xml 和 BuildConfig。Java让我们使用这些文件来保存 API 密钥的值。我们如何将值插入到构建过程中生成的文件中?在我们的应用级构建中,我们将使用 buildTypes 部分。梯度源代码

android {
    .....
    buildTypes {
        debug {
            resValue("string", "gmaps_key", localProperties['yourApiKey'])
        }
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

这是编译包时res文件夹中默认生成的值




    

    
    GMAPS_API_KEY_GOES_HERE

要在应用程序中使用此值,请尝试按如下方式提取值:

resources.getString(R.string.gmaps_key)

然后只需声明一个最终变量来存储字符串:

Java
public static final String GMAPS_API = your gmaps key;


结论

您现在可以通过在自述文件中包含一个 TODO 语句来愉快地将此代码作为公共存储库分发,该语句指出应该存在所需的构建配置参数或 gradleResValuess.xml 参数。用户只需在 TODO 中添加信息,瞧,工作又回来了!我们可以通过使用 local.properties 文件来声明本地、用户特定参数或受限 URL,从而避免在应用程序级代码中硬编码字符串。