第1回:Android Studioアプリケーション開発

最終更新日:2025年4月29日

ホームへ戻る

今回の実験において実行確認・提出するもの

Task 1~5を実施しながら、各演習課題を実施・確認・提出して下さい。実行確認は、TA・教員からのチェックを受けて下さい。

【チェック合格条件】各スクリーンショットと内容が一致すること(色は問わない)

イントロダクション

今回の目標はAndroid Studioを用いた開発環境とその補助機能になれることです。本資料を注意深く読めば、十分実施できる内容です。Android Studioの使い方に関するより詳細な説明はAndroid Developersサイトを参照することをお勧めします(それでも分からない場合はネット・○○GPTで検索してみましょう)。

Task 1: 使用端末(Tablet or Smartphone or Emulator)の設定

Task 1では、使用端末(Tablet or Smartphone or Emulator)の設定をします。

実機の場合(Tablet or Smartphone)

Emulatorの場合

  1. Android Studio起動後、Optionメニューから「Virtual Device Manager」をクリックする(Fig.1)
    fig1
    Fig.1 Android Studioの起動画面とOptionメニュー
  2. Device Managerの画面から「+」アイコンをクリックして、新しいVirtual Deviceの作成を開始する(Fig.2)。
    fig2
    Fig.2 Device Managerの画面
  3. Virtual Device Configurationでは、新しく作成する仮想デバイスの設定を行う。まずは使いたいハードウェアを選ぶ。「Tablet>Pixel」を選択して、「NEXT/次」に進む。(Fig.3)
    fig3
    Fig.3 仮想デバイスの設定画面(ハードウェアの選択)
  4. 次に、その仮想デバイス上で動作するAndroid OSのバージョンを決める。そのため、使いたいOSのバージョンの“イメージ”をAndroid Studioにインストールする必要がある。各バージョン名の横にあるダウンロードアイコンをクリックすれば、そのバージョンのインストールができる。今回は、現時点での最新OSである「VanillaCream」をダウンロード・インストールする。(Fig.4)
    fig4left fig4
    Fig.4 開発したいAndroid OSのイメージを選定する画面(左)と新規イメージインストール中の画面(右)
  5. OSイメージのダウンロードが終わると、仮想デバイスの詳細設定画面が表示される(Fig.5)。「AVD Name」の入力欄に「Pixel Tablet LOPEZ」のように入力する。「LOPEZ」の部分はご自分の苗字をAlphabetで入力し(同姓の学生がいる場合、名も苗字の後に追記すること)し、「Finish」をクリックする。
    fig5
    Fig.5 仮想デバイスの詳細設定画面
  6. 仮想デバイス一覧に作成した仮想デバイスが表示されていることを確認し、「再生▶」ボタンをクリックする(Fig.6)。
    fig6
    Fig.6 仮想デバイス一覧の画面
  7. 正しく設定できていれば、Fig.7のように、仮想Pixel Tablet が表示される。
    fig2.png
    Fig.7 起動中の仮想PIXEL TABLET

Task 2: プロジェクト作成とアプリの実行

Task 2では、最初のAndroidアプリ「Hello World」を作成し、アンドロイドデバイス(実機)もしくはエミュレータ上で実行します。

  1. Android Studioがまだ開かれていない場合は、Android Studioを開きます。
  2. 「Welcome to Android Studio」ウィンドウ内の、"Projects"タブでは、これまで作成したプロジェクトのリストが表示されます。上にある"New Project"ボタンをクリックします。
    fig5.png
    Fig.8 Android Studioの起動画面
  3. 「New Project」ウィンドウ内、"Phone and Tablet" タブにおいて、様々なプロジェクトのテンプレートが表示されています。ここで必ず "Empty Views Activity"(必ず)を選択し、「Next」をクリックします。Activityとは、"Androidアプリの画面"に相当します。ボタンやリストが配置された画面、Webページが表示されている画面、3Dグラフィックスが表示されている画面を作成するためにActivityはAndroidアプリには欠かせない要素です。
    fig3.png
    Fig.9 「Create Android Project」ウィンドウ内の"Select a Project Template"画面例
  4. 「New Project」ウィンドウの、"Name"、"Package name"、"Save location"、"Language"、"Minimum SDK"を設定します。本演習では、
    • "Name: Sample1_1"
    • "Package name" は、独自のドメインを作成します。package名は所属組織のドメイン名を逆から書くのが暗黙のルールです。本演習でのpackage名は「com.example」ではなく、「国.組織.学生番号」とします。e.g. 学生番号15823001の場合 jp.aoyama.a5823001.sample1_1 になります。
    • "Save location:" は各自のPCの環境に合わせたもので良いが、半角アルファベットしか含まれていないパスにして下さい(漢字等含まれると後々困ることがある)。
    • "Language: Java に変更して下さい。"デフォルトのLanguage(プログラミング言語)は「Kotlin」になっていますので、必ずJavaに変更すること。
    • "Minimum SDK: 使用端末のAndroidのバージョン以下に合わせること"に変更して下さい(エミュレータの場合、Fig.10の例と同じで良い)。

    fig4.png
    Fig.10 「Create Android Project」ウィンドウ内の"Configure Your Project"画面例
  5. Android StudioのEditorが表示され、デフォルトでは「activity_main.xml」と「MainActivity.java」の2つのファイルが開かれます。activity_main.xmlタブをクリックして、レイアウト・エディタを表示します。暫く、プロジェクト関連の様々なファイルの自動生成や、プロジェクトの・ビルドが自動で実施されるため、暫く待つこと。Fig.11の左下にある「金づち」アイコンをクリックすれば、ビルド中の詳細状況が表示されます。そのウィンドウで「BUILD SUCCESSFUL」が表示されたら、プロジェクト作成が(無事)終了したことになります。
    fig6.png
    Fig.11 "Java File Code Editor"画面例
  6. activity_main.xmlファイルのタブをクリックすると、以下のようなUIデザインの画面が表示されます。アプリUI画面の真ん中Hello Worldが表示されていることが確認できます。
    fig7.png
    Fig.12 "アプリUI Editor"画面例
  7. UI Editorはデフォルトの端末の種類に合わせてUIのサイズなどを表示しています。そこで、本実験で用いるEmulatorに合わせたデザインに変更します。先ほどはPixel TabletのEmulatorを作成したので、Fig.12に示しているように、このUIもPixel Tabletの仕様に合わせて表示されるようにします(三日月のアイコンの隣に端末名が表示されていない場合「>」を押せば現れる)。
    fig6.png
    Fig.12 "UI design"の目的端末選定画面
  8. 作成したPixel Tablet仮想デバイスがまだ立ち上げられていない、Android Studioのウィンドウの右側にあるアイコンから、Fig.13に示すように、Device Managerを開き、Pixel Tableの仮想デバイスを起動します。
    device_manager (1)
    Fig.13 Device Managerウィンドウの表示と仮想デバイスの起動
  9. 作成したPixel Tablet仮想デバイスが立ち上がっている場合、Android Studioのウィンドウの右側にある「Running Devices」アイコンを押せば、Fig.14に示すように、仮想端末が表示されます。Android Studioウィンドウの上に並ばれているアイコンから、「実行ボタンrun.pngを押して、アプリを起動します。
    device_manager (1)
    Fig.14 起動中の仮想端末の表示と、アプリの実行方法
  10. Fig.15に示すように、アプリが起動し、タブレット画面内で「Hello World!」が表示されたら、「Hello World」アプリの完成です(デフォールトでは文字サイズはこの例より小さい)。
    fig8.png
    Fig.15 "Hello World"アプリの実行例
  11. Fig.16に示すように、「猫」に似たアイコンをクリックすると、デバッグ画面(Logcat)を表示することが出来ます。デバッグした端末のスクリーンショットを保存したい場合は、View -> Tool Windows -> Logcat -> ">>"を押下 -> カメラアイコンを押下してください。
    fig8.png
    Fig.16 デバッグ情報を表示する方法
    cameraUI.png
    Fig.17 Android Studioからスクリーンショットを撮影する方法

機能説明: Android Studioのコード編集機能

ここでは、簡単な機能紹介しか行いません。使っていけば、慣れていきます。Android Studioの使い方に関するより詳細な説明はAndroid Developersサイトを参照することをお勧めします(それでも分からない場合はネット・○○GPTで検索してみましょう)。
Androidアプリ開発では、プログラミング(実装したい機能・動作など)はJavaファイルとして実装、レイアウトのデザイン(実装したいGUI・画面構成など)はXMLファイルとして実装します。

as-GUI.png
Fig.18 Android StudioのGUI例
as-editor.png
Fig.19 Android Studioのソースコードエディタ画面例

setContentView(R.layout.activity_main);をコメントアウトして、アプリを起動するとなにが起きるかを確かめてみましょう。

codeassist.png
Fig.20 コードアシストの実行例

「CTRL」+「SPACE」キーを押下するとコードアシストのpop-upが起動します。
エディタ左側のNavigation windowからmanifests, layout, menu, valuesの各項目を展開(►)すると、アプリの設定・内容・属性の定義などに用いる複数のXML形式のファイルを確認することができます。

AndroidManifest.xml

Manifestがアプリケーションに関する必要不可欠な情報を表現し、それをAndroidシステムに伝え、アプリケーションのコードが実行される前に、この情報をシステムが持っていなければなりません。Manifestの主な役割は以下の通りです。

resフォルダ

resフォルダはアプリケーションリソース(resources)で構成されています。Resourcesには、画像(drawable)・画面設計(layout)・メニュー(menu)・値(values)が含まれています。

valueは寸法(dimens.xml)・文字列(strings.xml)・スタイル(styles.xml)の3つがあります。
アプリケーション全体で繰り返して利用する情報をXMLで定義します。例えば、デフォルトのタイトル”Sample1_1”の文字列は、resフォルダ内のstrings.xmlで定義されています。同様に、デフォルトの“Hello World!”の文字列は、resフォルダ内のstrings.xmlで定義されています。
文字列の場合には、専用エディタも提供されています。

演習課題1_1: 「Hello IT Practice1」アプリの作成

「Hello IT Practice1」アプリを実装し、Landscapeモード(横向き)にした時の結果のスクリーンショットを取りましょう。

practice1_1.png
Fig.1_1 演習問題1_1の実行結果のスクリーンショット例

機能説明: Android Studioのデザイン編集機能

activity_main.xmlタブをクリック、もしくはresourcesディレクトリ直下のlayoutディレクトリ内にあるactivity_main.xmlを選択してGUI(グラフィカル・ユーザ・インタフェース)設計ツールを開きましょう。

as-designEditor.png
Fig.21 デザインエディタの画面例
as-designEditor2.png
Fig.22 デザインエディタから各コンポーネントの表示位置を青矢印を用いて指定する様子

演習課題1_2: AndroidManifestの理解

AndroidManifest.xmlを読んで、以下の質問に回答しましょう。

Task 4: アプリにログステートメントを追加する(Logcatの使い方)

Androidではログを取得する機能として、Logcatが用意されています。下記のように、Logcatのタグ(TAG)の部分に現在実行中のクラス名を書くのが定番となっています。

private static final String TAG = "SampleActivity1_1";

    public class SampleActivity1_1{
        /** Logcatのタグに含める文字列. */
        private static final String TAG = "SampleActivity1_1";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.v(TAG,"メッセージ");
            Log.d(TAG,"メッセージ");
            Log.i(TAG,"メッセージ");
            Log.w(TAG,"メッセージ");
            Log.e(TAG,"メッセージ");
        }
    }
                
            
logcat_message.png
Fig.15 Task 4の内容に変更後の実行時のEditorとLogcatの画面例

上記メッセージは、Logcatビューで簡単に確認することができます。
Logcatのビューが表示されていない場合は Android Studio [View]→[Tool Window]→[Android]で表示してください。
Logcatではタグでログを絞り込むことができるので、機械的に設定しておけば、着目したいクラスのログがすぐに絞り込めて便利です。ログを出力するのとしないのとでは、開発効率がかなり違うので、できるだけログを活用しましょう!

ログを入れたい場所に、以下のいずれかの関数を各用途に合わせて使用しましょう。

                
    /* 簡易メッセージ */
    Log.v(TAG,"メッセージ");
    /* デバッグメッセージ */
    Log.d(TAG,"メッセージ");
    /* 情報 */
    Log.i(TAG,"メッセージ");
    /* 警告 */
    Log.w(TAG,"メッセージ");
    /* エラー */
    Log.e(TAG,"メッセージ");
                
            

演習課題1_3: Logcatの理解

SampleActivity1_1プロジェクトのまま、上記の通りにコードを追加する。

Android Studio Dolphin 6以降のlog level および、Tagによるフィルタの設定方法はUser guideを参照して下さい。

SampleActivity1_2_log1.png
Fig.1_3_1 警告とエラーログしかlogcatに表示されない時の画面例
SampleActivity1_2_log.png
Fig.1_3_2 SampleActivity1_2で設定したTAGのログしかlogcatに表示されない時の画面例

Task 5: Activityのライフサイクル(Lifecycle)

ユーザーがアプリの内外を移動してからアプリに戻ると、アプリ内のActivityインスタンスはライフサイクルのさまざまな状態の間を遷移します。Activityクラスには、システムがActivityを作成、停止、再開している、またはActivityが存在するプロセスを破棄しているなど、状態が変化したことをActivityが認識できるようにするコールバックが備えられています。

ライフサイクル コールバック メソッド内で、ユーザーがActivityを離れてから戻った場合のActivityの動作を宣言できます。たとえば、ストリーミング動画プレーヤーを作成している場合は、ユーザーが別のアプリに切り替えたときに動画を一時停止し、ネットワーク接続を終了するようにできます。ユーザーが戻ってきた際に、ネットワークに再接続して、ユーザーが同じ場所から動画の再生を再開できるようにします。つまり、各コールバックにより、特定の状態変化に対して適した作業を実行できます。適切な作業を適切なタイミングで行い、移行を正しく処理することで、アプリの堅牢性とパフォーマンスが向上します。 たとえば、ライフサイクル コールバックを適切に実装することで、アプリで次の状況を回避できます。

Activityのライフサイクルにおけるステージ間を移動するために、Activityクラスには onCreate()onStart()onResume()onPause()onStop()onDestroy()の 6 つのコールバックのコアセットがあります。Activityが新しい状態になると、これらの各コールバックが呼び出されます。以下の図は、ライフサイクルを視覚的に示したものです。

activity_lifecycle.png
Fig.16 ActivityのLifecycleに関する簡略図

onCreate()

onCreate()は、システムが最初にActivityを作成したときに呼び出されます。Activityが作成されると、Activityは作成済みの状態になります。 onCreate()メソッドでは、Activityのライフサイクルの全期間で1回のみ実行する必要がある基本的なアプリの起動ロジックを実行します。例えば、onCreate() の実装では、データをリストにバインドし、Activityを ViewModel に関連付け、一部のクラススコープ変数をインスタンス化します。このメソッドはパラメータsavedInstanceStateを受け取ります。これは、Activityの以前に保存された状態を含むBundleオブジェクトです。Activityがこれまで存在しなかった場合、Bundleオブジェクトの値はnullになります。

onStart()

Activityが開始状態になると、システムはこのコールバックを呼び出します。アプリがActivityをフォアグラウンドに移動して操作可能な状態にする準備を行うと、onStart() の呼び出しによってActivityがユーザーに表示されます。 たとえば、このメソッドでは、UI を保持するコードをアプリが初期化します。

onResume()

Activityが再開状態(実行状態)になるとフォアグラウンドに移動し、システムは onResume() コールバックを呼び出します。これは、アプリがユーザーと対話する状態です。フォーカスがアプリから他の対象に移動する状況が発生するまで、アプリはこの状態を保持します。このようなイベントには、電話の着信、別のActivityへのユーザーの移動、デバイス画面をオフにする操作などがあります。

Activityが再開状態に移行すると、Activityのライフサイクルに関連付けられているライフサイクル対応コンポーネントは、すべて ON_RESUME イベントを受け取ります。この時点で、ライフサイクル コンポーネントは、コンポーネントが表示されフォアグラウンドにある状態で実行する必要がある機能(カメラ プレビューの開始など)を有効にできます。

onResume()後の再開状態(実行状態)では、Activityがフォアグラウンドで実行され、ユーザはそこで操作を行うことができます。

割り込みイベントが発生すると、Activityは一時停止状態になり、システムは onPause() コールバックを呼び出します。

onPause()

ユーザーがActivityを離れることを最初に示すために、システムはこのメソッドを呼び出します(Activityが破棄されることを意味するとは限りません)。これは、Activityがフォアグラウンドにないことを示します(ユーザーがマルチウィンドウ モードの場合は、Activityが引き続き表示されます)。 Activityが一時停止状態であり、間もなく再開する予定である場合は、onPause() メソッドを使用して、続行しない(または適度に続行する)必要がある操作を一時停止または調整します。

onPause後の一時停止状態では、Activityは別のActivityによって部分的に隠されています。フォアグラウンドにある別のActivityは半透明になっているか、全画面をカバーしていません。 一時停止したActivityはユーザの入力を受信せず、一切のコードを実行できません。

onStop()

ユーザーに表示されなくなったActivityは、停止状態になり、システムは onStop() コールバックを呼び出します。これは、新たに開始されたActivityが画面全体を占有する場合などに発生します。Activityの実行が終了し、間もなく消滅する場合に、システムによって onStop() も呼び出されることがあります。

Activityが停止状態に移行すると、Activityのライフサイクルに関連付けられているライフサイクル対応コンポーネントは、ON_STOP イベントを受け取ります。この時点で、ライフサイクル コンポーネントは、コンポーネントが画面に表示されていない間に実行する必要のない機能を停止できます。

onStop後の停止状態では、Activityは完全に隠され、ユーザには表示されません。バックグラウンドに存在するとみなされます。 停止状態の間、Activity インスタンスとメンバ変数のようなそのすべての状態情報は保持されますが、Activity インスタンスは一切のコードを実行できません。

onRestart()

(リンク先の図を参照)

名前そのままActivityの再表示の際に呼び出される。これが呼び出された後にはonStart()->onResume()と続いて呼び出される。アプリキル(Destroy)される時には呼ばれることはない。

onDestroy()

onDestroy() はActivityが破棄される前に呼び出されます。このコールバックは、次のいずれかの理由でシステムによって呼び出されます。

演習課題1_4: Activity(アプリ)のライフサイクルの理解

Sample1_1プロジェクトのまま、コードアシストを利用しながら、下記名称のメソッドを追加しましょう。

lifecycle_log.png
Fig.1_4 上記変更を加えた後プロジェクトを実行した時のLogcat画面例