Android+RetrofitでHTTP通信するアプリの作り方（その2）

# Android+RetrofitでHTTP通信するアプリの作り方（その2）

[前回](https://qiita.com/aburagirio/items/c55617eaa497669982ad)の記事でサーバーと通信ができるようになりました。

ここから作り込んでいきます。

ですが、あれこれ組み込む前に、ひとつ仕組みを組み込みます。

Dependency Injectionです。

最初から組み込んでおくと、後々楽ができます。


## 目次
- [Android+RetrofitでHTTP通信するアプリの作り方（その2）](#androidretrofitでhttp通信するアプリの作り方その2)
  - [目次](#目次)
  - [記事を書く上で参考にした資料](#記事を書く上で参考にした資料)
  - [Hiltとは](#hiltとは)
  - [準備](#準備)
    - [KSPの導入](#kspの導入)
      - [最上位の`build.gradle`にKSPを追記する](#最上位のbuildgradleにkspを追記する)
      - [`app/build.gradle`にKSPを追記する](#appbuildgradleにkspを追記する)
    - [Hiltのdependencyの追加](#hiltのdependencyの追加)
      - [最上位の`build.gradle`にHiltを追記する](#最上位のbuildgradleにhiltを追記する)
      - [`app/build.gradle.kts`にHiltを追加する](#appbuildgradlektsにhiltを追加する)
    - [Applicationの修正](#applicationの修正)
    - [Manifestの修正](#manifestの修正)
    - [Activity、Fragmentの修正](#activityfragmentの修正)
  - [試しにビルド](#試しにビルド)
  - [リポジトリ](#リポジトリ)

## 記事を書く上で参考にした資料

- CodeLabs

  - <https://developer.android.com/codelabs/android-hilt#0>
  
  androidで何かしようと思っらodeLabsを当たりましょう。大抵書いてあります

-  Hiltのサイト
  - <https://dagger.dev/hilt/>
  
  本家サイト。

## Hiltとは

<https://dagger.dev/hilt/>

Hilt provides a standard way to incorporate Dagger dependency injection into an Android application.

- AndroidアプリにDaggerを取り込む、ということ

## 準備

以下の準備が必要です。

1. KSPの導入
2. Hiltのdependencyの追加
3. Applicationクラスの修正
5. Manifestの修正
4. Actiity、Fragmentの修正

順に説明します。

### KSPの導入

最初に[KSP](https://developer.android.com/build/migrate-to-ksp)を追加しておきます。

Hiltの本家サイトにはkaptを使うよう記されていますが、より軽く動くKSPがリリースされています。

[developer.android.com](https://developer.android.com/build/migrate-to-ksp)にもkaptからKSPの移行のガイドがあります。

なので、KSPを導入します。

#### 最上位の`build.gradle`にKSPを追記する

```kotlin
plugins {
    id("com.google.devtools.ksp") version "1.9.22-1.0.17" apply false
}
```

KotlinのバージョンとKSPのバージョンは正しく対応させないとビルドできません。注意しましょう。

#### `app/build.gradle`にKSPを追記する

```kotlin
plugins {
    ...
    id("com.google.devtools.ksp")
    ...
}
```

### Hiltのdependencyの追加

<https://dagger.dev/hilt/gradle-setup>を参考に

#### 最上位の`build.gradle`にHiltを追記する

```kotlin
plugins {
    ...
    id("com.google.dagger.hilt.android") version "2.50" apply false
}
```

#### `app/build.gradle.kts`にHiltを追加する

```kotlin
plugins {
    id("com.google.dagger.hilt.android")
}
dependencies {
    ...
    // hilt
    implementation ("com.google.dagger:hilt-android:2.50")
    ksp ("com.google.dagger:hilt-compiler:2.50")
    // For instrumentation tests
    androidTestImplementation ("com.google.dagger:hilt-android-testing:2.50")
    kspAndroidTest ("com.google.dagger:hilt-compiler:2.50")
    // For local unit tests
    testImplementation ("com.google.dagger:hilt-android-testing:2.50")
    kspTest ("com.google.dagger:hilt-compiler:2.50")
    ...
}
```

annotationプロセッサーとしてKSPを使います。

### Applicationの修正

アプリケーションクラスの定義に`@HiltAndroidApp`アノテーションを付加します。

```kotlin
@HiltAndroidApp
class MyApplication: Application() {
}
```

アプリケーションクラスがない場合は追加します。

### Manifestの修正

アプリケーションクラスを追加したら、Manifestに`name`を追加しておきます。

```xml : AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    ...
    <application
        android:name=".MyApplication"
        ...
    >
        ...
    </application>
</manifest>
```

Hilt導入以前からアプリケーションクラスを利用していたなら、すでに追加済みのはずです。
その場合は、Manifestを修正する必要はありません。

### Activity、Fragmentの修正

`@AndroidEntryPoint`アノテーションを付加します。

```kotlin
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
    ...
}
```


## 試しにビルド

プロジェクトをビルドできれば完成です。プロジェクトにHiltが導入されました。

## リポジトリ

<https://github.com/aburagirio/retrofitExample.git>

ブランチ`part2`をcheck outしてください。