我有一个Parse帐户,我用它来存储我的Android应用程序的用户数据。因为我正在使用源代码控制,所以我不想将我的密钥隐藏在代码中。有没有办法让一个“配置”文件,我将不受源代码控制,然后可以托管密钥?如果这不可行,那么处理这种情况的最佳做法是什么?
答案 0 :(得分:1)
是的,您可以在源代码管理之外创建一个文件夹,在其中放置一个名为app.properties的文件,将您的密钥放在该属性文件中,然后将该文件夹添加到您的构建路径中。然后使用属性加载器从类路径加载它。
如果您有许多开发人员或多个开发人员计算机,则可以将本地属性位置设置为构建路径中的变量,以便每个开发人员都可以自行配置。
答案 1 :(得分:1)
一种选择是将密钥放在环境变量中,然后在构建期间读取它。
你的pom.xml中的声明了一个属性(secret.key)
<properties>
<secretKey>${env.SECRET_KEY}</secretKey>
<properties>
进一步向下启用资源上的“filtering”
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
在资源中维护一个“config.properties”来读取变量ready for substitution:
secret_key=${secretKey}
在maven中过滤将使用环境变量中的值替换$ {secret.key}。
如果您使用gradle进行Android版本的构建,请参阅16.6.6.2 on filtering files部分。
在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: ")
然后将其应用于相应的配置或源文件。