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?
问问题
1898 次
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 回答