【Android Studio】Gradleとは?仕組みや構造を理解する

【Android Studio】Gradleとは?仕組みや構造を理解する

この記事からわかること

  • Gradleとは?
  • Android Studioとの関係性役割
  • build.gradlesettings.gradle使い方
  • キャッシュ削除する方法
  • Android Gradle Plugin(AGP)とは?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

この記事はGradleについて何もわかっていない筆者ができるだけ理解するために備忘録がわりとして記述した記事になります。まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

Gradleとは

Gradle(グレイドル)」はJava(JVM)環境におけるビルドプロセスを自動化するためのビルドツール。Android Studioではデフォルトのビルドツールとして組み込まれている。

Android Studioにおける代表的な役割は以下の通り。

1.ビルド自動化

Androidアプリケーションのビルドプロセスを自動化。ソースコードのコンパイル、リソースのパッケージング、テストの実行、APK(またはAAB)の生成などが可能。

2.依存関係の管理

外部ライブラリやモジュールを管理。build.gradleファイルに記述された依存関係をもとに、必要なライブラリを自動的にダウンロードし、ビルドに組み込む。

3.ビルド設定のカスタマイズ

ビルド設定を詳細にカスタマイズできる。ビルドタイプ(例: デバッグ、リリース)の設定、フレーバーの定義の設定など。

ファイル群

プロジェクトを作成するとGradleに関わるファイルがいくつか作成される。記述する言語は「Groovy」というスクリプト言語。JavaやKotlinのコードでも記述は可能。

root
  ├── app
  │       ├── src
  │       ├── build.gradle
  │       ├── etc..
  ├── build.gradle
  ├── settings.gradle
  ├── gradle.properties
  ├── gradle
  │       └── wrapper

build.gradle

「build.gradle」はGradleビルドツールでのビルドプロセスや依存関係を管理するための設定ファイルroot直下とアプリモジュール(app)配下に1つずつ存在する。

root直下のbuild.gradle


// プロジェクトで使用するプラグインを指定。
plugins {
    // Android Gradle Plugin(AGP) Androidアプリケーション用。
    id 'com.android.application' version '8.0.2' apply false 
    // Android Gradle Plugin(AGP) Androidライブラリ用
    id 'com.android.library' version '8.0.2' apply false 
    // Kotlinプラグイン。Kotlinコードのコンパイルとサポートを提供
    id 'org.jetbrains.kotlin.android' version '1.8.20' apply false 
}

// ビルドスクリプトの設定。ビルドツールの依存関係やリポジトリを指定
buildscript {
    repositories {
        // Googleのリポジトリから依存関係を取得。
        google() 
        // Maven Centralリポジトリから依存関係を取得
        mavenCentral() 
    }
    dependencies {
        // Android Gradle Plugin。Androidアプリケーションのビルドを管理するためのプラグイン。
        classpath 'com.android.tools.build:gradle:8.0.2' 
        // 他のプラグインや依存関係をここに追加。
    }
}

// プロジェクト内のすべてのモジュールに共通のリポジトリ設定を指定
allprojects {
    repositories {
        // Googleのリポジトリから依存関係を取得。
        google() 
        // Maven Centralリポジトリから依存関係を取得
        mavenCentral() 
    }
}

plugins:ビルドスクリプトで使用するプラグインの定義
buildscript:ビルドスクリプトが依存するクラスパスやリポジトリを設定
allprojects:すべてのサブプロジェクトで共通して使用するリポジトリを指定

※Android Gradle Plugin(AGP)について後述

app配下のbuild.gradle


plugins {
    // Androidアプリケーション用のGradleプラグイン。アプリのビルドを管理し、Androidアプリとしての設定やタスクを提供。
    id 'com.android.application' 
    // Kotlin言語を使用するためのプラグイン。Kotlinのコードコンパイルとサポートを提供。
    id 'org.jetbrains.kotlin.android' 
}

android {
    // アプリケーションの名前空間(パッケージ名)を指定。リソースやクラスを一意に識別するために使用。
    namespace 'com.example.myapp' 
    // コンパイル時に使用するAndroid SDKのバージョン。最新のAPI機能を使用するために指定。
    compileSdk 33 

    // アプリケーションの基本的な設定。
    defaultConfig {
        // アプリケーションの一意なID。Google Playでのアプリを識別用。
        applicationId "com.example.myapp" 
        // アプリが動作するための最小SDKバージョン。
        minSdk 24 
        // アプリがターゲットとするSDKバージョン。
        targetSdk 33 
        // アプリの内部バージョンコード。
        versionCode 1 
        // ユーザーに表示されるアプリのバージョン名。
        versionName "1.0" 

        // テストの実行に使用するテストランナー。
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 
    }

    buildTypes {
        // ビルドの種類を定義します。主に`debug`と`release`の2種類があり、それぞれのビルドで異なる設定が可能。
        release {
            // リリースビルドでのコード縮小(minification)を無効にします。コードを縮小して難読化する場合はtrueに設定。
            minifyEnabled false 
            // ProGuardの設定ファイル。コード縮小や最適化のルールを定義。
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 
        }
    }

    // Javaコンパイルオプションを設定
    compileOptions {
        // ソースコードの互換性としてJava 8を指定。
        sourceCompatibility JavaVersion.VERSION_1_8 
        // コンパイル後のバイトコードの互換性としてJava 8を指定。
        targetCompatibility JavaVersion.VERSION_1_8 
    }

    // KotlinコードをJava 8バイトコードにコンパイル。
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
        kotlinOptions {
            jvmTarget = "1.8" 
        }
    }
}

dependencies {
    // アプリケーションが依存するライブラリやモジュールを定義。
}

plugins:プロジェクトで使用するプラグインを指定
android:Androidビルド設定を定義
dependencies:プロジェクトが依存するライブラリやモジュールを定義

settings.gradle

settings.gradle」はプロジェクトの構造と設定を定義するためのファイル


rootProject.name = 'MyRootProject'
include 'app', 'library'
// 例えば上記ならapp と library という2つのサブプロジェクトが MyRootProject プロジェクトの一部なっている。

gradle.properties

gradle.properties」はプロジェクトの構成情報を定義するためのプロパティファイル

gradle-wrapper.properties

gradle-wrapper.properties」はGradleのバージョン管理を行う設定ファイルです。今プロジェクトで適応されているGradleのバージョンもgradle-X.X-bin.zip部分から確認することが可能です。


#Fri Feb 09 20:17:22 JST 2024
// GradleのZIPを保存する基準ディレクトリ。GRADLE_USER_HOME は通常 ~/.gradle/ になる。
distributionBase=GRADLE_USER_HOME
// GradleのZIPをどこに保存するか指定。ここでは ~/.gradle/wrapper/dists/ に保存される。
distributionPath=wrapper/dists
// 使用する Gradle のバージョンを指定
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
// ZIPファイルの保存先の基準ディレクトリ
zipStoreBase=GRADLE_USER_HOME
// ZIPファイルの格納場所
zipStorePath=wrapper/dists

Gradleのバージョンを更新したい場合はこのファイルのgradle-8.0-bin.zip部分をgradle-8.7-bin.zipのように変更し「Sync Now」をクリックすることでも更新することが可能です。

compileSdktargetSdkを引き上げた場合に「Change Gradle version in Gradle wrapper to 8.7 and re-import project」のように表示されるのでこれをクリックすることで必要なバージョンに自動更新してくれますがgradle-8.7-bin.zipが変更されているだけです。

Gradleのキャッシュを削除する

Gradleも使用しているとどんどんキャッシュが溜まっていく。キャッシュをクリアしたい場合はプロジェクトルートで以下のコマンドを実行すればOK。

$ ./gradlew clean

参考文献

Gradle 日本語ドキュメント
AndroidStudioでGradleを使う際のメモ
Android studio の Gradleについて調べてみた

build.gradle.kts

Android Studioでプロジェクトを立ち上げる際にGradleビルドスクリプトを「Groovy DSL(Domain-Specific Language)」か「Kotlin DSL」かを選択できるようになっており、Kotlin DSLを選択した場合に「build.gradle.kts」になります。

【Android Studio】Gradleとは?仕組みや構造を理解する

公式からもKotlin DSLが推奨されており、メリットとして型安全性や補完機能、エラー検出などが挙げられます。

dependenciesの部分の表記方法も変わっており、libs.androidx.uiなどのエイリアスを使用して参照することができるようになっています。エイリアスの定義箇所は「gradle/libs.versions.toml」などを確認することでバージョンなどを確認することが可能です。

dependencies {

    implementation(libs.androidx.core.ktx)
    implementation(libs.androidx.lifecycle.runtime.ktx)
    implementation(libs.androidx.activity.compose)
    implementation(platform(libs.androidx.compose.bom))
    implementation(libs.androidx.ui)
    implementation(libs.androidx.ui.graphics)
    implementation(libs.androidx.ui.tooling.preview)
    implementation(libs.androidx.material3)
    testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.junit)
    androidTestImplementation(libs.androidx.espresso.core)
    androidTestImplementation(platform(libs.androidx.compose.bom))
    androidTestImplementation(libs.androidx.ui.test.junit4)
    debugImplementation(libs.androidx.ui.tooling)
    debugImplementation(libs.androidx.ui.test.manifest)
}

Android Gradle Plugin(AGP)とは

Android Gradle Plugin(AGP)」はGradleのプラグインの1つでビルド処理をAndroid用に最適化するもの。Gradle単体ではAndroidアプリのビルドはできないためAGPを組み合わせて使う

要はGradleを利用してAndroidアプリとしてビルドを行うための機能を色々提供してくれているもの

AGP の主な役割

AGPとGradleの関係

AGPとGradleの関係は密に関わり合っているため相互のバージョンのある程度依存関係がある。公式が対応一覧を示している通りでどちらかのバージョンを上げたい場合にはもう片方もあげる必要があるので注意。

公式リファレンス:AGPとGradleの対応一覧

プラグインバージョン 最低限必要なGradleバージョン
8.13 8.13
8.12 8.13
8.11 8.13
8.10 8.11.1
8.9 8.11.1
8.8 8.10.2
8.7 8.9

またAndroid Studioにも互換性のあるバージョンが指定されているので対象のバージョンがない場合などはIDEのアップデートを行ってみてください。

AGP Upgrade Assistantでアップデート

AGPのバージョン更新には「AGP Upgrade Assistant...」が活用できます。AGP Upgrade Assistantを使用するには「Tools」>「AGP Upgrade Assistant」を選択するか、Android Studioを起動した時に出るバルーンから起動できます。

【Android Studio】Gradleとは?仕組みや構造を理解する 【Android Studio】Gradleとは?仕組みや構造を理解する

起動すると更新するファイルなどの設定をチェックすることができ「Run Selected Steps」をクリックすることで一括で更新することができるようになっています。

【Android Studio】Gradleとは?仕組みや構造を理解する

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

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

Search Box

Sponsor

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index