普段はiOS開発がメインなのですがKotlinも慣れてかないといけないと思い本格的に勉強を開始することにしました。まずはビルドなどの開発環境周りから理解していきたいと思います。
目次
Android Studioとは
Androidアプリ開発用の統合開発環境で、ビルド・実行・デバッグ・テスト・配布まで行うことができます。ベースの統合開発環境(IDE)はIntelliJ IDEAです。
InteliJ IDEA
JetBrainsという会社の統合開発環境がInteliJ IDEAというもので元々はJava用に作られたIDEだったのですが、今ではKotlin含め多言語化に対応されています。また、KotlinはGoogleがAndroidの公式言語としてサポートしています。
Android StudioはこのInteliJ IDEAにGoogleがAndroidの機能を搭載したIDEで、Android SDKやGradleなどの機能が多数ついてます。またエディタや言語解析などについてはInteliJ IDEAの機能をそのまま利用しているためツールの見た目はどちらも同じですね。
JDK(Java Development Kit)
まずJDKという存在を知る必要があります。Androidアプリの開発をする時に必ず耳にする単語です。InteliJ IDEAの機能ではなく、Java言語の公式ツールセットでOracleやOpenJDKコミュニティが提供しているものです。Java/Kotlinのコードをコンパイルして実行することができます。
JDKの標準ライブラリ
JDKにはJava言語向けの標準ライブラリなどが含まれています。Kotlinにも同じく標準ライブラリがありますが、javaのライブラリをラップして作られたものが多く存在するためKotlinを動かすにはJDKの標準ライブラリも必要となります。
javac
JDKに含まれるJavaコンパイラ。javacコマンドを利用して.javaで書かれたソースコードをJVMバイトコード(.class)に変換します。Kotlinの場合はkotlincというコンパイラがAndroid Studioに組み込まれており、同様にJVMバイトコードに変換することができます。
JVM(Java Virtual Machine)
JavaとKotlinのプログラムを実行する仮想マシンで.classコードを読み取って実行します。Javaアプリの場合はJVMをそのまま利用しますが、Androidアプリの場合は.classをD8で.dexに変換してからART(Android Runtime)が実行します。
D8:.classを.dexに変換するツール
.dex:拡張子はDalvik Executableの略。.classファイルを1つの.dexにまとめられるようにしたものになります(Android用バイナリコードの生成)
Gradle
Android Studio が裏で動かしているのがGradleと呼ばれるビルドツールとなります。D8を呼び出していたりととにかく色々なことを指示しています。
- ソースコードをコンパイル(kotlinc)
- .kt → .class → .dexの実行
- 依存ライブラリを解決
- APK/AABにパッケージング
build.gradle
build.gradleファイルではどういう手順でビルドするかや依存関係を定義することができます。
build.gradle (Project)
- プロジェクト全体の設定
- 各モジュール共通の Gradle バージョンやリポジトリ定義
build.gradle (Module)
- 個別モジュールの設定
- 依存ライブラリ、Kotlin/Java コンパイル設定、ビルドタイプ(debug/release)
gradle.properties
Gradle ビルドで使うプロジェクト全体の設定値や定数を定義するファイルでビルドスクリプトから参照可能です。
settings.gradle
プロジェクトに含まれるモジュールを定義するファイルで、Gradle にこのプロジェクトはどのモジュールで構成されているかを伝えます
Gradle Wrapper
プロジェクトごとに正しいGradle バージョンを自動で使える仕組みで開発マシンにGradleを事前にインストールしていなくても、プロジェクトを開けば自動でダウンロードして使用できる
Android SDK(Android Software Development Kit)
Android アプリを開発するために必要なライブラリ、ツール、APIのセットです。JDKがJavaやKotlinの基盤なら、Android SDKはAndroid専用の基盤。
APIライブラリ
Android 固有のクラスやインターフェース(Activity, Flagment, Intent, View)を適用しており、KotlinやJavaからこれを呼ぶことでAndroidアプリを作ることができます。
ビルドツール
- aab(Android Debug Bridge)
- エミュレーターや実機にアプリをインストール / デバッグする
- emulator
- Android OSの仮想環境
- D8/R8
- .class → .dexの最適化や難読化
JAR
配布やデプロイに関係するファイルになります。
JAR
Java Archiveの略称でジャーファイルと呼ばれています。複数の.classファイルやリソースをZip形式でJavaとKotlinのライブラリや実行可能アプリの配布形式に使われます(.jar)
Gradleのimplementation "xxx:yyy:1.0.0"
のように書いたときに利用できるライブラリのほとんどはJAR形式になっています。ライブラリをimportして使えるようにするためにはクラスパスと呼ばれるコンパイラや実行環境がクラスを探している場所にパスを追加する必要があります。Gradleはライブラリをこのクラスパスに追加してくれるため、開発時にはimportできるように候補が出る仕組みになっています。
おわりに
まだまだ知らないことがたくさんあるので手を動かしてみながらまとめていく予定です。