3 時間で学ぶ Java による Android 開発 入門 |研修コースに参加してみた

今回参加したコースは 3 時間で学ぶ Java による Android 開発入門 です。
Android アプリの開発では Java も使われますが、独自ライブラリやお作法が多く、 Web アプリ開発などとはまた違います。
このコースは Web アプリなどの開発経験はあるものの、スマートフォンアプリ開発の経験がまだない人に向けて、 Android アプリの開発方法の基礎を学ぶものでした! サンプルプログラムをもとに作ることで、細かい書き方よりも Android 開発独自のお作法がわかりました!
では、どのような内容だったのか、レポートします!
もくじ
コース情報
想定している受講者 | 何らかのプログラム言語で基本文法を修得できている方 ( Web システムなどの開発経験があればさらに望ましい) |
---|---|
受講目標 | Android Studio を利用し、アプリケーションの作成~デバッグ起動までに必要なことを理解する |
講師紹介
この参加してみたレポートでは初登場となる 村上 尊司 さんが登壇されました。

村上 尊司
近畿大学 工学部機械工学科 卒業。 流通システムや電力系システムのオペレーション業務などに従事したのち、アプリケーション開発者へ転向。 Web 系の業務システム開発・改修やサイト構築を担当。 2011 年に独立し株式会社ワンステッドを設立。
プログラミングを楽しむ感覚を多くの人に知ってほしい!という思いを大切に、技術をわかりやすく解説する。
Android とアプリ開発の概要
まずは Android とそのアプリ開発の概要について座学で学びました。
- 2008 年にリリース
- Linux カーネルの上に JVM ならぬ ART というランタイムがあり、その上にフレームワーク ( Java API フレームワーク) がある
- そのフレームワークからハードウェアの機能を使う
- 新規開発では Kotlin を使うことが増えてきている
- iOS も一緒に開発できる Flutter も使うことが増えた (クロスプラットフォーム開発)
- Google I/O で毎年 Android の新しいバージョンが公開される
- 現在は Android 12 。コードネームもあり、お菓子がモチーフになる (12 は Snow Cone)
- アップデートがある以上、「 1 回作ってオシマイ」ではない
- APK ファイルを最終的に作成する ( Windows の exe ファイルのようなもの)
- プログラム ( Java ) / レイアウト (XML) / マニフェスト (宣言ファイルのようなもの) / リソース (画像など)
Flutter も Google 製ですね。
また、 Android アプリと Web アプリとの大きな違いに、アクティビティとそのライフサイクルがあります。
- ユーザが様々にアプリを操作するのに合わせて、アクティビティの状態が変わる(様々なライフサイクルがある)
- アクティビティとは画面をもつプログラム
- フラグメントと呼ばれるモジュールで画面を構成する
- サービスとは画面を持たないプログラム
- バックグラウンドで動かすときに使う
- 今日のコースはアクティビティのみ使用
Web 開発と Android アプリ開発の違い
確かにスマートフォンでアプリを操作するとき、データロード途中でも、無残にアプリを切り替えたりするので、データ保持など、かなり大変そうです。
Android Studio のインストール
では、ここから事前にダウンロードした Android Studio をインストールしてみましょう
- Android Studio をインストール
- SDK と Virtual Device がインストールされる
- Android SDK
- 今回は API Level 30 を選択
- Android Virtual Device ( AVD )
- 今回は Pixel 4 を選択

なお、プロジェクトのディレクトリの構造が決まっているとのことで、以下のようになります。
app/
manifests/
AndroidManifest.xml
java/
MainActivity.java
res/
layout/
activity_main.xml
values/
strings.xml
Gradle Scripts/
build.gradle
それぞれのディレクトリに何があるのか、これから詳しく解説いただきますが、アプリごとに違うということがなく、悩まなくてよいのはいいですね。
Hello, Android でわかる画面の作り方
では、 Hello, World ならぬ Hello Android アプリを作ってみましょう!
- Virtual Device を追加
Pixel などが表示される - New Project を作成
プロジェクトの設定画面 - 2 つのファイルが生成される
- MainActivity.java
- activity_main.xml
- 2 つのファイルが生成される
- 画面レイアウトを定義する activity_main.xml を編集
- res/layout/ にある
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/helloText" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/label_hello_text" app:layout_constraintBottom_toTopOf="@+id/searchWord" tools:layout_editor_absoluteX="0dp" /> <EditText android:id="@+id/searchWord" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:minHeight="0dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/helloText" tools:ignore="SpeakableTextPresentCheck" /> </androidx.constraintlayout.widget.ConstraintLayout>
- ConstraintLayout で画面の場所を指定する
- 上記の例であれば helloText の下側に貼り付いて searchWord が入る
app:layout_constraintTop_toBottomOf="@+id/helloText"
- parent が画面全体を指す
Bottom_toTopOf
Start_toStartOf
のように絶対座標ではなく相対座標を使う
- 上記の例であれば helloText の下側に貼り付いて searchWord が入る
- 文字列リソースを追加する strings.xml を編集
- 同じ文章を複数で使用したり、多国籍な言語を扱うこともあるため、文字列はリソースとして管理する
- res/values にある
- 今回は
android:text="@string/label_hello_text"
に入る文字列を追加
<resources> <string name="app_name">HelloApplication</string> <string name="label_hello_text">Hello App</string> </resources>
- アクティビティの動作を記述する MainActivity.java を編集
- HelloText と SearchWord コンポーネントを変数として追加
- 自動的に import が追加される
- 引数なしのコンストラクタ public MainActivity() を追加
- 処理途中であっても Kill されることがあることを認識しよう
- onCreate() 内に文字列を表示する処理を追加
- onCreate() は画面生成時に 1 回だけ実行される
package localhost.example.helloapp; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity { // 変数を追加 TextView mHelloText; EditText mSearchWord; // コンストラクタを追加 public MainActivity() { } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 表示する処理を追加 mHelloText = (TextView) findViewById(R.id.helloText); mSearchWord = (TextView) findViewById(R.id.searchWord); } }
- HelloText と SearchWord コンポーネントを変数として追加
では、実行してみましょう

デバッグでアクティビティのライフサイクルを確認
続いて、デバッグを試して、アクティビティのライフサイクルを確認してみます。
以下のデバッグ用のコードを MainActivity.java に追加します。
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle inState) {
super.onRestoreInstanceState(inState);
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
デバッグを進めてみましょう!
- play_arrow ではなく、デバッグ bug_report ボタンでデバッグ実行
- コンストラクタ → onCreate() → onStart() → onResume() の順で実行され画面が表示される
- エミュレータ上の Android のホームボタンをクリック → onPause() → onStop() → onSaveInstanceState() の順で実行される
- もう一度アプリをアクティブにする → onStart() → onResume() の順で実行される
このように、画面が切り替わかわるたびにフレームワークが処理を実行してくれるのが Android アプリの特徴です。

Android のアプリ開発では、 Web の開発では意識しない、こうしたアクティビティのライフサイクルをしっかり覚えておくことが重要ですね。
アプリにアクティビティを追加
このアプリにテキストを入力して、 Google 検索が実行できるアクティビティを追加してみましょう。
- これまでの TextView / EditText に加えて Button と WebView (アプリ内で Web ページを表示できるライブラリ) を追加

では、早速追加してみましょう!
- New > Activiety > EmptyActivity で MainActivity2 というアクティビティを追加
- MainActivity2 の activity_main2.xml / MainActivity2.java が作成される
- activity_main2.xml と string .xml はサンプルコードをそのまま使用
- AndroidManifest.xml (アプリの名前やコンポーネント構成などの情報をまとめたもの) を変更し、 MainActivity2 を最初に起動するように変更
- MainActivity に記述されている
<intent-filter>…</intent-filter>
を MainActivity2 に移動
- MainActivity に記述されている
- MainActivity2.java を編集
- WebView で JavaScript を使用するため onCreate() 内で enable する
protected void onCreate(Bundle savedInstanceState) { // 中略 mSearchResult.getSettings().setJavaScriptEnabled(true); }
- 同じく onCreate() 内にイベントリスナー(検索ボタンクリック)を追加
protected void onCreate(Bundle savedInstanceState) { // 中略 mSearchResult.getSettings().setJavaScriptEnabled(true); mSearchButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String uri = "https://www.google.co.jp/"; String word = mSearchWord.getText().toString(); if (! word.isEmpty()) uri += "/search?q=" + word; mSearchResult.loadUrl(uri); } }); }
- WebView で JavaScript を使用するため onCreate() 内で enable する
- アプリからインターネットにアクセスする許可を追加 AndroidManifest.xml を編集
<uses-permission android:name="android.permission.INTERNET"/>
これでアプリでテキストを入力して Google 検索が実行できるようになりました。
最初は「どこに何を書くのか、さっぱりわからん」という感じでしたが、 logic / layout / res に分けて書くという感覚がわかるようになってきました。
では、実行してみましょう!

Gradle とは
続いて Android Studio で使用されているビルドシステムの Gradle も紹介いただきました。
- OSS のビルドシステム
- C 言語でいう make と makefile
- 依存ライブラリをダウンロードしてセットアップして、コンパイルなど一連の流れを実行 (タスクランナー)
- build.gradle というファイルに Groovy 言語でビルドの手順を定義する
- src の Gradle Scripts 配下
このコースではサンプルとしてユニットテストを追加するライブラリを追加して、実際にテストを実行してみました。
最後に UI スレッドに関してタイマーや HTTPS 通信など別処理からメインスレッドを操作することは出来ないため、その際は Handler オブジェクトを利用するよう注意いただき、このコースは修了しました。
まとめ
Android Studio と Java を使って簡単な Android アプリ開発を体験しました。
Android Studio の使い方に始まり、 Web 開発における MVC のように、画面レイアウト / 文字列など画面に表示するリソース / 動作を書くアクティビティとわかれていることがわかりました。 特に、モバイルアプリ特有のアクティビティのライフサイクルは慣れないと、うっかりミスを連発しそうです。
もちろんアプリ開発では今日触れなかった MVVM アーキテクチャ、特にデータレイヤでのデータのやり取りがとても難しいところですが、まずは「 Android 、何もわからん」というところから、調べながら学習を進められるスタート地点につけたコースでした!
label SEカレッジを詳しく知りたいという方はこちらから !!

IT専門の定額制研修 月額28,000円 ~/ 1社 で IT研修 制度を導入できます。
年間 670 コースをほぼ毎日開催中!!

SEプラスにしかないコンテンツや、研修サービスの運営情報を発信しています。