Jetpackを使ってみる

# 結果

![image.png](https://qiita-image-store.s3.amazonaws.com/0/42445/7163c343-daaf-d6f5-7493-06e4749e9845.png)
<font color="red">何の結果だよって感じだ</font>

# 動機

Android Developersを覗いたら、Jetpackとかいういい感じの機能が紹介されてた。
折角見かけたので使ってみた。

# 準備

公式によるとAndroid Studio 3.2からの機能なので、設定がStableだとCheck for updateしても入らない。
とりあえずcanalyに切り替えて、check for update。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/42445/d246844c-87aa-06e0-7175-c936cdcf92e9.png)

なんかupdate掛けたら、elevator.exeが実行許可を求めてきた。
何者か知らないけどとりあえず許可した。
マネしちゃいけない事だったら有識者の方がなんとかするだろう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/42445/70e361a2-b568-df4a-2ed0-4843a24d794a.png)
<font color="red">3.2どころか3.3がおススメされた</font>

downloadしようとしたらサイトに飛ぶ。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/42445/744e6640-0a80-25af-8813-e968be7b730d.png)
<font color="red">ここでのおススメは3.2らしい</font>

![image.png](https://qiita-image-store.s3.amazonaws.com/0/42445/c3a71f41-b434-c3b2-2f96-c3947a8f54dd.png)
<font color="red">割とでかいのでWiFi必須</font>

ダウンロードできたら解凍してbin/studio64.exeを叩く
最新版取ってきたはずなのにupdateがやたらと求められる。
めげずにupdate。


# 本題

とりあえず公式通りにやってみる。
まずはプロジェクト作成

![image.png](https://qiita-image-store.s3.amazonaws.com/0/42445/e0e8d901-2842-1fb0-f9fd-a2bab6987a72.png)
<font color="red">kotlin使う人はkotlinチェックを忘れずに</font>

Target Android Deviceも今まで通り

![image.png](https://qiita-image-store.s3.amazonaws.com/0/42445/5f567645-ff1f-2a2b-378b-1e33c0002045.png)

Fragment + ViewModelを選択

![image.png](https://qiita-image-store.s3.amazonaws.com/0/42445/4d1c6e56-ddae-c7b9-8dfb-626355cdc291.png)
<font color="red">公式だとActivity & Fragment + ViewModel</font>

公式通りStartActivity。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/42445/0e551dfb-b206-ae09-4994-1aa8d93fc11c.png)
<font color='red'>この時点でuiとパッケージ分けられる<font>

実際に生成されたファイルはこんな感じ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/42445/62acf0cd-31b6-4019-d278-87b978d40d8f.png)

ちょっとびっくりしたのが

 + generatedJavaってのがあって超絶便利そう
 + デフォルトでuiパッケージに分類されるの賢い

ではいよいよ``Take advantage of Jetpack``だ。

まずは、start_activity.xmlにnavigate_btを追加。

```xml
<Button
    android:id="@+id/navigate_bt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:text="@string/navigate"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.502"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/text" />
```

strings.xmlは適当に

```xml
    <string name="navigate">えいやっさ</string>
```

build.gradleにclasspathついか

```groovy
classpath 'android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha05'
```

appのgradleに参照を追加

```groovy
implementation "android.arch.navigation:navigation-fragment:1.0.0-alpha05"
implementation "android.arch.navigation:navigation-ui:1.0.0-alpha05"
```

StartFragmentのonActivityCreatedをちょっと編集

```kotlin
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        viewModel = ViewModelProviders.of(this).get(StartViewModel::class.java)

        viewModel.data.observe(this, Observer { data ->
            // Set the text exposed by the LiveData
            view?.findViewById<TextView>(R.id.text)?.text = data
        })
        view?.findViewById<Button>(R.id.navigate_bt)?.setOnClickListener {
            Toast.makeText(this.activity,"あらよっと", Toast.LENGTH_LONG).show()
        }
    }
```

サンプルではfragmentの切り替えとかやってるけど今回はそこまでやらない。
というわけで実行

![image.png](https://qiita-image-store.s3.amazonaws.com/0/42445/bef5ab43-6e0a-08d7-8a55-46fcc6f558ff.png)
<font color="red">できた(何かしらが)</font>

# ふりかえり

今回のJetpackは[Android Archtecture Component](https://developer.android.com/jetpack/arch/)をできる限り共通認識で利用するための仕組みっぽい。
というわけで、Jetpackを利用するならAndroid Archtecture Componentも勉強しよう！