🐥

[Android] 公開したくないAPI Keyを管理する方法

2024/06/06に公開

課題

API Keyをハードコーディングした状態でGitHubにあげてしまうと、API Keyが公開されてしまって良くない。
他の人に見られないようにAPI Keyを管理したい。
(自分はSupabaseのURLとAPI Keyを管理したかった。)

解決策

local.propertiesにAPI Keyを保存する。

詳細

手順1:local.propertiesに記載

local.propertiesに以下のように管理したいURLとAPI Keyを記載する。

SUPABASE_URL=https://xxxxxxxxx
SUPABASE_KEY=xxxxxxxxxxxxxxxxx

手順2:build.gradle.kts(app)に記載

次にlocal.propertiesに登録したデータを使えるように
build.gradle.kts(app)に記載する。

import java.io.FileInputStream //★追加
import java.util.Properties //★追加

plugins {
    //省略
}

android {
    //省略

    defaultConfig {
        //省略

        val propertiesFile = project.rootProject.file("local.properties") //★追加
        val properties = Properties().apply{
     load(FileInputStream(propertiesFile))
        } //★追加

        buildConfigField ("String", "SUPABASE_URL", "\"${properties["SUPABASE_URL"]}\"") //★追加
        buildConfigField ("String", "SUPABASE_KEY", "\"${properties["SUPABASE_KEY"]}\"") //★追加
    }
    //省略

    buildFeatures {
        buildConfig = true // ★追加
        compose = true
    }
    //省略
}
dependencies {
    //省略
}

これでkotlinファイル側でAPI keyを取得する準備が整いました。

手順3:Kotlinファイルで使用する

あとは任意のkotlinファイルで使用するだけです。

MainActivity.kt
val supabase = createSupabaseClient(
//ここでlocal.propertiesに保存したSUPABASE_URLとSUPABASE_KEYを取得している
    supabaseUrl = BuildConfig.SUPABASE_URL, 
    supabaseKey = BuildConfig.SUPABASE_KEY,
) {
    install(Postgrest)   
}

うまくいかないとき確認したこと

以下は自分がうまくいかなかったときに確認したことです。

  • local.propertiesで変数名とデータの間にスペースが入ってないか
  • build.gradle.kts(app)のbuildConfigFieldで指定している変数名と local.propertiesで指定している変数名が一致しているか
  • build.gradle.kts(app)でbuildConfig = true を追加しているか

Discussion