2019/02/06
さて、新規プロジェクトを作ってみようで、画面にHello world!という文字が表示されるアプリを作りました。簡単でしたね。
今回は、このアプリを立ち上げると画面にHello world!と表示されるその仕組みを、簡単に解説したいと思います。難しいことは考えずにあくまで簡単に行きましょう。
sponsored link
マニフェストファイルとは?
まず、初めに説明する必要があるのが、マニフェストファイルというxmlファイルの存在です。
Androidアプリにはマニフェストファイルが必ず要ります。これがないとAndroidアプリだと認識されません。
マニフェストファイルというのは何かと言うと、そのアプリの名前やアイコン、機能面についての様々な情報を書いておく為のファイルです。なんかいきなり難しいですよね。
が、ご心配なく。マニフェストファイルはeclipseが勝手に作ってくれています。さっそく見てみましょう。
eclipseのパッケージエクスプローラーの中にあなたが作ったFirstAppliというプロジェクトフォルダがあると思います。その中に、AndroidManifest.xmlというのがありますね?これがマニフェストファイルです。 これをダブルクリックすると中央の枠にAndroidManifest.xmlが開きます。その中央の枠の下の方に、Manifest、アプリケーション、許可、計測、AndroidManifest.xmlというタブが表示されていると思うので、その中からAndroidManifest.xmlをクリックして下さい。
これがマニフェストファイルの中身です。
新規プロジェクトを作ってみようで、新規プロジェクトを作る際に、よく分からないまま何回か次へをクリックしましたよね。実は、あれはこのマニフェストファイルを作るための入力フォームみたいなものだったんです。
マニフェストファイルの中身
では、このマニフェストファイルには何が書いてあるのか?さらっと説明します。
以下が全文です。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.nobuo.create.firstappli" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="net.nobuo.create.firstappli.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
なんかごちゃごちゃして分かりにくいので、ややこしい部分を省略してみると、こうなります。↓
<?xml version="1.0" encoding="utf-8"?> <manifest > <uses-sdk />//① <application ></application>//② </manifest>
これなら読む気になりますよね?(笑)
まず一番上にこのファイルはxmlファイルですよ。っていう宣言。
<?xml version=”1.0″ encoding=”utf-8″?>
そして全部を囲うmanifestタグ。
<manifest > ~ </manifest>
webページで言うhtmlタグみたいなもんですね。
そのmanifestタグの中(下層)に、
①<uses-sdk />と、
②<application ></application>
が並んでいます。
このuses-sdkとapplicationというのは、このアプリについての説明です。どんな説明をしているのか?もう少し詳しく見ていきましょう。
uses-sdk
①の<uses-sdk />というのは、簡単に言うと、このアプリを使用できる本体のバージョンについての説明です。Androidは日々バージョンアップされているので、世の中にはいろんなバージョンのAndroid機が存在しますが、このアプリが使えるのは、このバージョンですよ。っていう説明です。
その説明を<uses-sdk />タグの属性として書いてあります。
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" />
最低限バージョンナンバー8以降じゃないと動きませんよ。
バージョンナンバー19で使うことを前提に作ってますよ。
という意味です。
※バージョンナンバーについて詳しく知りたい方は→【android】OSのバージョン(APIレベル)によって処理を変える方法
要素(タグ)と、属性名=”属性値”の文法は、HTMLと基本的には同じです。
//html <p class="text">テキスト</p>
ただし、xmlの場合、要素値がある場合と無い場合があって、それぞれ微妙に書き方が違います。
・要素値がある場合は開始タグと終了タグが必要
<要素名 属性名="属性値" >
要素値
</要素名>
・要素値がない場合は、終了タグは不要 その代わり閉じる方のタグに「/」が必要
<要素名 属性名="属性値" />
application
②の<application>というのは、このアプリの内部構造についての説明です。
<application > ~ </application>内だけを抜き出すと、こんな風になってます。
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="net.nobuo.create.firstappli.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
applicationタグの開始タグ内に属性の形で、このアプリの基本情報が書いてます。
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
長くなるので、ここではスルーします。
activity
注目して欲しいのは、applicationタグの中にあるactivityタグです。
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="net.nobuo.create.firstappli.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
applicationタグの中に、activityタグが1つだけ在るのが分かりますよね。パッと見、activityタグが2つありますが、これは開始タグと終了タグなのでactivityは一つだけです。
この場合、下層にintent-filterタグが在る為、開始タグと終了タグでそれを挟む形になっています。
Activityっていうのは、簡単に言うとズバリ、画面です。
※ActivityはAndroidアプリを語る上で最も重要で最も基本的なポイントなので、また次回に詳しくやります。
ここではapplicationタグの中に、activityタグが1つだけあるということに注目して下さい。このアプリはたった1つの画面しかないので、activityタグは一つしかないんです。
もし複数の画面を持つアプリの場合、例えば、アプリ内に何らかの設定画面を表示したいような場合、applicationタグ内に、設定画面を指し示すactivityタグをもう一つ追加する必要があります。その辺の詳しい事はまたおいおい。
このたった一つのActivity(画面)について、もう少し詳しく見てみましょう。
<activity android:name="net.nobuo.create.firstappli.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" />//① <category android:name="android.intent.category.LAUNCHER" />//② </intent-filter> </activity>
まず見てもらいたいのは、activityタグの下層にあるintent-filterです。ちなみにintentというのは画面の遷移、起動に関するこれまた超重要な機能です。このintent-filterによって、このActivity(画面)を以下のように定義しています。①actionタグと②categoryタグに注目しましょう。
①<action android:name=”android.intent.action.MAIN” />は、
このActivity(画面)はこのアプリのトップ画面ですという意味です。このトップ画面の指定は必須です。もちろん設定できるのは1つActivityに対してのみです。
②<category android:name=”android.intent.category.LAUNCHER” />は、
このActivity(画面)を立ち上げる為のアイコンをアプリ一覧の中に表示しますという意味です。
普通はアプリのトップ画面であるActivityのintent-filterに①と②をセットで設定します。すると”アイコンをタップして立ち上げたらそのアプリのトップ画面が表示される”という当たり前の状態になります。
Javaファイルを指定
続いて、activityタグ内の属性に注目しましょう。
<activity
android:name="net.nobuo.create.firstappli.MainActivity"//①
android:label="@string/app_name" >
※「net.nobuo.create.firstappli」の部分はアプリを作る際にあなたが入力したパッケージ名になっているはずですが、ここでは「net.nobuo.create.firstappli」として話を進めます。
出ました。超重要ポイントです。
①android:name=”net.nobuo.create.firstappli.MainActivity”
これは、このActivityを定義するクラスを指定しています。
つまり、net.nobuo.create.firstappli.MainActivityというクラスにて、このActivityを定義していますという意味です。
ではそのnet.nobuo.create.firstappli.MainActivityというクラスはどこにあるかと言うと・・
パッケージエクスプローラーの中にFirstAppliというプロジェクトフォルダ、その中にsrcというソースフォルダ、さらにその中にnet.nobuo.create.firstappliというフォルダがあります。これはいわゆるパッケージ(Javaで普通に出てくるやつ)です。その中に、MainActivity.javaがありますね。
MainActivity.javaに書かれてあるのが、このアプリのトップ画面を定義するMainActivityというクラスです。もちろんこれも勝手にeclipseが作ってくれたものです。
パッケージ名が
net.nobuo.create.firstappliなので、このクラスのフルネームは
net.nobuo.create.firstappli.MainActivity
です。
MainActivityに関して
かなり端折ってるつもりなんですが、長いなコレ。なかなかHello world!に辿りつかない・・。
とりあえず何が言いたかったかと言うと、マニフェストファイルに「このアプリのトップ画面についてはnet.nobuo.create.firstappli.MainActivityクラスで定義しています」と書いてあるってことです。一言で終わっちゃったよ・・
無駄に冗長でしたが理解できましたでしょうか?
で、MainActivityクラスで何をやってるかってのはまた次回にしましょう。
今だけ→転職できなければ全額返金の「エンジニア転職保証コース」
絶対エンジニアになる!→テックエキスパート
フリーランスエンジニアの収入例を見てみる→レバテックフリーランス
コメント
[…] 【初心者向け】 ・一番かんたんなJava入門 →仕組み①マニュフェストファイルとは […]
by Android関連 | 正悟の日常 2020/08/31 18:20