【Kotlin/Android】秘匿情報をgradle.propertiesで管理する方法!
この記事からわかること
- Android Studio/Kotlinで秘匿情報を管理する方法
- gradle.propertiesを読み込むには?
- propertiesファイルの作成方法
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Narwhal Feature Drop
- Kotlin:2.1.10
- Material3
- AGP:8.9.2
- Gradle:8.11.1
- Mac M1:Sequoia 15.6.1
秘匿情報を管理する方法
android Studioでサーバーキーや広告IDなど秘匿情報はプロジェクト内にハードコードしないように注意が必要です。シークレットにしたい情報はgradle.propertiesや独自にpropertiesファイルを生成して一元管理すると間違えて公開してしまうリスクを減らすことができます
gradle.propertiesで管理する
gradle.propertiesはGradleビルドシステムにおけるプロジェクトの構成情報を定義するためのプロパティファイルです。Androidプロジェクトを生成するとルートディレクトリにgradle.propertiesがあります。
中身を見ると色々な設定が記述されていますが、一番下などにキーと値をCLIENT_ID=XXXXXXXXのように記述します。
// 〜〜〜〜〜〜〜
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official
# Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
CLIENT_ID=XXXXXXXX
次に「build.gradle(app)」ファイル内にbuildConfigFieldを使用して以下のように読み込みます。参照するときはproject.properties[キー]形式で指定します。
defaultConfig {
// 〜〜〜〜〜〜〜
buildConfigField("String", "CLIENT_ID", "\"${project.properties['CLIENT_ID']}\"")
}
これでBuildConfigクラスから指定したキーでgradle.propertiesに定義した値を取得することができるようになります。
BuildConfig.CLIENT_ID
独自にpropertiesファイルを用意する
既存のgradle.propertiesを使用せずに独自にpropertiesファイルを用紙して同じ手順で読み込むことも可能です。例えばルートディレクトリにsecret.propertiesを用意します。
CLIENT_ID=XXXXXXXX
「build.gradle(app)」ファイル内ではまだsecret.propertiesを参照できないのでsecretProperties変数を用意して先ほどのsecret.propertiesを読み込みます。
plugins {
// 〜〜〜〜〜〜〜
}
// 以下を追加
def secretPropertiesFile = rootProject.file("secret.properties")
def secretProperties = new Properties()
secretProperties.load(new FileInputStream(secretPropertiesFile))
android {
// 〜〜〜〜〜〜〜
}
Kotlin(build.gradle.kts)なら以下のように記述します。
import java.util.Properties // ファイル上部に追加
// 〜〜〜〜
val secretPropertiesFile = rootProject.file("secret.properties")
val secretProperties = Properties()
secretProperties.load(secretPropertiesFile.inputStream())
あとは同じ容量でbuildConfigFieldを定義するだけです。project.properties[キー]形式ではなくsecretProperties[キー]になるので注意してください。
defaultConfig {
// 〜〜〜〜〜〜〜
buildConfigField("String", "CLIENT_ID", "\"${secretProperties['CLIENT_ID']}\"")
}
Kotlin(build.gradle.kts)なら以下のように記述します。
// manifestPlaceholders に渡す
manifestPlaceholders["CLIENT_ID"] = secretProperties["CLIENT_ID"] ?: ""
// buildConfigField に渡す
buildConfigField("String", "MAPS_API_KEY", "\"${secretProperties["MAPS_API_KEY"]})
.gitignoreに追加するのを忘れないように
生成したsecret.propertiesはそのままではGitの管理対象になってしまうので.gitignoreファイルに追加しておきましょう。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。






