Android アプリケーションのユーザー データを保存するために使用している Parse アカウントがあります。ソース管理を使用しているため、秘密鍵をコードに埋め込んだままにしたくありません。ソース管理から除外して、キーをホストできる「構成」ファイルを作成する方法はありますか? それが不可能な場合、そのような状況を処理するためのベスト プラクティスは何ですか?
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: ")
そして、それを適切な構成ファイルまたはソース ファイルに適用します。
はい、ソース管理外にフォルダーを作成し、そこに app.properties というファイルを配置し、そのプロパティ ファイルにキーを配置して、フォルダーをビルド パスに追加できます。次に、プロパティ ローダーを使用してクラスパスからロードします。
多くの開発者または複数の開発マシンがある場合は、ローカル プロパティの場所をビルド パスの変数として設定して、各開発者が独自に構成できるようにすることができます。