3

I have a Parse account that I'm using to store user data for my Android application. Because I'm using source control, I don't want to leave my secret key embedded in the code. Is there a way to have a "config" file that I would keep out of source control, that can then host the key? If that's not feasible, what are the best practices of handling such a situation?

4

2 回答 2

1

一种选择是将密钥放入环境变量中,然后在构建期间读取它。

在你的 pom.xml 中声明一个属性(secret.key)

<properties>
   <secretKey>${env.SECRET_KEY}</secretKey>
<properties>

进一步向下启用对您的资源的“过滤”

  <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
  </resource>

在资源中维护一个“config.properties”以读取准备好替换的变量:

secret_key=${secretKey}

maven 中的过滤会将 ${secret.key} 替换为环境变量中的值。

如果您在 Android Studio 中使用 gradle 进行构建,请参阅第16.6.6.2 节过滤文件

在 build.gradle 添加以下内容

import org.apache.tools.ant.filters.FixCrLfFilter
import org.apache.tools.ant.filters.ReplaceTokens

task copyProductionConfig(type: Copy) {
  from 'source'
  include 'config.properties'
  into 'build/targetpath/config'
  expand([
    secretKey: System.getenv("SECRET_KEY")

  ])
}

在 gradle 中,您还可以在运行 gradlew 时请求输入

Console console = System.console()
def password = console.readPassword("Enter Secret Key: ")

然后将其应用于适当的配置或源文件。

于 2014-04-29T03:12:06.037 回答
1

是的,您可以在源代码管理之外创建一个文件夹,在其中放置一个名为 app.properties 的文件,将您的密钥放入该属性文件中,然后将该文件夹添加到您的构建路径中。然后使用属性加载器从类路径加载它。

如果您有许多开发人员或多台开发机器,您可以将本地属性位置设置为构建路径中的变量,以便每个开发人员都可以配置自己的。

于 2014-04-29T02:54:05.247 回答