【備忘録】基本情報設定(gradle)

[戻る](https://qiita.com/Mosaku_Anchu/items/9dbf06c34577dfc7aa9c)

#gradleの設定
アプリの基本的な設定情報はgradleとmanifestsで管理されているらしい。
manifestsにベタ打ちでもいいが、gradleを活用した方が捗りそうだ

#gradle.propertiesに値を設定
流れ的には
1. gradle.properties(プロジェクト・プロパティー)に値を追加
2. build.gradle(モジュール:app)でpropertiesの値を取得するように記述
こうすることで、build時に必要な値を生成してくれる

試しにアプリ自体と内部のDBのバージョン情報追加してみる

```gradle:gradle.properties
   #アプリの基本情報
   version_major=1
   version_minor=0
   db_name=DB_name
   db_version=1
```
こんな感じになる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362978/317e0f94-6b34-4f12-56d6-bf510cbb05be.png)

#build.gradleで値を取得
上でgradle.propertiesに追加した値を受け取るにはこんな感じで書く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362978/302855e7-ef10-6b90-57d0-2dc44b876027.png)

``` gradle:build.gradle
        versionName = project.property("version_major") + "." + project.property("version_minor");
        archivesBaseName = "samplepack-" + defaultConfig.versionName
```
上の行では先ほどのversion_majorとversion_minorの値を組み合わせて、
アプリのversionNameを生成している。
次の行ではversionNameを使ってarchivesBaseNameを生成している。
この値はアプリをbuildした際のファイル名に使われる。
因みにこの2行が書いてあるdefaultConfigの部分は元々アプリ内で定められた変数にしか値を登録できないようだ。

次にbuildTypesの方、

``` gradle:build.gradle
    buildTypes {
        debug {
            buildConfigField "String", "dbName", "\"${project.property("db_name")}_DEV\""
            buildConfigField "String", "dbVersion", "\"${project.property("db_version")}\""
            buildConfigField "String", "env", "\"DEV\""
        }
        release {
            buildConfigField "String", "dbName", "\"${project.property("db_name")}_PRD\""
            buildConfigField "String", "dbVersion", "\"${project.property("db_version")}\""
            buildConfigField "String", "env", "\"PRD\""
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
```
ここではdefaultConfigと違い、自由に値を作ることができる。
特にありがたいのは、debugとreleaseのそれぞれの場合で、違い値を生成してくれる機能だ
今回の場合はDB名の後ろに_DEV/_PRDの記述を追加しているのと、
envという変数の中身をDEV/PRDで切り替えている。
これによって、開発と運用で違うデータソースやURLに接続させることが容易になり、
***1つのソース***で管理することができる。


#BuildConfig.javaの生成
ここまでの設定をすると、```~\app\build\generated\source\buildConfig\~```
の中に、```BuildConfig.java```というファイルが生成される

```java:BuildConfig.java
/**
 * Automatically generated file. DO NOT MODIFY
 */
package sample.pack;

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "sample.pack";
  public static final String BUILD_TYPE = "debug";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "1.0";
  // Fields from build type: debug
  public static final String dbName = "DB_name_DEV";
  public static final String dbVersion = "1";
  public static final String env = "DEV";
}

```
この値はnewすればどこでも取り出せる。

```java:MainActivity.java
        //アプリ情報表示
        BuildConfig conf = new BuildConfig();

        Log.d("package名",conf.APPLICATION_ID);
        Log.d("version名",conf.VERSION_NAME);
        Log.d("DB名",conf.dbName);
        Log.d("DBのversion",conf.dbVersion);
        Log.d("環境",conf.env);
```

ログを出力するとこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362978/56c37763-56e1-e2bd-519c-6ebe1a63d625.png)





[戻る](https://qiita.com/Mosaku_Anchu/items/9dbf06c34577dfc7aa9c)