#はじめに
Androidのカメラアプリを作成することになったので、Androidを一から勉強してみた。
(※よって、本稿はAndroid初心者向けの記事になっている。)(2017/5/15[Mon]執筆)
#目次
- Androidとは?
1-1. 開発環境
1-2. バージョンについて - Android初心者が「Hello World!」を実行するまで!
2-1. プロジェクトの新規作成 - [参考] Hello World!に辿り着くまでのメモ
#Androidとは?
Android は、Googleによってスマートフォンやタブレットなどの携帯情報端末を
主なターゲットとして開発されたプラットフォームである。(Wikipedia抜粋)
→2016年現在、スマートフォン用のOSとして世界No.1のシェアを誇る。
##開発環境
-
アプリケーション開発用
Android SDK(Software Development Kit)
- __ランタイム1と__ライブラリの開発用
Android NDK(Native Development Kit)
####今回の開発環境
- OS (Windows 10 Pro)
- AndroidStudio (v 2.3.1)
- JDK (v 1.8.0)
##バージョンについて
歴代のコードネームのうち、1.5からは頭文字がバージョンの発表順にCからのアルファベット順で
始まる菓子の名前が付けられており、それぞれにbugdroidがコードネームの菓子に扮している。
ちなみに、最新版は、Android 7.1 (Nougat)
。
#Android初心者が「Hello World!」を実行するまで!
Androidの開発を行うためには、事前に下記の準備をする必要があります。
(※本稿は、開発環境の準備については割愛させていただきます。)
1. JDK2をダウンロード・インストールする。
2. AndroidStudioをダウンロード・インストールする。
3. 開発したプログラムを試すエミュレーター3を追加する。
この記事では、AndroidStudioで新規プロジェクトを立ち上げ、
Hello Worldをエミュレーターを使って、表示するところまでの手順をまとめています。
##プロジェクトの新規作成
####1.AndroidStudioを立ち上げ、「Start a new Android project」をクリックします。
####2.「Application name」と「Company domain」を入力します。
ここで入力する__「Application name」は__アプリ名というより「プロジェクト名」と理解してください。
ランチャーなどのホーム画面などで表示されるアプリ名は、「string.xml」4にて設定することが可能です。
__「Company Domain」__に関してですが、こちらを入力すると、入力された内容に応じて自動で__Packege name__が記述されます。
[Note] Javaクラスの一意性
Javaでは、作成したクラスが世界中で一意となるように名前をつける慣習があります。
その際、単なるクラス名では一意は実現できませんので、「パッケージ名 + クラス」(完全修飾子)で一意となるようにします。その一番簡単な方法が、所有ドメインを逆順にしたものを起点とし、そこにプロジェクト名やサブシステム名などを加えてパッケージ名を決めることです。(→参考サイト)
入力が完了すると、__「Next」__ボタンをクリックします。
####3.開発するAndroidのバージョンを指定します。
今回は、「Hello World」を実行するだけなので、最新バージョンのAPI25: Android7.1.1 (Nougat)
を指定します。
[Android] APIレベルとOSプラットフォーム
AndroidはOSのバージョンがたくさんあります。それに応じてAPIが新しく開発されたり、使い勝手の悪いAPIは非推奨にするなどしています。アプリを開発する際は、APIレベルでの細かな調整が必要になります。
Platform | API Level | Code Name |
---|---|---|
Android 1.0 | 1 | BASE |
Android 1.1 | 2 | BASE_1_1 |
Android 1.5 | 3 | CUPCAKE |
Android 1.6 | 4 | DOUNUT |
Android 2.0 | 5 | ECLAIR |
Android 2.0.1 | 6 | ECLAIR_0_1 |
Android 2.1.x | 7 | ECLAIR_MR1 |
Android 2.2.x | 8 | FROYO |
Android 2.3 | 9 | GINGERBREAD |
Android 2.3.1 | 9 | GINGERBREAD |
Android 2.3.2 | 9 | GINGERBREAD |
Android 2.3.3 | 10 | GINGERBREAD_MR1 |
Android 2.3.4 | 10 | GINGERBREAD_MR1 |
Android 3.0.x | 11 | HONEYCOMB |
Android 3.1.x | 12 | HONEYCOMB_MR1 |
Android 3.2 | 13 | HONEYCOMB_MR2 |
Android 4.0 | 14 | ICE_CREAM_SANDWICH |
Android 4.0.1 | 14 | ICE_CREAM_SANDWICH |
Android 4.0.2 | 14 | ICE_CREAM_SANDWICH |
Android 4.0.3 | 15 | ICE_CREAM_SANDWICH_MR1 |
Android 4.1.2 | 16 | JELLY_BEAN |
Android 4.2.2 | 17 | JELLY_BEAN_MR1 |
Android 4.3.1 | 18 | JELLY_BEAN_MR2 |
Android 4.4.2 | 19 | KITKAT |
Android 4.4W.2 | 20 | [Android Wear] |
Android 5.0.1 | 21 | Lollipop |
Android 5.1.1 | 22 | Lollipop |
Android 6.0 | 23 | Marshmallow |
Android 6.0.1 | 23 | Marshmallow |
Android 7.0 | 24 | Nougat |
Android 7.1.x | 25 | Nougat |
開発するアプリに応じたAPIレベルを選択し、__「Next」__ボタンをクリックします。
必要なコンポーネントが自動的に読み込まれます。
読み込みが完了すると、__「Next」__ボタンをクリックします。
####5.開発するアプリに応じたActivityを設定します。
今回は、Hello World!を行うだけなので、「Empty Activity」を選択し、__「Next」__ボタンをクリックします。
Activityについて
Androidでは処理をJavaクラスに、画面構成をxmlファイルに記述します。
つまり、Javaクラスとxmlファイル(レイアウトファイル)のペアで一つの画面が作られていることになります。
↑このJavaクラスのことを「アクティビティ」といい、Activityクラス(または、その子クラス)を継承して作ります。
[MainActivityファイルパス(.java)]
プロジェクト名
> app
> src
> main
> java
> 逆ドメイン+プロジェクト名
> MainActivity
[レイアウトファイル(.xml)]
プロジェクト名
> app
> src
> main
> res
> layout
> activity_main.xml
※5.で設定したアクティビティが上記2ファイルにあたる。
####7.activity_main.xmlファイルを書き換える。
<TextView
android:text="Hello World" //変更前
android:text="Hello World (Mr.xxx)" //変更後
/>
※右下のタブが「Text」になっているか確認する。
####8.エミュレーターを追加する。
AndroidStudioのツールバーに再生ボタン(画面下赤抜き部分)をクリックすると、
「Select Deplyment Target」ウィンドウが立ち上がるので、「Create New Virtual Device」をクリックし、
新規エミュレーターを追加する。(本稿では、上記手順を割愛する。)
既存のエミュレーターを使用して、実行してみる。
__「OK」__ボタンをクリックすると、、。
なにやらエラーが出ているようだ。
[Troubleshoot]
Intel HAXM is required to run this AVD.
VT-x is disabled in BIOS.
Enable VT-x in your BIOS security settings (refer to documentation for your computer).
どうやらBIOS内のVT-xの設定が無効になっているようだ、、。
そもそも「VT-x」とは?
CPU x86アーキテクチャの仮想化技術5です。従来、OSはデバイスドライバやメモリ管理などハードウェアに自由にアクセスするために特権命令を使用します。しかし、仮想マシンのようにOSが複数あると特権命令がいくつも発生してしまうという不具合が生じます。VMM(仮想マシン・マネージャ)ではゲストOSの特典命令を監視し、特典命令をエミュレーションしますが、VT-xではこれらの処理を特別な動作モード(VMX rootとVMX non-root)で処理することが可能となります。
上記サイトの手順を実行し、再度エミュレーターでアプリを実行してみる。
まだ、同じエラーが続くので、Intel HAXMが何なのか調べてみることに。
Intel Hardware Accelerated Execution Manager (Intel🄬 HAXM)
→Androidエミュレータを高速化するためのハードウェア支援環境
上記、ソフトをインストールし、再度AndroidStudioでRun 'app'を実行する。
エミュレータウィンドウが開き、エミュレータ上で作成したAndroidアプリの動作を確認することができます。
####というわけで、Hello World!成功です!
最後までお読みいただき、ありがとうございました。
以下、個人的に気になった点等まとめております、
もしよろしければご参考までにご覧ください。
#[参考] Hello World!に辿り着くまでのメモ
##様々なファイルをダウンロードするときに見かけるx64とx84について
なぜ、32bitがx86で、64bitはx64なのか?普通に考えたら32bitはx32になるはずだろうと、、
思いつつ、なぜそうなのかまで考えられていなかったので、この機会に調べてみることに。
「x86」の86は、
現在の主流CPUの祖先にあたるインテル16bit CPU「8086」の下2桁
「86」です。
「8086」にはじまるCPUのアーキテクチャ(基本設計)
を「x8086」といいます。
Windowsは、x86アーキテクチャ6のCPUの発展(高性能)とともに発展してきました。
x86(32bit)を64bitに拡張したのが、x64です。「x64」は、本来「x86-64」と表記されるべきなのですが、
「x64」と略記されることが多いです。
-
32bit
----->x86
-
64bit
----->x64
##AndroidStudioについて
まず、AndroidStudio
は、Googleが提供する
公式のAndroidアプリのIDE(Integrated Development Environment:統合開発環境)です。
ビルドシステムとして「Gradle」を採用。
ビルドシステムといえば現在までにMakeやAnt,Mavenあたりがよく使われていたようである。
「ビルドスクリプトの基本」より引用。
###そもそも今までビルドを意識していなかった
Build (ビルド)とは、「アプリケーションやライブラリを出荷できる状態に構築すること」
である。
Gradle (グレイドル)は、OSS(Open Source Software)のビルドツール
。
###Gradle(基本編)
Gradle(グレイドル)は、Androidに限らす様々なビルドができるビルドシステムです。
Groovyというスクリプト言語を使ってビルドのカスタマイズができます。
Gradleのビルドスクリプトは、javaと極めて近い文法を持つ「Groovy」というスクリプト言語で記述できます。
→Groovyでは、Javaと同じように次のコードを実行できます。
public class Sample {
public static void main (String[] args) {
System.out.println("Hello");
}
}
主に「Androidビュー
」と「Projectビュー
」を使い分けて開発を行うようです。
Androidビュー : 同じ種類のリソースをまとめて表示したもの。※実際のフォルダ構成とは異なります。
Projectビュー : 実際のフォルダ構成通りに表示される。
##1.まずは、AndroidManifest.xml を見るべし
まずプロジェクトを理解するにあたりマニフェストファイルを見るのが良いとのこと。
Manifest.xmlファイルにはアプリの__エントリポイント__(アプリを起動したとき最初に起動する画面)が記述されているため。
XML形式で記載されていますが、「intent-filter」に注目します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="kdl.video.walker.movie">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
上記のように、「android.intent.action.MAIN」、「android.intent.category.LAUNCHER」が設定されている
__「MainActivity」__がエントリポイントになります。
このファイルでは、以下のようなアプリの様々な項目
を設定することができます。
- アプリの名前
- アイコン
- 動作するAndroidのバージョン
- アプリ起動時に実行するActivity(MainActivity)
- アプリが利用する機能(ex.インターネット、カメラ等)
etc
-
ランタイムとは、開発・実行の両方の機能を兼ね備えたソフトウェアから開発の機能を除き、実行の機能のみ取り出したプログラムのこと。 ↩
-
JDK(Java Development Kit)とは、プログラミング言語のJavaでソフトウェアの開発を行うのに必要なソフトウェアを一つにまとめたパッケージ。(Javaの開発元であるOracle社が無償で配布しており、誰でも自由に入手・使用することができる。) ↩
-
コンピューターを含む機械装置の動作・昨日を模倣することをエミュレート(動詞)又はエミュレーション(名詞)といい、エミュレート/エミュレーションする装置、あるいはソフトウェアのことをエミュレータ(Emulator)という。 ↩
-
Androidでは、文字列を
res/values/strings.xml
の中に定義します。 ↩ -
1台の物理PC上に、複数の仮想的なPC (仮想マシン)をソフト的に構築する技術であり、サーバー等を中心に導入が進んでいます。 ↩
-
アーキテクチャとは、コンピュータにおける(特にハードウェア)基本設計・設計思想などを意味する。 ↩