見出し画像

【Android】Flutterにおけるbuild.gradleの役割と設定方法

はじめに

今まで、ネコ型おしゃべりロボットのアプリは、iOSのシミュレーターと実機でのみ動作確認をしていたが、Android emulatorでももちろん確認しないといけない。

対応していくうちに、「そもそもbuild.gradleって何?」となったので、基本をおさらい。

Gradleとは何か

Gradleとは、Groovy(またはKotlin)をベースにしたビルド自動化システム。

ビルドスクリプトはDSL(ドメイン固有言語)を用いて記述されるので、ビルドプロセスの高度なカスタマイズを可能にする。DSLを通じて、依存関係の管理、ビルドタスクの定義、アプリケーションのパッケージングなどを行える。設定は、build.gradle に書く。

Flutterアプリケーションでは、Dartで記述されたコードがネイティブアプリケーションにコンパイルされる際、Android部分のビルド管理にGradleが使用される。

ちなみに、”Gradle”の名前は「Gradual」(徐々に)と「Build」(ビルド)の組み合わせから来ている。つまり、Gradleは段階的にビルドを進めることができるビルドシステムを意味している。

Gradle Wrapperを使用することで、Gradleのインストールなしにプロジェクトのビルドが可能になる。

Flutterプロジェクトのbuild.gradleファイル

Flutterプロジェクトには、通常2つのbuild.gradleファイルが存在する。

  • プロジェクトレベル:Androidアプリ全体の設定を行う。

  • アプリレベルのファイル:アプリモジュールの設定を行う。

階層構造は下記

your_app/
└── android/
    ├── build.gradle (プロジェクトレベルのbuild.gradle)
    ├── app/
    │   └── build.gradle (アプリレベルのbuild.gradle)
    ├── gradle/
    │   └── wrapper/
    │       └── gradle-wrapper.properties
    └── ...


プロジェクトレベルのbuild.gradle(/project_root/android/build.gradle)

プロジェクト全体のビルド設定を定義する。下記例では、プロジェクト全体で使用されるGradleプラグイン(Kotlin)と、プロジェクトで利用可能なリポジトリ(google, mavenCentral)を定義している。

Dart

// /project_root/android/build.gradle
buildscript {
    ext.kotlin_version = '1.9.0'
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:7.4.2'
        // START: FlutterFire Configuration
        classpath 'com.google.gms:google-services:4.3.14'
        // END: FlutterFire Configuration
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

tasks.register("clean", Delete) {
    delete rootProject.buildDir
}

アプリレベルのbuild.gradle(/project_root/android/app/build.gradle)

特定のアプリケーションモジュール(通常はFlutterアプリ自体)に対する設定を管理する。

主な責務

  • アプリ固有のSDKバージョン、依存関係、署名設定などの定義。

  • ビルドタイプ(デバッグ、リリースなど)ごとの設定。

  • アプリ固有のリソースファイル、マニフェストファイルなどへのパス指定。

下記例では、特定のアプリケーション(com.example.myapp)のためのSDKバージョン、依存関係、アプリケーションIDなどを定義している。

Dart

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
    compileSdkVersion 29 // コンパイルに使用するSDKバージョン

    defaultConfig {
        applicationId "com.example.myapp" //アプリの一意の識別子。Google Playストアなどのアプリストアでアプリを一意に識別するために使用される
        minSdkVersion 16 // サポートする最小のAndroidバージョン
        targetSdkVersion 29 // アプリが最適化されていると想定するAndroidバージョン
        versionCode 1
        versionName "1.0"
    }
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

SDKバージョンとAPIレベルの設定(アプリレベル)

  • SDKバージョンとAPIレベルの設定はアプリ単位で行うため、これらの設定はapp/build.gradleファイルに記述する。

  • compileSdkVersion: コンパイル時に使用さ….

続きはこちらで記載しています。


この記事が参加している募集

仕事について話そう

よろしければサポートお願いします!いただいたサポートはクリエイターとしての活動費に使わせていただきます!