LoginSignup
97
83

More than 5 years have passed since last update.

gradle.propertiesに定義した値をJavaソースから参照する

Last updated at Posted at 2015-02-14

AndroidStudioでは非公開のAPIのキーなどをgradle.propertiesに定義します。
外部サービス(Parse.comとかTwitterとかAWSとかの)のAPIを利用する時のapiKeyなどをソースから参照する必要があるケースです。

背景

例えば、Parse.com を利用するにあたって下記のような感じでJavaソースから参照したい場合です。このように外部サービスのSDKを初期化する際にAPIのKEYなどが要求されることは珍しくないと思います。

MyApplication.java
public class MyApplication extends Application {

    private static final String PARSE_API_ID = "xxxxxxxxxxxxxxxxxxxxx";
    private static final String PARSE_API_KEY = "xxxxxxxxxxxxxxxxxxxxx";

    public MyApplication() {
        super();
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Parse.initialize(this, PARSE_API_ID, PARSE_API_KEY);
        ParseInstallation.getCurrentInstallation().saveInBackground();
    }

}

実装

gradle.propertiesに定義を追加

gradle.propertiesに使用する値を定義します。今回はParse.comのAPIを使用するためparseApiId,parseApiKeyという定数名にしました。

gradle.properties
parseApiId=xxxxxxxxxxxxxxxxxxxxx
parseApiKey=xxxxxxxxxxxxxxxxxxxxx

gradle.propertiesを読み込み

build.gradleにビルド時にBuildConfig.javaに定義される処理を追加します。

BuildConfig.javaとはビルド時に自動生成されるファイルです。ここではgradle.propertiesで定義した変数をBuildConfig.javaに書き出す処理をbuild.gradleに追加します。

下記の処理がそれです。

buildConfigField "String", "PARSE_API_ID", "\"${project.property("parseApiId")}\""
buildConfigField "String", "PARSE_API_KEY", "\"${project.property("parseApiKey")}\""

全体はこんな感じになります。

build.gradle
buildTypes {
    debug {
        buildConfigField "String", "PARSE_API_ID", "\"${project.property("parseApiId")}\""
        buildConfigField "String", "PARSE_API_KEY", "\"${project.property("parseApiKey")}\""
    }
    release {
        buildConfigField "String", "PARSE_API_ID", "\"${project.property("parseApiId")}\""
        buildConfigField "String", "PARSE_API_KEY", "\"${project.property("parseApiKey")}\""
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

#上記ではdebug用とrelease用で同じid,keyを使用していますが、gradle.propertiesに両buildTypesのid, keyを設けて処理を分けることで開発版、製品版の使い分けが可能です。

ビルド

ビルド完了後、BuildConfig.javaに下記のように参照可能な定数が定義されてるのでこれをMyApplication.javaから参照します。

BuildConfig.java
public final class BuildConfig {
  // Fields from build type: debug
  public static final String PARSE_API_ID = "xxxxxxxxxxxxxxxxxxxxx";
  public static final String PARSE_API_KEY = "xxxxxxxxxxxxxxxxxxxxx";
}
MyApplication.java
public class MyApplication extends Application {

    public MyApplication() {
        super();
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Parse.initialize(this, BuildConfig.PARSE_API_ID, BuildConfig.PARSE_API_KEY);
        ParseInstallation.getCurrentInstallation().saveInBackground();
    }

}

gradle.propertiesを.gitignoreに追加

publicなリポジトリにpushする場合はgradle.propertiesが公開されてしまっては元も子もないのでgradle.properties.gitignoreファイルに下記を追加しましょう。

.gitignore
# BuildConfig.java を公開しないようにするため
/build
# gradle.properties を公開しないようにするため
gradle.properties

おまけ

JavaソースからでなくAndroidManifestから参照したい場合は下記方法があります。
http://qiita.com/shts/items/5a0ceab7334c5ad8f4f9

質問

iOS開発の場合、これと同じような機能ってxcodeにあるのでしょうか。ご存知の方がいらっしゃいましたらコメントなどで教えていただけると大変ありがたいです。

97
83
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
97
83