目次

04.ウェブデータの取得

ウェブサイトをスクレイピングして、データを取得します。

ライブラリモジュールの作成

ウェブデータを取得するライブラリモジュールを作成します。

Fragmentモジュールの作成と同様に、アプリケーショントップのdataディレクトリ(新規に作成します)内に、下記の内容でwebモジュールを作成します。

Composite Buildへの対応

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

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

class LibraryConfigurePlugin: Plugin<Project> {
  override fun apply(project: Project) {
    with(project) {
      with(pluginManager) {
        apply("com.android.library")
        apply("org.jetbrains.kotlin.android")
        apply("com.google.devtools.ksp")
        apply("com.google.dagger.hilt.android")
      }
      extensions.configure<LibraryExtension> {
        configureCommonExtension(this)
        defaultConfig {
          consumerProguardFiles("consumer-rules.pro")
        }
        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("material").get())
        add("implementation", catalog.findLibrary("hilt.android").get())
        add("testImplementation", catalog.findLibrary("junit").get())
        add("androidTestImplementation", catalog.findLibrary("androidx.junit").get())
        add("androidTestImplementation", catalog.findLibrary("androidx.espresso.core").get())
        add("ksp", catalog.findLibrary("hilt.compiler").get())
      }
    }
  }
}

11行目~14行目(pluginManager)
ライブラリモジュールで使用するプラグインを定義しています。
17行目
ConfigureExtension.ktで作成した全モジュールの共通定義を呼び出しています。
18行目~26行目
/data/model/build.gradle.kts内のandroidブロックを参照して指定します。
29行目~31行目、33行目~35行目
/data/model/build.gradle.kts内のdependenciesブロックの依存ライブラリを定義しています。
バージョンカタログを参照しています。
32行目、36行目
Hiltの依存ライブラリをバージョンカタログを参照して定義しています。

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

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

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

変更後、『同期アイコン』で内容をプロジェクトに反映させます。

data/webモジュールのbuild.gradle.ktsをComposite Buildへ対応させます。

plugins {
  alias(libs.plugins.com.android.library)
  alias(libs.plugins.kotlin.android)
  id("build.logic.library.configure")
}

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

  defaultConfig {
    minSdk = 27

    testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    consumerProguardFiles("consumer-rules.pro")
  }

  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(libs.androidx.core.ktx)
  implementation(libs.androidx.appcompat)
  implementation(libs.material)
  testImplementation(libs.junit)
  androidTestImplementation(libs.androidx.junit)
  androidTestImplementation(libs.androidx.espresso.core)
}

2行目~3行目、9行目~30行目、35行目~40行目
ビルドプラグインで定義しているので削除します。
4行目
/build-logic/build.gradle.ktsで定義したライブラリモジュール用ビルドプラグインのidを指定します。

変更後、『同期アイコン』で内容をプロジェクトに反映させます。

Retrofitライブラリの導入

ウェブサイトをスクレイピングするにあたって、HTTP(S)通信を行うためのクライアント通信ライブラリRetrofitを導入します。

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

[versions]
   :
retrofit = "2.11.0"

[libraries]
   :
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
   
[plugins]
   :

3行目
任意の名前でバージョンを文字列で定義します。
mavenCentralリポジトリの最新安定バージョンを指定します。
7行目
任意の名前でライブラリとバージョンを関連付けします。

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

/data/webのbuild.gradle.ktsRetrofitライブラリへの参照を追記します。

   :
dependencies {
  implementation(libs.retrofit)
}

3行目
Retrofitライブラリをバージョンカタログファイルから参照しています。

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

ボタンの配置

ウェブデータを取得するための操作ボタンをHome Flagmentに配置します。

ボタンの表題をリソースファイルで定義します。

android:studio:application:android-app0401.png

Values XML File

Home Flagmentのsrc/mainディレクトリで『新規(N)』➡『XML』➡『Values XML File』でリソースファイルを新規に作成します。

ファイル名は標準に倣って『strings.xml』にします。

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="btn_getdata_caption">データ取得</string>
</resources>