🦔

Android Studio で QRコード認識アプリを作成する

2024/04/14に公開

はじめに

Android Studio で簡単なサンプルアプリを作成しようと思います。

環境構築

Kotolin

Kotolin(コトリン)は2011年に開発された Java 仮想マシン(JVM)で動作するオブジェクト指向のプログラミング言語です。2017年には Google が Android Developer 言語として公式に採用したことで普及が加速しました(といっても、Android 開発以外ではなかなか見かけません)。Kotolin と Java は 100% の互換性があることから、Java からの移行もスムーズに行うことができます。

Gradle

Java 向けに開発されたビルドツールで、JVM で実行されるものです。

Android Studio について

Android Studio は Android アプリケーション開発の統合環境で、ソースコードの編集からビルド、デプロイまでを一気通貫で行うことができるツールです。

プロジェクト

今回は Empty Views Acrtivity を使用します。

作成すると、Gradle のダウンロード、ビルドなどの処理が走ります。しばらくすると、Andrdoid ビューを使用することができるようになります。左側に表示されているのが Android ビューで、「Android v」と表示されているボタンを押すとその他の表示形式になります。

app ディレクトリ

どのようなプロジェクトのテンプレートを使用するかでディレクトリ構成も変わってきますが、今回の Empty Views Acrtivity プロジェクトを例に、app ディレクトリ以下について説明します。

manifests

アプリ共通の設定ファイルである AndroidManifest.xml が配置されているディレクトリです。パーミッションの定義などアプリ全体の機能に関わる設定を記入しておくファイルです。

kotolin+java

Kotolin のソースコードが配置されています。

res

アプリのアイコン、画像、画面レイアウト、文字列などの resource が配置されています。

  • drawable : 画像などを配置
  • layout : レイアウトに関するファイルを配置
  • mipmap : アイコンなどを配置
  • values : 色、テーマなどの値を配置
  • xml : 各種 XML を配置

アプリケーション作成

ビルドファイルの修正

必要なライブラリをインストールするためにビルドファイルを修正します。Android ビューでは2種類の build.gradle.kts がありますが、これらは配置場所が異なっているものです。Project ビューで見てみると配置されている場所が異なっていることが分かるかと思います。

今回は SampleApp/app/build.gradle.kts を以下のように修正します[1]

CameraX

CameraX は Android Jetpack のライブラリで、アプリケーションにカメラ機能を簡単に追加することができるようになります。

以下の依存関係を追加します(公式Ref)。

val camerax_version = "1.4.0-alpha04"
implementation("androidx.camera:camera-core:${camerax_version}")
implementation("androidx.camera:camera-camera2:${camerax_version}")
implementation("androidx.camera:camera-lifecycle:${camerax_version}")
implementation("androidx.camera:camera-video:${camerax_version}")
implementation("androidx.camera:camera-view:${camerax_version}")
implementation("androidx.camera:camera-mlkit-vision:${camerax_version}")
implementation("androidx.camera:camera-extensions:${camerax_version}")

今回は「Version Catalog を使いなさい」と lint warning が出ていますが、一旦このままで作業を進めます。

レイアウト

res/layout/activity_main.xml を開いて UI 画面の編集を行います。Android Studio 上では実際の UI を確認しながら開発を進めることができます。このレイアウトファイル activity_main.xml は実際の処理を記述しているファイルと紐づいています。

コード

今回すべてのロジックは MainActivity.kt に実装します。

Activity

Android アプリ画面のことを指します。Activity は activity_main.xml でレイアウトを定義し、MainActivity.kt で機能を定義するような形式で、二種類のファイルを用いて作成されます。

Acrtivity の状態遷移を実現するために、Activity クラスからコールバックが提供されています:


Android の基礎より

  • onCreate : Activity 生成時(画面を立ち上げた時)に一度だけ呼び出される(\simeq コンストラクタ)
  • onStart: 開始の状態になると呼び出される
  • onResume : onStart に続く処理を実装し、Activity を表示可能な状態にするための処理を実装する
  • onPause : アプリがバックグラウンドに移動した際に呼び出される
  • onStop : 完全にバックグラウンドに移動した際に呼び出される
  • onRestart : Activity 再表示の際に呼び出される
  • onDestroy : 破棄される直前に呼び出される

View

ボタンやテキストボックスなどのパーツを View と呼びます。

Fragment

Fragment とはコンテンツとライフサイクルを持った View で、Activity の上に積み重ねる形で使用します。View はライフサイクルを持っていないため、Activity (画面)と連動する処理を実装するのは View 単体では困難です。例えば Fragment を用いることで Tab 機能などを簡単に実装することができるようになります。

ViewBinding

Android 開発ではレイアウト用の XML と Kotolin のソースが別々で、それらを id を適切に割り当てることで対応付を行っていきます。その際に Kotolin であれば ViewBinding と呼ばれる手法を用いることができます(Developers[2]

ViewBinding を有効にすると、XML レイアウトファイル毎に自動でバインディングクラスが生成されます。例えば res/layout/activity_main.xml というファイルに対してキャメルケース + Binding.java という命名規則に従った新しいファイルが作成されます(今回であれば ActivityMainBinding.java)。

Activity で ViewBinding を使用する場合は onCreate() メソッドの中で以下の定義を行っていきます

private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    // ViewBinding を使用する場合の処理
    // inflate() メソッドを呼び出し、使用するバインディングクラスのインスタンスを作成する
    binding = ActivityMainBinding.inflate(layoutInflater)
    // ルートビューへの参照を取得する
    val view = binding.root
    // 画面上のアクティブビューに設定する
    setContentView(view)
}

XML レイアウトファイルで以下の定義がされている場合

<Button
    android:id="@+id/image_capture_button"
    ...
/>

image_capture_button がキャメルケースになった imageCaptureButton という ID として参照することができるようになります。以下の例だと、ボタン押下時に(適宜別で)定義しておいた customFunction が実行されるような設定をしています。

binding.imageCaptureButton.setOnClickListener { customFunction() }
脚注
  1. Kotolin で書かれているため *.kts という拡張子がついています。Groovy で書かれている場合はその拡張子はなく単純に build.gradle という表示です。 ↩︎

  2. ViewBinding 以前は findBiewById と呼ばれる手法が用いられていました。 ↩︎

GitHubで編集を提案

Discussion