くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

AndroidStudioで開発をはじめるときにすること~build.gradle編~

いろいろやっているとAndroidアプリを開発しはじめるときにいつもやることを忘れるので、その備忘録。

環境
  1. Android Studio: 2.3.3
  2. Gradle: 3.3
  3. Android Plugin for Gradle: 2.3.3
  4. Java8
使うライブラリ
  1. Gradle Retrolambda Plugin ... AndroidでJava8のラムダ式がつかえるようになるやつ
  2. Lombok ... JavaのボイラープレートコードをシンプルにしてくれるJavaのライブラリ
  3. Butter Knife ... Androidの View Injection ライブラリ
  4. Android-Orma ... Android用のO/R Mapper
  5. Dagger ... DIフレームワーク
  6. RxAndroid ... Androidのリアクティブプログラミングライブラリ
  7. Retrofit ... Web APIのクラインとライブラリ
  8. Picasso ... 画像読み込みライブラリ
  9. Icepick ... 状態の保存/復元をサポートするアノテーションライブラリ
  10. parceler ... Objectをシリアライズするアノテーションライブラリ

build.gradleを整える

Retrolambdaの導入

  • build.gradle
 buildscript {
     repositories {
         jcenter()
+        mavenCentral()
     }
     dependencies {
         classpath 'com.android.tools.build:gradle:2.3.3'
+        classpath 'me.tatarka:gradle-retrolambda:3.6.1'
     }
 }
 
 allprojects {
     repositories {
         jcenter()
+        mavenCentral()
     }
 } 
  • app/build.gradle
 apply plugin: 'com.android.application'
+apply plugin: 'me.tatarka.retrolambda'
 
 android {
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
 }

Lombokの導入

  • app/build.gradle
 dependencies {
+    provided 'org.projectlombok:lombok:1.16.18'
 }

Butter Knifeの導入

  • app/build.gradle
 dependencies {
+    compile 'com.jakewharton:butterknife:8.7.0'
+    annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0'
 }

RxAndroidの導入

  • app/build.gradle
 dependencies {
+    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
+    compile 'io.reactivex.rxjava2:rxjava:2.1.0'
 }

Retrofitの導入

  • app/build.gradle
 dependencies {
+    compile 'com.squareup.retrofit2:retrofit:2.3.0'
+    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'   // RxJavaのアダプター
+    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' // OkHttpのロガー
+    compile 'com.squareup.retrofit2:converter-gson:2.3.0'    // Gsonのコンバーター
+    compile 'com.google.code.gson:gson:2.8.1'                // Gson
 }

Ormaの導入

  • app/build.gradle
 dependencies {
+    annotationProcessor 'com.github.gfx.android.orma:orma-processor:4.2.5'
+    compile 'com.github.gfx.android.orma:orma:4.2.5'
 }

Daggerの導入

  • app/build.gradle
 dependencies {
+    compile 'com.google.dagger:dagger:2.11'
+    annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
+    provided 'javax.annotation:jsr250-api:1.0'
 }

Icepickの導入

  • build.gradle
 allprojects {
     repositories {
         jcenter()
         mavenCentral()
+        maven {url "https://clojars.org/repo/"} // Icepick
     }
 } 
  • app/build.gradle
 dependencies {
+  // Icepick
+  compile 'frankiesardo:icepick:3.2.0'
+  provided 'frankiesardo:icepick-processor:3.2.0'
 }

parcelerの導入

  • app/build.gradle
 dependencies {
+  // parceler
+  compile 'org.parceler:parceler-api:1.1.9'
+  annotationProcessor 'org.parceler:parceler:1.1.9'
 }

自分用の変更①: buildTypeにdebugを追加

  • app/build.gradle
 android {
     buildTypes {
+        debug {
+            applicationIdSuffix '.debug'
+            versionNameSuffix 'a'
+        }
         release {
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
         }
     }

自分用の変更②: apkのファイル名を変更

  • app/build.gradle
 android {
+    android.applicationVariants.all { variant ->
+        if (variant.buildType.name == "release") {
+            variant.outputs.each { output ->
+                def newName = "${defaultConfig.applicationId}_ver${defaultConfig.versionName}_${variant.buildType.name}.apk"
+                output.outputFile = new File(output.outputFile.parent, newName)
+            }
+        }
+    }
 }

自分用の変更③: Support Libraryのバージョンを変数化

  • app/build.gradle
+def support_lib_ver = '25.3.1'
 dependencies {
-    compile 'com.android.support:appcompat-v7:25.3.1'
-    compile 'com.android.support:design:25.3.1'
+    compile "com.android.support:appcompat-v7:${support_lib_ver}"
+    compile "com.android.support:design:${support_lib_ver}"
 }