Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Gradle超入門 / Gradle Super Beginner's Guide"

takarabe-hamuyatti
January 24, 2024
560

Gradle超入門 / Gradle Super Beginner's Guide"

takarabe-hamuyatti

January 24, 2024
Tweet

Transcript

  1. © ZOZO, Inc. 4 目次 1. 発表の概要とゴール 2. Gradleについて 2.1.

    Gradleの基本情報 2.2. スクリプトとしても動く 2.3. タスクとは 2.4. 3つのフェーズがあるよ 3. Android開発でのGradle 3.1. AndroidでもGradleが使われているよ 3.2. 全体構成 3.3. ここだけ押さえれば開発は進められそう! 3.4. ちょっと応用 4. まとめ
  2. © ZOZO, Inc. 6 1.発表の概要とゴール • 概要  ◦ Gradleとは何か、Androidアプリ開発におけるGradleの押さえておきたい点の紹介 •

    ゴール ◦ Gradleにちょっとだけ詳しくなる ◦ 初学者が、ライブラリの依存関係の追加やversion codeの変更ができるようになる ◦ tipsを知る • 話さないこと ◦ Androidプラットフォーム以外でのGradleの使われ方 ◦ Gradleの深い話
  3. © ZOZO, Inc. 9 2.1 Gradleの基本情報 • オープンソースの、宣言型ビルド言語を備えた、ビルド自動化システム • Kotlin,Java,Swift,C++,Scalaなど様々な言語のアプリケーションをビルドできる

    ◦ https://gradle.org/guides/#getting-started • Groovyを元にしたDSL、またはKotlinを元にしたDSL(Kotlinスクリプト、KTS)で記述が可能 ◦ それぞれ拡張子が .gradle , .gradle.kts ◦ 本資料ではKotlinスクリプトで統一して記述します ◦ 例であげているコードのファイル名も、全てbuild.gradle.ktsになっています • Gradleという言語があるわけではない!注意!
  4. © ZOZO, Inc. 13 2.3 タスクについて • Gradleがプロジェクトに対して実行できる作業は、1つ以上のタスクによって定義されてお り、Gradleへの命令はタスクを通じて出せる ◦

    build、test、clean などなど • タスクは自前でも作成できる tasks.register("print") { doLast{ println("こんにちは") } } https://docs.gradle.org/current/userguide/tutorial_using_tasks.html#sec:projects_and_tasks
  5. © ZOZO, Inc. 15 2.4 3つのフェーズがあるよ • 3つのフェーズがある • 初期化

    ◦ 設定ファイルを検出し、ビルド対象のプロジェクトの決定を行う • 構成 ◦ ビルドの参加する全てのプロジェクトのスクリプトを評価する ◦ タスクグラフの作成 • 実行 ◦ タスクを実行する https://docs.gradle.org/current/userguide/build_lifecycle.html
  6. © ZOZO, Inc. 19 3.1 Android開発でもGradleが使われているよ • AndroidアプリをビルドするのにもGradleは使われている ◦ https://developer.android.com/studio/run?hl=ja

    ◦ Android Studioでプロジェクト作成時のデフォルトになっていることや、ビルドにつ いて扱ったドキュメントでもGradleが使われており、Android開発におけるビルドシス テムのデファクトと言ってよさそう • GroovyかKotlinスクリプトか ◦ Androidの公式ドキュメントでは、Kotlinの方が可読性が高く、コンパイル時のチェッ クとIDEサポートが優れているという点から、Kotlinスクリプトが推奨されている (version catalogや、マルチモジュールを利用しているときに特に便利) https://developer.android.com/studio/build/migrate-to-kts?hl=ja ◦ 最新の安定版のIDE(Android Studio Hedgehog)では新規作成プロジェクトのビルドシ ステムはデフォルトでbuild.gradle.ktsで用意される形式に変更されている
  7. © ZOZO, Inc. 20 • Android Gradle Plugin(AGP)が、GradleをAndroidで使えるようにしてくれている • Gradle

    と Android Gradle Pluginは Android Studio から独立して実行される ◦ ターミナルからも実行できる! ◦ ex) ./gradlew assembleDebug • 反面、Android Studioから独立して実行できるということは、Gradleのバージョン、AGP バージョン全て別々で管理しなきゃいけないということ ◦ https://developer.android.com/studio/build?hl=ja#properties-files ◦ バージョンの対応表はこちら ◦ https://developer.android.com/studio/releases/gradle-plugin?hl=ja#updating-p lugin 3.1 Android開発でもGradleが使われているよ
  8. © ZOZO, Inc. 22 • プロジェクト全体のGradleファイル(Project-level Gradle file) ◦ build.gradle/build.gradle.kts

    ◦ ルートプロジェクトディレクトリに存在 ◦ プロジェクト全体で共通の設定を記述できる • モジュールごとのGradleファイル(Module-level Gradle file) ◦ build.gradle/build.gradle.kts ◦ 個別のモジュール専用のビルド設定を記述できる • settings.gradle/settings.gradle.ktsファイル ◦ ルートプロジェクトディレクトリに存在 ◦ 最終ビルド時に含めるモジュールを指定する ◦ プロジェクト全体で共通の設定を記述できる ▪ プロジェクト全体のGradleファイルと役割がちょっと被ってる 3.2 全体構成 https://developer.android.com/studio/build?hl=ja#properties-files • 他にもgradle.propertiesとかlocal.propertiesとか、、
  9. © ZOZO, Inc. 24 • android ◦ モジュールごとのGradleファイルでの定義が必要 ◦ 作成するアプリケーションの基本情報を指定できる

    ◦ マルチモジュール構成の場合、compile sdkやversion codeなど、 共通の値を各モジュールで設定するのは冗長なので共通化しても良さそう 「gradle 共通化」で検索すると色々出てきます 3.3 ここだけ押さえれば開発は進められそう! android { namespace = "com.example.gradleTest" compileSdk = 34 defaultConfig { applicationId = "com.example.gradleTest" minSdk = 24 targetSdk = 34 versionCode = 1 versionName = "1.0" } }
  10. © ZOZO, Inc. 25 • plugins ◦ プロジェクト全体のGradleファイル、モジュールごとのGradleファイル両方での定義 が可能 ◦

    適用するGradleプラグインが定義でき、Gradleプラグインを通じて、 ビルドプロセスに特定の機能やタスクが追加できる 3.3 ここだけ押さえれば開発は進められそう! plugins { id("com.android.application") id("org.jetbrains.kotlin.android") }
  11. © ZOZO, Inc. 26 • dependencies ◦ プロジェクト全体のGradleファイル、モジュールごとのGradleファイル両方での定義 が可能 ◦

    3.3 ここだけ押さえれば開発は進められそう! dependencies { implementation("androidx.core:core-ktx:1.10.1")    api("androidx.core:core-ktx:1.10.1") } implementationとapiの違いはこちら! https://docs.gradle.org/current/userguide/java_library_plugin.html#:~:text=jav a%2Dlibrary%60%0A%7D-,API%20and%20implementation%20separation,-The%2 0key%20difference
  12. © ZOZO, Inc. 28 • 依存先が依存している内容を受け取らないようにする(推移的依存関係の一部OFF) • 特定のライブラリについて、依存先が勝手に高いバージョンを指定してきて困ったりしたら こんな風に回避しましょう •

    https://developer.android.com/studio/build/dependencies?hl=ja#exclude_dependenc ies 3.4 ちょっと応用 dependencies { implementation("hogehoge"){ exclude(group = “com.example.imgtools”, module = “native”) } }
  13. © ZOZO, Inc. 30 • Configuration cacheを有効にしてビルド時間を短縮する • Gradleの構成段階のタスクツリーの情報をキャッシュして、次回以降のビルドで再利用して くれるようになる

    • settings.gradle/settings.gradle.ktsファイルに以下の内容を記述 • ビルドキャッシュとは別物 ◦ ビルドキャッシュは、ビルドの出力や中間ファイルのキャッシュ • https://docs.gradle.org/current/userguide/configuration_cache.html 3.4 ちょっと応用 org.gradle.configuration-cache = true org.gradle.configuration-cache.problems = warn