【Android Studio】Api keyを始めとしたgit管理したくない定数を環境変数で管理する

Api keyやGoogle AnalyticsのトラッキングIDなんかは、ハードコーディングしてgithub等でオープンにするのが好ましくないですよね。

そこでOS X環境変数にそれらを登録しておき、Android Studioのビルドの際に参照するようにして回避しましょう。

OS X環境変数にkeyを登録する

ターミナルから以下を実行します。

$ launchctl setenv APIKEY hogehoge

APIKEYがkey、hogehogeがvalueにあたるKeyValue形式です。

build.gradleから環境変数を参照する

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        // 環境変数を参照する
        manifestPlaceholders = [api_key: System.getenv("APIKEY")]
    }
}

環境変数のAPIKEYを参照し、api_keyへ格納しています。

AndroidManifest.xmlからmanifestPlaceholdersを参照する

<application>
    <meta-data android:name="apiKey" android:value="${api_key}"/>
</application>

javaプログラムの中からAndroidManifest.xmlのmeta-dataを参照する

String key = "";
try{
    ApplicationInfo info
            = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
    key = info.metaData.getString("apiKey");
}catch(PackageManager.NameNotFoundException e){
    e.printStackTrace();
}

// keyを使った処理〜〜

これでString keyはhogehogeになっています。

Windowsから環境変数を登録し参照することは検証していないです。

ありがとうございました。

参考

AndroidManifest.xmlにAPIキーを書いたコードをGitHubにコミットしないために AndroidManifest.xmlに記述したメタデータを取得する