【2018年版】macでAndroid開発環境を構築するための４つのこと

#はじめに

今回はMAC端末にAndroidStudioを入れるためにやることを書いていきます
kotlinで開発とかそう言うのは一旦置いておきます
ただ事前にやっておかないと痛い目を見ることが多いのがAndroid開発なので経験から考えた快適な開発環境を作ります


###Android開発に必要なもの

1. Java開発のためのJDK
- AndroidStudio
- Javaで作ったものをビルドするためのgradle
- Genymotion

１と２は必須です
3のGradleはAndroidStudioに含まれてはいますが、ツールにversionを依存すると開発するのが大変になるのでバージョン管理の方法を本記事では書いておきます
Genymotionは爆速開発に必要なので合わせて書いておきます



#１、java開発のためのJDKをインストールしてバージョン管理しちゃう

###手順
1. homebrewでjEnvをインストール
- homebrew caskでJDKをインストール
- jEnvでJDKを管理
- イケイケでドヤ顔:relaxed:

###jEnvとは
javaの開発に必要なJDKのバージョン管理を楽にしてくれる優れものです
書き分けが面倒だったので記事内ではjEnv=jenvでお楽しみください
[【公式】jEnv](http://www.jenv.be/)


##1-1.【下準備】.bash_profileに以下を追記して環境変数を設定する

```.bash_profile
# jenv PATH
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"
```

`$ source .bash_profile`で反映

##1-2.homebrewでjenvをインストール

```
$ brew install jenv

# 確認

$ jenv versions
* system (set by /Users/UserName/.jenv/version)

```

##1-3.brewでtapしちゃう
JDKをhomebrew caskで入れたかったので儀式します

[【参考記事】brew tapとは](https://qiita.com/saa/items/85ed5e914d424fbf9fd6)

```
# brewでtapしているものの確認

$ brew tap
caskroom/cask
homebrew/core

# brewでversionsをtapする

$ brew tap caskroom/versions
==> Tapping caskroom/versions
＜以下略＞

# brew tap確認

$ brew tap
caskroom/cask
caskroom/versions
homebrew/core

```

##1-4.brew caskでjava8とjava9をインストール

```
# brew caskでinstallできるものを確認

$ brew cask search java
==> Exact Match
java
==> Partial Matches
charles-applejava           java-jdk-javadoc            java8                       netbeans-java-se
eclipse-java                java6                       netbeans-java-ee            yourkit-java-profiler


# JDK1.9 = java9をインストール

$ brew cask install java9
==> Caveats
This Cask makes minor modifications to the JRE to prevent issues with
packaged applications, as discussed here:
＜中略＞
端末のパスワードを聞かれるので入力

Password:
==> installer: Package name is JDK 9.0.1
==> installer: Installing at base path /
==> installer: The install was successful.
🍺  java was successfully installed!


# JDK1.8 = java8をインストール

$ brew cask install java8
==> Caveats
This Cask makes minor modifications to the JRE to prevent issues with
packaged applications, as discussed here:
＜中略＞
端末のパスワードを聞かれるので入力

Password:
==> installer: Package name is JDK 8 Update 152
==> installer: Installing at base path /
==> installer: The install was successful.
🍺  java8 was successfully installed!


# javaがインストールされてるか確認
# 先に1.9をインストールしたので1.9になってるのが正解

$ java -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
```



##1-5.jenvでJDKを管理

・jenv add（管理するものを追加する）

```
# javaの確認
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    9.0.1, x86_64:	"Java SE 9.0.1"	/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
    1.8.0_152, x86_64:	"Java SE 8"	/Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home


# 管理するものを追加

$ jenv add $(/usr/libexec/java_home -v 1.8)
$ jenv add $(/usr/libexec/java_home -v 1.9)


# java8とjava9が追加されてることをjenvで確認

$ jenv versions
* system (set by /Users/yu_iimura/.jenv/version)
  1.8
  1.8.0.152
  9.0
  9.0.1
  oracle64-1.8.0.152
  oracle64-9.0.1
```

jenvでグローバルに使用するjavaのバージョンを指定

AndroidStudio3系だと現在は1.9使うとエラーになるそうです（2018/2現在）
[【参考】stack overflow : Error:Could not initialize class com.android.sdklib.repositoryv2.AndroidSdkHandler
](https://stackoverflow.com/questions/37513651/errorcould-not-initialize-class-com-android-sdklib-repositoryv2-androidsdkhandl/37516664#37516664)

```
# 現在のjavaのバージョンを確認（java9なはず）

$ java -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)


# jenvでglobal設定
$ jenv global 1.8


# 指定後のjavaのバージョンがjava8になっていることを確認

$ java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
```

これでJDKのインストールが完了です:relaxed:



#２、ビルドツールgradleをインストールしてSDKMANでバージョン管理しちゃう

###手順
1. curlでSDKMANインストール
- SDKMANでgradleインストール
- SDKMANでgradleを管理
- イケイケでドヤ顔:relaxed:


###SDKMANとは
ビルドツールの管理をしてくれるツールです
gradle以外にもGroovyとかKotlin、Mavenなどのツールも管理してくれます
Scala開発でも使えると思います

[【公式】SDKMAN!](http://sdkman.io/index.html)

###gradleとは
参考記事でとてもわかりやすくまとめられています
[【参考記事】Gradle (build.gradle) 読み書き入門](https://qiita.com/hatimiti/items/a127311d739c9d3e0045)

>Gradle (ぐれいどる) は作成したプログラムをビルド(コンパイル／テスト／実行／パッケージング／配布)するために利用します。有名なビルドツールに Maven がありますが、Gradle は Maven のように XML で設定定義するのではなく Java 言語によく似た構文である Groovy 言語を利用して、プログラマブルにビルド定義ができプログラマと親和性が高いです。

XMLで設定を定義することができるのでとても便利ですし、AndroidStudioではメインで使用しています
昔はEclipse+Ant、Eclipse+Mavenとかビルドする環境がバラバラでしたのでgoogelさんが統一してくれて助かります


##2-1.curlでSDKMANインストール

```
# sdkman install
$ curl -s get.sdkman.io | bash

＜中略＞
All done!


Please open a new terminal, or run the following in the existing one:

    source "/Users/UserName/.sdkman/bin/sdkman-init.sh"

Then issue the following command:

    sdk help

Enjoy!!!


# initシェルを実行

$ source "/Users/yu_iimura/.sdkman/bin/sdkman-init.sh"

# インストールの確認

$ sdk help
Invalid command: hepl

Usage: sdk <command> [candidate] [version]
       sdk offline <enable|disable>
＜以下略＞

```

###SDKMANひと手間

.bashrcにsdkmanの設定が書き込まれているのですが.bash_profileに以下を追記しないと呼び出されないので対応
.bash_profileを汚すのヤダって人は自分で考えてください

.bash_profile

```
if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi
```

##2-2.SDKMANでgradleインストール

```
# gradle確認
$ gradle -v
-bash: gradle: command not found

# gradleインストール
$ sdk install gradle

Downloading: gradle 4.4.1

In progress...

######################################################################## 100.0%

Installing: gradle 4.4.1
Done installing!


Setting gradle 4.4.1 as default.


# gradleインストール後の確認

$ gradle -v

------------------------------------------------------------
Gradle 4.4.1
------------------------------------------------------------

Build time:   2017-12-20 15:45:23 UTC
Revision:     10ed9dc355dc39f6307cc98fbd8cea314bdd381c

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM:          1.8.0_152 (Oracle Corporation 25.152-b16)
OS:           Mac OS X 10.13.2 x86_64
```

##2-3.SDKMANでgradleを管理

SDKMANでgradleのバージョン違いのインストールとデフォルト設定の切り替えをします

```
# バージョン違いのインストール

$ sdk install gradle <version> / ex. sdk install gradle 4.4


# デフォルト設定の切り替え

$ sdk default gradle <version> / ex. sdk install gradle 4.4
```

これでgradleのインストールが完了です:relaxed:


#３、AndroidStudioをインストール

###AndroidStudioとは
Androidアプリの開発を行うためのgoogle公式のツールです

[【公式】AndroidStudio](https://developer.android.com/studio/index.html?hl=ja)

###手順
1. homebrew caskでAndroidStudioをインストール
- イケイケでドヤ顔:relaxed:

####caskでインストールできるAndroid関連のツール

```
$ brew cask search Android

==> Partial Matches
android-file-transfer                 android-studio                        xamarin-android
android-ndk                           android-studio-preview                xamarin-android-player
android-platform-tools                androidtool
android-sdk                           unity-android-support-for-editor

```

##3-1.homebrew caskでAndroidStudioのインストール


```
$brew cask install android-studio

==> Satisfying dependencies
==> Downloading https://dl.google.com/dl/android/studio/ide-zips/3.0.1.0/android-studio-ide-171.4443003-mac.zip
######################################################################## 100.0%
==> Verifying checksum for Cask android-studio
==> Installing Cask android-studio
==> Moving App 'Android Studio.app' to '/Applications/Android Studio.app'.
🍺  android-studio was successfully installed!

```

これでAndroidStudioのインストールが完了です:relaxed:





#４、GenymotionでAndroid爆速環境を手に入れちゃう

###手順
1. homebrew caskでvirtualboxをインストール
- homebrew caskでgenymotionをインストール
- イケイケでドヤ顔:relaxed:

###Genymotionとは
アプリ開発に欠かせない端末シミュレータのツールです
Android開発ではiOS開発と比べて純正のシミュレータが起動が遅い、ビルドの反映が遅い、使い勝手が悪いなどのハンディがありました
最近はそうでもないらしいのですが、2013年頃から爆速環境と話題になったgenymotionは手放せないツールです

[【公式】Genymotion](https://www.genymotion.com/)

##4-1.homebrew caskでvirtualboxをインストール

###virtualboxとは

参考記事でまとまってますが仮想化ソフトウェアです
PCの中に小さいPCを作ってくれるツールです

[【参考記事】VirtualBox（バーチャルボックス）とは？](https://hajipro.com/virtualbox/what-virtualbox)

```
$ brew cask install virtualbox
==> Caveats
To install and/or use virtualbox you may need to enable their kernel extension in
＜中略＞
==> installer: Installing at base path /
==> installer: The install was successful.

🍺  virtualbox was successfully installed!

```

##4-2.homebrew caskでgenymotionをインストール

```
$ brew cask install genymotion
==> Satisfying dependencies
All Cask dependencies satisfied.
==> Downloading https://dl.genymotion.com/releases/genymotion-2.11.0/genymotion-2.11.0.dmg

🍺  genymotion was successfully installed!

```

##4-3.genymotionの設定

大変よくまとめられている記事があったので参考にしてください
簡単にすると以下の通りです

1. genymotionへのユーザ登録（必須ですがお金はかかりません）
2. deviceを作成
3. AndroidStudioでgenymotionのpulginをインストール

[【参考記事】Genymotionを使ってMac環境でAndroidアプリ実行環境を整える](https://qiita.com/ykubot/items/a83d94e5dd026404af3c)


これでgenymotionのインストールが完了です:relaxed:



#まとめ

今回こだわったのは、いかにバージョン管理できるかということと、全てのインストール作業をターミナルで行えるかということです
AndroidアプリはiOSアプリと違って、バージョン管理が大変で開発対象APIやビルドツールの管理を考えないまま開発環境を構築すると痛い目見ます
経験したことを踏襲して今回の記事を書かせていただきました
より良いツールなどありましたら教えていただけると嬉しいです


# おまけ

## adbコマンドが使えるようにPATHを設定する

```.bash_profile

# adb PATH
export PATH=/Users/[user_name]/Library/Android/sdk/platform-tools:$PATH
```

設定したら忘れないように`source .bash_profile`しましょう