今回は、かなり久しぶりに Androidアプリの開発をやってみます。まずは、開発環境の構築と、簡単なアプリを作ってみたいと思います。
今回の目的は、スマホを使って、NFC のリードライトがやることです。簡単な OSS を持ってきて動かしてみたいのですが、そちらは次回に書こうと思います。
それでは、やっていきます。
参考文献
今回、参考にした書籍です。
Kotlin は詳しく知らないので、文法などは以下の書籍を参考にしています。
はじめに
「Javaでデザインパターンを学ぶ」の記事一覧です。良かったら参考にしてください。
・第1回:Javaでデザインパターンを学ぶ:Singletonパターン
・第2回:Javaでデザインパターンを学ぶ:Template Methodパターン
・第3回:Javaでデザインパターンを学ぶ:Observerパターン
・第4回:Javaでデザインパターンを学ぶ:Iteratorパターン
・第5回:Javaでデザインパターンを学ぶ:Factory Methodパターン
・第6回:Javaでデザインパターンを学ぶ:Stateパターン
・第7回:Javaでデザインパターンを学ぶ:Visitorパターン
・第8回:Javaでデザインパターンを学ぶ:Adapterパターン
・第9回:Javaでデザインパターンを学ぶ:Prototypeパターン
・番外編:Javaのコンパイル方法(仕組み)をパッケージ含めていろいろ試してみる
・番外編2:Jarの作り方とJarを含んだコンパイル方法をパッケージ含めていろいろ試してみる
・番外編3:GradleでJavaプロジェクトを作ってみる(Ubuntu22.04)
・番外編4:IntelliJを使ってJavaのGradleプロジェクトでデバッグしてみる(Ubuntu22.04)
・番外編5:GradleプロジェクトでJGraphTを使う(Ubuntu22.04)
・番外編6:JGraphTのサンプルソースの解説と可視化の補足(Ubuntu22.04、IntelliJ、Gradle)
・番外編7:Androidアプリの開発環境の構築とHelloWorldアプリを作ってみる ← 今回
Android Studioのインストール
Android Studioのダウンロード
以下のリンクから Android Studio をダウンロードします。
zipファイルもあるようですが、exeファイルの方が推奨のようです。android-studio-2024.2.2.13-windows.exe がダウンロードできました。
では、ダブルクリックして、インストールを開始します。以下のようにインストーラが起動するので、Next をクリックします。

チェックが入った状態で、Next をクリックします。

インストール場所を変更したい場合は、任意の場所に変更して、Next をクリックします。

特に変更は必要ないので、Install をクリックします。

無事、インストールが完了しました。Next をクリックします。

実は、まだセットアップが続くので、チェックを入れたまま、Finish をクリックします。

セットアップウィザードが起動するので、Next をクリックします。

Standard でいいと思いますが、お好みでどうぞ。Next をクリックします。

内容を確認して、Next をクリックします。

ライセンス確認画面です。よければ、Accept を選択し、Finish をクリックします。ダウンロードが始まります。少し時間がかかります。

ようやくインストール完了です。Finish をクリックします。

HelloWorldアプリを作ってみる
早速、Android Studio を起動してみます。
プロジェクトの作成
下図のような画面が起動するので、「New Project」をクリックします。

下図のような画面になるので、余計なコードが含まれていないシンプルなテンプレートの「Empty Activity」を選択し、Next をクリックします。

下図のような画面になるので、Name に、任意のプロジェクト名(パッケージ名であり、保存するディレクトリ名であり、ここでは Hello とした)を入力して、Finish をクリックします。

下図のように、Android Studio が起動します。しばらくの間は、右下のプログレスバーが動いていて、バックグラウンドでビルドなどがされています。私の環境だと 10分ぐらいかかったと思います。完了するまで待った方がいいと思います。

プロジェクトの構成
プロジェクトを作成した時点のディレクトリ構成は以下のようになります。普通の Gradle の構成のように見えますね。app/src/main/java/com/example/hello/MainActivity.kt がエントリポイントですね。
$ tree . |-- app | |-- build.gradle.kts | |-- proguard-rules.pro | `-- src | |-- androidTest | | `-- java | | `-- com | | `-- example | | `-- hello | | `-- ExampleInstrumentedTest.kt | |-- main | | |-- AndroidManifest.xml | | |-- java | | | `-- com | | | `-- example | | | `-- hello | | | |-- MainActivity.kt | | | `-- ui | | | `-- theme | | | |-- Color.kt | | | |-- Theme.kt | | | `-- Type.kt | | `-- res | | |-- drawable | | | |-- ic_launcher_background.xml | | | `-- ic_launcher_foreground.xml | | |-- mipmap-anydpi-v26 | | | |-- ic_launcher.xml | | | `-- ic_launcher_round.xml | | |-- mipmap-hdpi | | | |-- ic_launcher.webp | | | `-- ic_launcher_round.webp | | |-- mipmap-mdpi | | | |-- ic_launcher.webp | | | `-- ic_launcher_round.webp | | |-- mipmap-xhdpi | | | |-- ic_launcher.webp | | | `-- ic_launcher_round.webp | | |-- mipmap-xxhdpi | | | |-- ic_launcher.webp | | | `-- ic_launcher_round.webp | | |-- mipmap-xxxhdpi | | | |-- ic_launcher.webp | | | `-- ic_launcher_round.webp | | |-- values | | | |-- colors.xml | | | |-- strings.xml | | | `-- themes.xml | | `-- xml | | |-- backup_rules.xml | | `-- data_extraction_rules.xml | `-- test | `-- java | `-- com | `-- example | `-- hello | `-- ExampleUnitTest.kt |-- build.gradle.kts |-- gradle | |-- libs.versions.toml | `-- wrapper | |-- gradle-wrapper.jar | `-- gradle-wrapper.properties |-- gradle.properties |-- gradlew |-- gradlew.bat |-- local.properties `-- settings.gradle.kts 31 directories, 37 files
いくつかのファイルを見ておきます。まず、settings.gradle.kts です。app というサブプロジェクトを include しています。
$ cat settings.gradle.kts pluginManagement { repositories { google { content { includeGroupByRegex("com\\.android.*") includeGroupByRegex("com\\.google.*") includeGroupByRegex("androidx.*") } } mavenCentral() gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() } } rootProject.name = "Hello" include(":app")
次に、build.gradle.kts です。Gradle では、サブプロジェクトごとに build.gradle.kts はありますが、トップディレクトリに build.gradle.kts は無かったと思います。内容的にはあまり必要には見えません。
$ cat build.gradle.kts // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.compose) apply false }
最後に、appサブプロジェクトの build.gradle.kts です。自分で用意するのは、なかなか大変そうな内容です。
$ cat app/build.gradle.kts plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) } android { namespace = "com.example.hello" compileSdk = 35 defaultConfig { applicationId = "com.example.hello" minSdk = 24 targetSdk = 35 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = "11" } buildFeatures { compose = true } } dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.ui) implementation(libs.androidx.ui.graphics) implementation(libs.androidx.ui.tooling.preview) implementation(libs.androidx.material3) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.ui.test.junit4) debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) }
JavaのバージョンとGradleのバージョン
以前、以下の記事のように、Windows で、Java の開発環境を構築したときは、OpenJDK の 22 をインストールしました。
daisuke20240310.hatenablog.com
また、以下の記事で、Gradle の環境構築をした際は、Gradle 8.3 でした。
daisuke20240310.hatenablog.com
今回の環境のバージョンを確認します。まず、Gradle の情報を見てみます。
File → Settings → Build, Execution, Development → Build Tools → Gradle を開きます。21.0.4 というのが見えます。

一方、トップディレクトリで以下のように実行すると、いろんなバージョンが確認できました。こちらを信用しておけば良さそうです。Java は以前インストールしたものが使われているようでした。
$ ./gradlew -v Welcome to Gradle 8.10.2! Here are the highlights of this release: - Support for Java 23 - Faster configuration cache - Better configuration cache reports For more details see https://docs.gradle.org/8.10.2/release-notes.html ------------------------------------------------------------ Gradle 8.10.2 ------------------------------------------------------------ Build time: 2024-09-23 21:28:39 UTC Revision: 415adb9e06a516c44b391edff552fd42139443f7 Kotlin: 1.9.24 Groovy: 3.0.22 Ant: Apache Ant(TM) version 1.10.14 compiled on August 16 2023 Launcher JVM: 22.0.1 (Oracle Corporation 22.0.1+8-16) Daemon JVM: C:\Program Files\Java\jdk-22 (no JDK specified, using current Java home) OS: Windows 10 10.0 amd64
HelloWorldアプリをエミュレータで起動する
画面の▷ボタンを押して、アプリを起動してみます。最初はなんかエラー出ましたが、再度実行したところ、正しく起動したようです!

HelloWorldアプリを実機で起動する
まず、Androidスマホの準備をします。自作の Androidアプリを自分のスマホで動かすには、開発者向けオプションの USBデバッグを有効にする必要があります。
やり方は、Android の設定→デバイスについて→バージョン に行きます。ビルド番号というのがあるので、ここを 7回タップします。すると、開発者モードに切り替わったメッセージが出ます。次は、Android の設定→システム設定→開発者向けオプション に行き、USBデバッグを有効にします。これで、準備は完了です。Androidバージョンによって、メニューの文字列には違いがあるかもしれません。
Android Studio の方に戻り、先ほど、HelloWorldアプリが起動している状態の場合は、停止しておきます。メニューの View → Tools Windows → Logcat を起動します。すると、下図の下側の赤枠のところがエミュレータの表示になっていると思うので、そこを自分の Androidスマホに切り替えます。また、同様に、上側の赤枠についても、どちらを起動するかを示しているので、エミュレータになっていたら、実機に切り替えます。

あとは、エミュレータのときと同様に、▷ボタンを押して実行します。すると、以下のように、実機で、HelloWorldアプリを実行できました。

おわりに
今回は、久しぶりに Androidアプリの開発環境を立ち上げてみました。以前より、トラブルも少なく、簡単に動いたと思います。次回は、既存の OSS の Androidアプリを動かしてみたいと思います。
最後になりましたが、エンジニアグループのランキングに参加中です。
気楽にポチッとよろしくお願いいたします🙇
今回は以上です!
最後までお読みいただき、ありがとうございました。