ユーザ用ツール

サイト用ツール


サイドバー

プログレス合同会社

広告

android:studio:application

アプリケーション開発

Androidアプリケーションの開発環境Android Studioを使用してアプリケーションを開発します。

新規プロジェクトの作成

Android StudioでAndroidアプリケーション開発のためのプロジェクトを新規に作成します。

android:studio:application:android-app0101.png

新規プロジェクトの作成

Android Studioを起動して、ナビゲーションの『プロジェクト』タブで『New Project』をクリックします。

android:studio:application:android-app0102.png

テンプレートの選択

Phone and Tablet』の『No Activity』を選択して空のプロジェクトを作成します。

次へ(N)』で次に進みます。

android:studio:application:android-app0103.png

プロジェクト情報の入力

各プロジェクト情報を入力します。

Package name』は英数小文字のsnake_caseで、ドメインを逆にしたものを指定します。

完了(F)』でプロジェクトが作成されます。

Gradleの最新化

ビルドツールGradleを最新化します。

android:studio:application:android-app0201.png

プロジェクト構造

メニューアイコンから『ファイル』➡『プロジェクト構造…』へと進みます。

android:studio:application:android-app0202.png

Project

サイドメニューの『Project』で『Gradle Version』の最新バージョンを選択します。

OK』で終了します。

バージョンカタログの導入

マルチモジュールプロジェクトで構成するため、各モジュール内で定義するバージョン情報をバージョンカタログで一元管理します。

android:studio:application:android-app0301.png

プロジェクトエクスプローラの切替

プロジェクトの表示を『プロジェクトファイル』に切り替えます。

android:studio:application:android-app0302.png

カタログファイルの作成

プロジェクトのトップディレクトリで右クリック➡『新規(N)』➡『Version Catalog』と進みます。

android:studio:application:android-app0303.pngカタログ名を入力します。

カタログファイルを編集します。
マルチモジュールの各モジュールの設定を共通化するため、まず最初にAndroid Gradleのビルドツールプラグインの定義を行います。

[versions]
android-application = "8.2.1"
kotlin-android      = "1.9.22"

[libraries]

[plugins]
android-application = { id = "com.android.application",      version.ref = "android-application" }
kotlin-android      = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin-android" }

2行目
任意の名前でバージョンを文字列で定義します。
mavenCentralリポジトリの最新安定バージョンを指定します。
3行目
任意の名前でバージョンを文字列で定義します。
Kotlin plugins for Gradleリポジトリの最新安定バージョンを指定します。
8行目~9行目[plugins]
任意の名前でプラグインとバージョンを関連付けします。
プロジェクトの最上位にあるbuild.gradle.ktsidを指定します。

android:studio:application:android-app0304.png

変更の同期

定義ファイルを編集したため、Android Studioの右上に『Sync Now』が表示されるのでクリックして定義内容をプロジェクト全体に同期させます。

最上位のbuild.gradle.ktsをバージョンカタログを参照するように編集します。

plugins {
  id("com.android.application") version "8.2.1" apply false
  id("org.jetbrains.kotlin.android") version "1.9.22" apply false
  alias(libs.plugins.android.application) apply false
  alias(libs.plugins.kotlin.android)      apply false
}

2行目~3行目
編集前の内容です。
削除してください。
4行目~5行目
バージョンカタログファイルのプラグインモジュールを参照します。
libs.pluginsでバージョンカタログファイルのpluginsセクションを参照します。
名前の -(ハイフン) は .(ドット)に変換して指定します。

編集後、『Sync Now』で内容をプロジェクトに反映させます。

KSPの導入

KotlinのアノテーションプロセッサーKSP(Kotlin Symbol Processing)を導入します。

バージョンカタログファイルにKSPの定義を追記します。

[versions]
   :
devtools-ksp = "1.9.22-1.0.16"
   :
[plugins]
   :
devtools-ksp = { id = "com.google.devtools.ksp", version.ref = "devtools-ksp" }

3行目
KSPのバージョンはKSP GitHubを参照して、Kotlinバージョンに適したバージョンを指定します。
7行目
任意の名前でプラグインを定義します。

追記後、『Sync Now』で内容をプロジェクトに反映させます。

最上位のbuild.gradle.ktsにKSPの使用宣言を追記します。

plugins {
   :
  alias(libs.plugins.devtools.ksp) apply false
}

3行目
バージョンカタログファイルのKSPプラグインを参照します。

追記後、『Sync Now』で内容をプロジェクトに反映させます。

Hiltの導入

モジュール間の依存関係を疎にするため、DI(Dependency Injection)フレームワークのHiltを導入します。

バージョンカタログファイルにHiltの定義を追記します。

[versions]
   :
dagger-hilt = "2.50"

[libraries]
hilt-android  = { module = "com.google.dagger:hilt-android",  version.ref = "dagger-hilt" }
hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "dagger-hilt" }

[plugins]
   :
hilt-android = { id = "com.google.dagger.hilt.android", version.ref = "dagger-hilt" }

3行目
HiltのバージョンはMaven Repositoryを参照して、最新安定バージョンを指定します。
6行目~7行目
任意の名前で依存ライブラリを定義します。
11行目
任意の名前でプラグインを定義します。

追記後、『Sync Now』で内容をプロジェクトに反映させます。

最上位のbuild.gradle.ktsにHiltの使用宣言を追記します。

plugins {
   :
  alias(libs.plugins.hilt.android) apply false
}

3行目
バージョンカタログファイルのHiltプラグインを参照します。

追記後、『Sync Now』で内容をプロジェクトに反映させます。

Composite Buildの導入

マルチモジュールの各モジュールの設定を共通化するため、Composite Buildを導入します。

android:studio:application:android-app0401.png

ディレクトリの作成

プロジェクトのトップディレクトリで右クリック➡『新規(N)』➡『ディレクトリ』でbuild-logicディレクトリを作成します。

※別のディレクトリ名でも構いません。
※その場合は以降読み替えてください。

作成したbuild-logic直下にkotlinスクリプト settings.gradle.kts を新規に作成します。

pluginManagement {
  repositories {
    google()
    mavenCentral()
    gradlePluginPortal()
  }
}
dependencyResolutionManagement {
  repositories {
    google()
    mavenCentral()
  }
  versionCatalogs {
    create("libs") {
      from(files("../gradle/libs.versions.toml"))
    }
  }
}

1行目~7行目
build.gradleファイルのpluginセクションで利用するプラグインのリポジトリを設定します。
9行目~12行目
build.gradleファイルで依存解決に使用する外部リポジトリを設定します。
13行目~17行目
バージョンカタログファイルを共通化するため、プロジェクトのバージョンカタログファイルを読み込みます。

作成後、『Sync Now』で内容をプロジェクトに反映させます。

バージョンカタログファイルにComposite Buildで使用するライブラリの定義を追加します。

   :
[libraries]
   :
tools-build-gradle = { module = "com.android.tools.build:gradle", version.ref = "android-application" }
kotlin-gradle      = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin-android" }
   :

4行目~5行目[libraries]
Composite Buildで使用するライブラリを定義します。

追加後、『Sync Now』で内容をプロジェクトに反映させます。

build-logic直下にkotlinスクリプト build.gradle.kts を新規に作成します。

plugins {
  `kotlin-dsl`
}

dependencies {
  implementation(libs.tools.build.gradle)
  implementation(libs.kotlin.gradle)
}

2行目
ビルドスクリプトをKotlinで記述するためのプラグインを指定します。
6行目~7行目
依存するライブラリを指定します。

作成後、『Sync Now』で内容をプロジェクトに反映させます。

プロジェクト直下のsettings.gradle.ktsを編集して、Composite Buildをプロジェクトに適用します。

   :
includeBuild("build-logic")

2行目
最終行に追加します。

編集後、『Sync Now』で内容をプロジェクトに反映させます。

Build Logicの作成

Composite BuildのBuild Logicを作成します。

build-logic内にsrc/main/kotlinディレクトリを作成します。

作成したsrc/main/kotlin内にバージョンカタログファイルを参照する関数を作成します。
ファイル名をVersionCatalog.ktにしています。

import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalog
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.getByType

internal val Project.catalog
  get(): VersionCatalog = extensions.getByType<VersionCatalogsExtension>().named("libs")

internal fun VersionCatalog.version(name: String): String {
  return findVersion(name).get().requiredVersion
}

6行目
catalogでバージョンカタログファイルを参照するように定義しています。
9行目~11行目
バージョンカタログファイルからバージョン情報を取り出す関数を定義しています。

複数の各モジュールのbuild.gradle.ktsで必要となるcompileSdk等を共通のBuild Logicとして定義します。

compileSdk等のバージョン情報をバージョンカタログファイルに追記します。

[versions]
compile-sdk = "34"
target-sdk  = "34"
min-sdk     = "27"
   :

2行目~4行目[versions]
それぞれのバージョンを任意の名前で指定します。

追記後、『Sync Now』で内容をプロジェクトに反映させます。

src/main/kotlin内に共通定義関数を作成します。
ファイル名をConfigureExtension.ktにしています。

import com.android.build.api.dsl.CommonExtension
import org.gradle.api.JavaVersion
import org.gradle.api.Project
import org.gradle.api.plugins.ExtensionAware
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions

internal fun Project.configureCommonExtension(
  extension: CommonExtension<*, *, *, *, *>
) {
  extension.apply {
    compileSdk = catalog.version("compile-sdk").toInt()
    defaultConfig {
      minSdk = catalog.version("min-sdk").toInt()
      testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }
    compileOptions {
      sourceCompatibility = JavaVersion.VERSION_11
      targetCompatibility = JavaVersion.VERSION_11
    }
    kotlinOptions {
      jvmTarget = JavaVersion.VERSION_11.toString()
    }
  }
}

private fun CommonExtension<*, *, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) {
  (this as ExtensionAware).extensions.configure("kotlinOptions", block)
}

7行目~24行目(Project.configureCommonExtension)
全モジュールのbuild.gradle.ktsで共通な項目を定義している関数です。
関数名configureCommonExtensionは任意の名前です。
11行目、13行目
VersionCatalog.ktで定義した関数を使用してバージョンカタログファイルからバージョン情報を取り出しています。
26行目~28行目(CommonExtension<*, *, *, *, *>.kotlinOptions)
configureCommonExtension関数のkotlinOptionsを処理する関数を定義しています。

appモジュール用のビルドプラグインの作成

appモジュールの依存ライブラリ情報をバージョンカタログファイルに追記します。

[versions]
   :
androidx-core      = "1.12.0"           # https://androidx.tech/artifacts/core/core-ktx/
androidx-appcompat = "1.6.1"            # https://mvnrepository.com/artifact/androidx.appcompat/appcompat
google-android-material = "1.11.0"      # https://mvnrepository.com/artifact/com.google.android.material/material
junit         = "4.13.2"                # https://mvnrepository.com/artifact/junit/junit
junit-ext     = "1.1.5"                 # https://androidx.tech/artifacts/test.ext/junit/
espresso-core = "3.5.1"                 # https://androidx.tech/artifacts/test.espresso/espresso-core/

[libraries]
   :
androidx-core-ktx  = { module = "androidx.core:core-ktx",       version.ref = "androidx-core" }
androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" }
google-android-material = { module = "com.google.android.material:material", version.ref = "google-android-material" }
junit                   = { module = "junit:junit",             version.ref = "junit" }
androidx-test-ext-junit = { module = "androidx.test.ext:junit", version.ref = "junit-ext" }
androidx-test-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "espresso-core" }

[plugins]
   :

3行目~8行目[versions]
コメントのURLを参照して最新安定バージョンを指定します。
12行目~17行目[libraries]
任意の名前でライブラリとバージョンを関連付けします。
/app/build.gradle.kts内のdependenciesブロックを参照して指定します。

追記後、『Sync Now』で内容をプロジェクトに反映させます。

src/main/kotlin内にappモジュールのbuild.gradle.ktsで使用するビルドプラグインを作成します。
ファイル名をApplicationConfigurePlugin.ktにしています。

import com.android.build.api.dsl.ApplicationExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies

class ApplicationConfigurePlugin: Plugin<Project> {
  override fun apply(project: Project) {
    with(project) {
      with(pluginManager) {
        apply("com.android.application")
        apply("org.jetbrains.kotlin.android")
        apply("com.google.devtools.ksp")
        apply("com.google.dagger.hilt.android")
      }
      extensions.configure<ApplicationExtension> {
        configureCommonExtension(this)
        defaultConfig.targetSdk = catalog.version("target-sdk").toInt()
        buildTypes {
          release {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
          }
        }
      }
      dependencies {
        add("implementation", catalog.findLibrary("androidx.core.ktx").get())
        add("implementation", catalog.findLibrary("androidx.appcompat").get())
        add("implementation", catalog.findLibrary("google.android.material").get())
        add("implementation", catalog.findLibrary("hilt.android").get())
        add("testImplementation", catalog.findLibrary("junit").get())
        add("androidTestImplementation", catalog.findLibrary("androidx.test.ext.junit").get())
        add("androidTestImplementation", catalog.findLibrary("androidx.test.espresso.core").get())
        add("ksp", catalog.findLibrary("hilt.compiler").get())
      }
    }
  }
}

11行目~12行目
Appモジュールで使用するプラグインを定義しています。
/app/build.gradle.kts内のpluginsブロックを参照して指定します。
13行目~14行目
KSPとHiltのプラグインを定義しています。
17行目
ConfigureExtension.ktで作成した全モジュールの共通定義を呼び出しています。
18行目
defaultConfigブロックのtargetSdkをバージョンカタログを参照して指定しています。
19行目~24行目
/app/build.gradle.kts内のandroid/buildTypesブロックを参照して指定します。
27行目~29行目、31行目~33行目
dependenciesブロックの依存ライブラリを定義しています。
/app/build.gradle.kts内のdependenciesブロックを参照して指定します。
バージョンカタログを参照しています。
30行目
Hiltの依存ライブラリをバージョンカタログを参照して定義しています。
34行目
KSPの依存ライブラリをバージョンカタログを参照して定義しています。

作成したビルドプラグインをappモジュールのbuild.gradle.ktsで使用できるようにbuild-logic直下のbuild.gradle.ktsに追記します。

   :
gradlePlugin {
  plugins {
    register("ApplicationConfigurePlugin") {
      id = "build.logic.application.configure"
      implementationClass = "ApplicationConfigurePlugin"
    }
  }
}

4行目
任意の名前で名称を定義しています。
5行目
任意の名前でプラグインのidを定義しています。
6行目
プラグインを実装しているクラスを指定します。
src/main/kotlin内に作成したApplicationConfigurePlugin.ktで定義しているクラス名です。

追記後、『Sync Now』で内容をプロジェクトに反映させます。

appモジュールのbuild.gradle.ktsに作成したビルドプラグインを適用します。

plugins {
  id("com.android.application")
  id("org.jetbrains.kotlin.android")
  id("build.logic.application.configure")
}

android {
  namespace = "jp.co.example.android01"
  compileSdk = 34

  defaultConfig {
    applicationId = "jp.co.example.android01"
    minSdk = 27
    targetSdk = 34
    versionCode = 1
    versionName = "1.0"

    testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
  }

  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"
  }
}

dependencies {

  implementation("androidx.core:core-ktx:1.10.0")
  implementation("androidx.appcompat:appcompat:1.6.1")
  implementation("com.google.android.material:material:1.9.0")
  testImplementation("junit:junit:4.13.2")
  androidTestImplementation("androidx.test.ext:junit:1.1.5")
  androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}

2行目~3行目、9行目、13行目~14行目、18行目、21行目~33行目、38行目~43行目
ビルドプラグインで定義しているので削除します。
4行目
/build-logic/build.gradle.ktsで定義したビルドプラグインのidを指定します。

適用後、『Sync Now』で内容をプロジェクトに反映させます。

ビルドプラグインを適用した後に、プロジェクトが正常にビルドできることを確認します。

Hiltの使用準備

appモジュールにApplicationクラスを継承したクラスを作成してHiltの使用準備を行います。
※クラス名は任意です。

package jp.co.example.android01

import android.app.Application
import dagger.hilt.android.HiltAndroidApp

@HiltAndroidApp
class AppExt: Application() {
}

6行目
Hiltの使用を宣言しています。
7行目
Applicationクラスを継承しています。

appモジュールのAndroidManifest.xmlに作成したクラスを登録します。

   :
  <application
        android:name=".AppExt"
   :

3行目
作成したクラスの名前を指定しています。

目次

android/studio/application.txt · 最終更新: 2024/01/12 by プログレス合同会社