チュートリアルだと気づけないAndroidアプリ開発を始める上で必要になる知識

# 概要
[Android Kotlin codelab course](https://qiita.com/takahirom/items/3e75581c6f8d4d31b7fa)でKotlinに関する知識やAndroidのコードに関する知識はかなり手に入れることができますが、
実際に開発を始める上で必要になる知識があると感じているので、それをまとめて紹介しようと思います。


# Android Studioを効率的に使う
知っておけば楽になったのに、、というのが結構たくさんあります。

## なぜかビルドできない、importできないときの1次対応

* File - Sync Project with Gradle FIlesしてみる
* ダメならFile - Invalidate Caches and Restartを試す
* ダメならプロジェクトをimportしなおす。ここから一度プロジェクトを消せます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/0f0a7443-459c-d936-64bf-d0041b837084.png)


## CMD + SHIFT + A(Win: Ctrl + Shift + A): Actionの検索
※ CMD = Command
このコマンドを入力すると、Android Studio上でできることが全て表示され、検索することができます。まず**最初にこのショートカットだけ覚えれば検索結果にそれを行うショートカットも表示されるため、何でもできるようになります**
リネームなどのリファクタリングしたいとか、プロジェクトのSyncをしたい（Gradle sync）したいとか、いちいちこの項目はFileのメニューに入っていて、、とか探すの大変なので、いろんな何かがしたいときに、Actionを検索することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/d5af8c7c-c23f-c580-686f-5b232af9aa44.png)


## SHIFT + SHIFT: すべての場所から検索
何かを探したい！というときに、ファイルもクラス名もメソッド名も全部探せるのがこのコマンドです。
ただ、このコマンドはすべての場所から検索するので、多少ラグがある場合があります。そこが気になってきたらファイルの検索(CMD+SHIFT+O(Win:Ctrl + Shift + N))や、シンボルの検索(CMD+OPTION+O(Win:Ctrl + Alt + Shift + N))を使い分けて覚えていくといいでしょう。

## CMD + クリック(または CMD + B): 参照ジャンプ(宣言に（直接）移動)によって、移動する
(WindowsではControl + クリックなど)
コードを読んでいるときは、このファイルの実装ってどうなっているんだろう。と飛びたくなることがよくあります。また呼び出し元を検索したくなることもよくあります。そんなときはCMDを押しながらクリック、またはCMD + Bで飛ぶことができ、また宣言上で、CMD + Bで呼び出し元も検索できます。![cmdb.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/a966d2fc-8800-078f-3389-28ae18b1f8ac.gif)


## メモリを設定しよう
大きいアプリではデフォルトの1280MBではAndroid Studioのメモリサイズが足りず、フリーズして辛いことがあります。
自分が使っているPCのスペックのメモリサイズを確認して、Help - Edit Custom VM Optionsでメモリサイズを変更しておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/aab24209-b542-667b-8939-b7ccd466c28f.png)

```
-Xmx4G
```

## Project viewによるプロジェクト表示を使う
デフォルトではAndroid viewという表示になっています。この表示はシンプルにファイルを表示してくれますが、実際のフォルダ構造と違うので、実際にファイルを置いたりするときに手間取ったりします。Project viewを使うことで、実際のフォルダ構造と同じ形で表示してくれるので、トラブルを回避しやすいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/75835734-d51a-70ec-5cb6-7642fd54f206.png)


## デバッグとデバッグ時にコード実行
デバッグでとめたいときにこのあたりをクリックするとブレークポイントをはることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/a73ad270-6871-a7a1-63cc-25340c8c4e26.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/cdcc564f-3fd4-801a-c5f2-30e3f301457c.png)
この状態でこの虫ボタン🐞を押すことで実行時にそこを通ったときに止めることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/71c221a2-83fc-b9a7-fc28-88bdc75047ca.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/7c61e0e6-2580-9fc5-3936-00afc2492604.png)

またアプリを普通に起動している状態で、途中でデバッガーをつけたくなった場合はこのボタンを押すことで、**アプリの再起動無しでデバッガーをつけることができます。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/26dfb91b-1648-c69a-b1fa-4ad528b4109d.png)


止めたときに変数の中身が見たくなるかもしれません。そのときはAltを押しながら変数をクリックするとその変数の中身をみることができます。
![test.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/92b1688b-9cfc-1d4a-2898-442831758701.gif)
また計算機ボタンを押すことで、ブレークポイントで任意のプログラムを実行することができます。
![calc.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/b712d193-4ec7-85de-656c-224e38afa970.gif)



# Gradleによるビルド
Android Studioからのビルドは内部的にGradleというビルドシステムを使っています。
コンソールから以下のように`./gradlew tasks`を実行すると、以下のように表示されます。
このリストによって何ができるのかがわかります。

```console
$ cd android-sample-project
$ ./gradlew tasks
> Task :tasks

------------------------------------------------------------
Tasks runnable from root project
------------------------------------------------------------

Android tasks
-------------
androidDependencies - Displays the Android dependencies of the project.
signingReport - Displays the signing info for the base and test modules
sourceSets - Prints out all the source sets defined in this project.

Build tasks
-----------
assemble - Assemble main outputs for all the variants.
assembleAndroidTest - Assembles all the Test applications.
build - Assembles and tests this project.
buildDependents - Assembles and tests this project and all projects that depend on it.
buildNeeded - Assembles and tests this project and all projects it depends on.
```

例えば一番上の`androidDependencies`を実行してみしょう。以下のように依存しているライブラリが表示されます。このようにビルドを実行することでAndroid Studioではアプリをビルドしています。

```
./gradlew androidDependencies
> Task :model:androidDependencies
debug
debugCompileClasspath - Dependencies for compilation
+--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.20@jar
+--- org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.10.0@jar
+--- org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.3.20@jar
+--- org.jetbrains.kotlin:kotlin-stdlib:1.3.20@jar
+--- org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:0.10.0@jar
+--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.20@jar
+--- org.jetbrains:annotations:13.0@jar
\--- com.soywiz:klock-jvm:1.1.0-eap-100@jar
...
```

具体的には`./gradlew assembleDebug` (./gradlew asDeなど省略可)のようにすることでアプリのバイナリ(apkファイル)を作ることができます。

# まとめ
初心者に教えるときに効率的になる、ハマりがちなポイントを軽くお教えしました。
何かありましたらまた追記します。またこういうポイントも！みたいな所があれば気軽にコメントしてください！ :pray: