0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AndroidでのGradleについて勉強

Last updated at Posted at 2024-11-17

はじめに

Androidの開発を行う際に、build.gradleにライブラリを追加することは日常茶飯事だと思います。しかし、ドキュメントに書いてある通りにコピペして、実際の中身についてよくわからずに使っていました。そこで今回、Androidプロジェクトにデフォルトで作成されるGradleファイルについて調べた内容をまとめています。(この文章はChatGPTなどを参照して書いているため、不正確な情報があるかもしれません。ご了承ください。)

AndroidでのGradle

Android StudioでEmpty Activityを作成すると、次のようなファイル群が作成されます。今回は、./build.gradle.kts./gradle.properties./settings.gradle.kts./app/build.gradle.ktsのそれぞれについて書いてある内容とその役割を調べました。

project/
├── app
│   ├── build.gradle.kts
│   ├── proguard-rules.pro
│   └── src
├── build.gradle.kts
├── gradle
│   ├── libs.versions.toml
│   └── wrapper
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle.kts

プロジェクトルートのbuild.gradle.kts

build.gradle.ktsには実際に使われるプラグインの情報が記述されます。

project/build.gradle.kts
plugins {
    alias(libs.plugins.android.application) apply false
    alias(libs.plugins.kotlin.android) apply false
}

plugins

プロジェクト内で使用するプラグインを指定

  • id("プラグインID") version "バージョン"で使うプラグインを指定可能
  • alias
    • idで指定する代わりにcatalog機能を使用したエイリアスによってプラグインIDとバージョンを使うことが可能。catalog内でプロジェクトに使われるプラグインのバージョンを一括管理
    • ~~ apply falseではプラグインを有効化せずに、他のモジュールや特定の条件においてのみ適用可能。ここではandroid.applicationプラグインとkotlin.androidプラグインの使用することを宣言しているが、falseとなっている

プロジェクトルートのsettings.gradle.kts

settings.gradle.ktsはGradleの設定を定義するファイル。プロジェクトに関連するリポジトリや依存関係の解決方法を指定

project/settings.gradle.kts
pluginManagement {
    repositories {
        google {
            content {
                includeGroupByRegex("com\\.android.*")
                includeGroupByRegex("com\\.google.*")
                includeGroupByRegex("androidx.*")
            }
        }
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.name = "My Application"
include(":app")

pluginManagement

プラグインをどこから取得するかの設定

  • googlemavenCentralgradlePluginPortalのリポジトリを指定
  • さらに、googleではincludeGroupByRegex()でフィルタリングを行っている

dependencyResolutionManagement

プロジェクトの依存関係解決に関する設定

  • repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    • プロジェクト内で直接かプラグイン経由で宣言されたリポジトリにはエラーを投げる
      doc
  • repositories {}
    • 依存関係を解決するためのリポジトリを指定
    • 依存関係とはアプリケーション内で必要な外部ライブラリやモジュール(プラグインはプロジェクト全体のビルドなどの制御に必要なツール)

その他

  • rootProject.name = "My Application"
    • ルートプロジェクト名の設定
  • include(":app")
    • プロジェクトに含めるモジュール
    • モジュールを追加するには、ここにモジュールを追記していく

プロジェクトルートのgradle.properties

gradle.propertiesはビルド時に使用される設定

project/gradle.properties
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.useAndroidX=true
kotlin.code.style=official
android.nonTransitiveRClass=true
  • org.gradle.jvmargs
    • JVMに渡す引数を指定
    • -Xmx2048m
      • JVMに割り当てる最大メモリサイズを2048MBに設定
    • '-Dfile.encoding=UTF-8'
      • ファイルエンコーディングをUTF-8に指定
  • android.useAndroidX
    • AndroidX を使用するかどうかを指定
      • AndroidXは新しいandroidプラットフォームAPIに下位互換性を提供するライブラリ
      • 2018年にSupport Libraryの代替として開発
  • kotlin.code.style
    • Kotlinのコードスタイル
    • officialはJetBraninsの推奨コードスタイル
    • obsoleteでkotlinの初期のコードスタイルが使用可能(非推奨)
    • Kotlinコードスタイルへの移行
  • android.nonTransitiveRClass

appレベルのbuild.gradle.kts

各モジュールでの設定(長いのでpluginandroiddependenciesで3分割してます。)

project/app/build.gradle.kts
plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.kotlin.android)
}

plugins

必要なGradleプラグインを定義

  • aliasを利用してlibs.plugins.android.applicationlibs.plugins.kotlin.androidを設定
project/app/build.gradle.kts
android {
    namespace = "com.example.myapplication"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.myapplication"
        minSdk = 33
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary = true
        }
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
    buildFeatures {
        compose = true
    }
    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.1"
    }
    packaging {
        resources {
            excludes += "/META-INF/{AL2.0,LGPL2.1}"
        }
    }
}

android

Androidアプリのビルド設定

  • namespace
    • アプリのパッケージ名を設定
  • compileSdk
  • defaultConfig
    • アプリのデフォルト設定を定義
    • applicationId:アプリの一意の識別子
    • minSdk:アプリの動作する最低バージョン
    • targetSdk:アプリが最適化されるバージョン
    • versionCode:アプリのビルドバージョン(整数)
    • versionName:アプリのバージョン名(文字列)
      • BuildConfig.VERSION_NAMEで利用できる
    • testInstrumentationRunner:インストルメンテーション用のランナーを設定
    • vectorDrawables:ベクターグラフィックス(SVG形式のような画像)のサポート設定
  • buildTypes
    • ビルドタイプごとの異なる設定(debugreleaseなど)
    • isMinifyEnabled:コード圧縮の有効化
    • proguardFiles:ProGuardの設定ファイルを指定
      • ProGuard:難読化や参照されていないコードを削除しくれるツール
  • compileOptions
    • javaのソースコードとバイトコードの互換性を設定
  • kotlinOptions
    • KotlinのJVMターゲットバージョンを設定
  • buildFeatures
    • アプリケーションのビルド時に有効にする特定の機能を設定
    • compose = true: Jetpack Composeの使用を有効化
    • その他にもviewBinding、dataBinding、buildConfig等の機能を有効化可能
  • composeOptions
    • Jetpack Compose 用の Kotlin コンパイラ拡張バージョンを指定
  • packaging
    • パッケージング時に除外するリソースを指定
project/app/build.gradle.kts
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)
}

dependencies

アプリで使用するライブラリの定義
依存関係の種類

  • implementation: アプリで使用するライブラリ
  • testImplementation: テスト用ライブラリ
  • androidTestImplementation: Android テスト用ライブラリ
  • debugImplementation: デバッグビルドでのみ使用するライブラリ
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?