組み込み開発におけるAndroidについて

スマートフォンなどに大きなシェアを持つAndroid。最近ではスマートフォンだけでなく組み込み機器にも取り入れられるようになってきています。
ここではAndroidが組み込み機器にも採用されるようになってきた理由を、具体的なメリットとデメリットを踏まえてお話ししたいと思います。
また、Androidの採用ではライセンス問題も避けては通れません。これについても整理して言及していきます。

組み込み開発におけるAndroidについて

組み込み機器にAndroidが使われるようになった経緯

組み込み機器と言っても様々な機器がありますが、このコラムではスマートフォン、タブレット以外の、エンベデッド開発によって作られる組み込み機器やガジェットについて考えてみたいと思います。 組み込み機器には、医療機器、測定器、産業機器などといった多種多様な機器があります。それらの組み込み機器を開発するにあたって、その機器の目的に一番合ったもの、使い慣れたもの、リアルタイム性が必要なものなどを考慮して、色々なOS(オペレーティングシステム)が選ばれてきました。例えば、iTRON、linux Embedded、Windows EmbeddedなどのOSです。

しかし、こうした状況ではソフトウェア資産の流用が困難で、ある組み込み機器で使用したソフトウェアを別の機器の開発案件で流用しようとしても、簡単に移植することができないなど用途や仕組み上の制限によって、余計な開発費がかかってしまうことが多々ありました。またOSにライセンス費がかかるものもあり、製造原価に反映してしまうといった問題もあります。
このように機器個別に要求される機能が異なることから共通化が困難だったので、それらに対応した様々な最新OSやハードウェア環境の製品が生まれてきていました。

そんな状況の中、豊富なアプリケーションによる便利さと、感覚的な操作を実現した使いやすさで、ボタンのないスマートフォン利用者が急激に増え始めました。その結果、2014年のAndroid搭載端末世界出荷台数は10億台にもなると予想されています。パソコン、タブレット端末、携帯電話を合わせたアンドロイドos搭載機器の台数は24億台にもなると言われています。

このように新しいソリューションとしての組み込みAndroid端末が普及してきたことで、「アンドロイド端末とは」「スマートフォンとは」「アンドロイドタブレットとは」、と言った質問に答えられる人が、日本でも増えてきたのではないでしょうか。
2008年には、Androidの普及と発展を図って、「日本アンドロイドの会」が設立されました。入門者からエキスパートに至るまで、様々な人たちが参加する「Android勉強会」の開催などを中心に、積極的に活動を続けています。

このように、OSタブレット最新端末が短期間で登場したことにより、スマートフォン開発やタブレット開発のため、スマートフォン開発者などのデベロッパー(Developer)や、プログラミング(アンドロイドプログラミング)を行うプログラム作成者による端末開発の機会が増えてきました。それと同時に、データ通信・処理速度の高速化、音声認識機能、フォントの変換、端末の場所の特定(Androidデバイスマネージャーで)などが可能になりました。
さらに、スマホでのゲームやtwitterが誕生したり、スマホでの様々なサイト閲覧やコメント投稿が可能になりました。クチコミも広がりやすくなり、twitterで結婚などを発表する芸能人も出てきました。また、カメラ開発の進化によって、スマホカメラでの映画撮影まで行われています。

組込機器にもUser Interface(以下UI)が必要です。アンドロイドに慣れてきた利用者は、そのリッチなUIを組込機器にも活かそう生かそうと考えるのは当然と言えるでしょう。UIだけでなく、様々なメリットのあるアンドロイドを取り入れる組み込み製品がどんどん増えてきています。

Androidを利用するメリット、デメリット

では実際に組み込みAndroidの採用を考えた場合のメリット、デメリットは何でしょうか。
ざっと考察すると、以下のような点が、それぞれ挙げられるかと思います。

メリット
オープンソースである
リッチなGUI作成が容易
Javaでアプリ作成
Googleの提供するサービスとの親和性
アプリの公開に制限が少ない
マルチタスク
デメリット
脆弱性
頻繁にバージョンが上がる

以上のように、組み込み機器への適用を考えたときに、一番のデメリットとしてはLinux、Androidの脆弱性です。リナックス(linux)とは何かについては、他のコラムを参照にしていただくとして、組み込みAndroidはオープンソースであるというメリットの反面、独自に改良した結果として、脆弱性を抱えてしまうというデメリットもあります。実際に、搭載されるアプリケーションに脆弱性のあるものが、多数報告されています。これは堅牢性が求められる産業機器には大きな脅威となる可能性があります。

頻繁にバージョンが上がるという事は、機能を動作させる上でギリギリのハードウェアを搭載する組み込み機器にとってはデメリットであり、リスクです。一方で、スマートフォンなどにとっては、機能追加などのバージョンアップとなるのでメリットです。しかし、組み込み機器にとっては、新しい機能追加を行ったとしてもハードウェアのスペックアップができないため、バージョンアップ対応が困難です。これがアンドロイド開発で悩ましい部分です。

次にメリットですが、最大のメリットはオープンソースであることです。従来採用してきたOSはライセンス費が必要なものもあり、それが製品価格に反映しています。しかしAndroidではOpen Sourceで使用可能なソフトウェアライブラリが豊富に用意されています。
例えば

  • Webブラウザ
  • File System
  • WebKit
  • OpenGL/ES
  • グラフ/チャート
  • Network Stack

Androidは携帯情報端末をターゲットにしたプラットフォームなので、基本的な機能として

  • ・リッチなGUIを標準サポート
  • ・マルチタッチパネル操作

の2つを最初から備えています。これまで組み込み機器にGUIを導入する場合、リッチなものを作るのが困難で非常にコストがかかる状況でしたが、組み込みAndroidでは希望に応じたGUI画面の構築が容易です。またマルチタッチにも対応しているため、普段使い慣れたスマートフォンと同様の操作感を製品に導入することができます。工業などに置かれるような産業機器がボタンとレバーで動く時代からフリック入力での操作が当たり前になるのは、もうすぐかもしれません。

標準的な機能としてリッチなGUIを使用することができるので、Human Machine Interface(HMI)部において各製品で統一感を持たせることも可能になります。これはHMI部のハードウェアを各製品共通することを可能にします。搭載するアプリケーションを変えるだけで製品の差別化ができます。このようなところも組み込み機器にはありがたい部分です。

アンドロイドアプリ作成はJavaで行うため、組み込みやシステムの開発に不慣れな技術者にも扱いやすいです。組み込み開発では、最初にハードウェア制御のためのドライバが必要になることが多いですが、ハードウェア制御のためのAPIをAndroidが提供しています。このためあまりハードウェアを意識せずに、アプリ制作をすることが可能になっています。

さらに、Google社の提供するWEBサービスを取り入れることができるという事は、さらなる付加価値を付ける上でとても便利です。ネットワークに接続されていれば検索、Map、Mailなどがすぐに使えるようになります。

また、サンプル的・テスト的に独自のアプリを作成して、後から機器に機能を追加することも容易です。iPhone, iPadなどではApple社が一括してアプリケーションを管理していますが、アンドロイドはAppleと違い独自にマーケット(market)をつくることができるので、そこに自社製品用のアプリケーションをアップしてユーザーにダウンロードしてもらうことで製品の機能追加、アップデートを行うのが当たり前になるのかもしれません。

マルチタスクもメリットになると思います。Appleでは当初マルチタスクには対応していませんでしたが、今では対応するようになっています。ただし、個人観点にはなりますが、組み込み機器にとってマルチタスクをどのように使うのかは、まだイメージは湧かない状況です。

Androidの種類

ここではAndroidの種類についてお話ししていきます。今現在出ているAndroidのバージョンは以下の通りです。

  • 1.0
  • 1.1
  • 1.5(Cupcake)
  • 1.6(Donut)
  • 2.0/2.1(Eclair)
  • 2.2(Froyo)
  • 2.3(Gingerbread)
  • 3.x(Honeycomb)
  • 4.0(Ice Cream Sandwich)
  • 4.1, 4.2, 4.3(Jelly Bean)
  • 4.4(KitKat)

2014年2月末時点でこれだけのバージョンがリリースされています。2006年9月に1.0がリリースされてからまだ8年しか経っていないことを考えると驚きです。日本で初めてAndroidが搭載されたスマートフォンが発売されたのが2009年、Android 1.5 Cup Cakeが搭載された製品でした。この時のCPUはARM11系シングルコア、クロックは528MHz、320x480pixelの3.2インチスクリーンという仕様でしたが、今ではARM Coretex-A系のQuadコアや、クロック1GHz以上、解像度・スクリーンサイズHDクラス、大画面となっており随分と進歩しています。ARMに関しては、別コラムARMを参照ください。

それぞれのアップデート内容はここで詳しくは書きませんが、画面の大型化、各種ペリフェラルへの対応、2D,3D描画の高速化、マルチコアプロセッサのサポートなどスマートフォンに求められる要求が格段に高くなってきたことに伴い、次々にバージョンアップされてきました。「Android バージョン」などでググってみるといいでしょう。いかに頻繁に機能追加を行っているのかを、お分かり頂けると思います。

AppleのOSと違ってコードネームがユニークですね。余談ですがGingerbread以降のスマートフォンではこれらのコードネームをモチーフにした隠し画面を表示させることができるようになっています。「設定」→「端末情報」→「Androidバージョン」を連打すると表示されます。たいした画面ではないのですが、Jell Beanなどは結構かわいい画面が出てきて癒されます。

ライセンスの取り扱いに関して

AndroidはLinuxカーネル上で動作する環境のため、GPLやLGPLなどのembeddedlinuxのソフトウェアに関するライセンスについても、理解しておく必要があります。ここではAndroidにおけるライセンスに関して説明します。

Androidのソースコードは基本的にすべて公開されており、改変も自由に行うことができますが、ライセンスに対しての規約が無いわけではありません。ソースコードの多くはApache License 2.0に準じています。

Apache Licese 2.0の条件として代表的なものを以下に挙げます。

  • 無償、ロイヤリティーフリーの使用許諾
  • 二次的著作物は同じライセンス形態であることを要求しない
  • Apache Licenseのコードを使用した場合それを明示する必要がある

しかしGoogle社が提供しているアプリケーションの一部にはApache License 2.0ではないものがありますので、実践で使用する際には、Google社の許諾や各ライセンス条件に従うことが必要な場合もありますので注意が必要です。

いずれにせよWindowsソフトであってもAndroidの開発ソフトの作成にあたっては、「The apache Software Foundation」のHPからライセンス条項を確認しておく必要があります。

※Apache License 2.0の詳細は以下のページにあります。http://www.apache.org/licenses/LICENSE-2.0.html

またGPLなどもそうですが、ソフトウェアライセンスに対するスタンスが、それぞれの会社にはあります。なので、ソフトウェア開発をする際には、上記のライセンス条項に加えて、ライセンスに対する会社のスタンスを確認しておくことも非常に重要です。

開発環境と開発ツールに関して

では実際にAndroidで開発するには、どのような環境がいいのでしょうか。開発環境としてはAndroidプラットフォームとなるAndroid開発の環境とAndroidアプリケーションの2種類ありますので順番に説明していきましょう。

(1)Androidプラットフォームの開発環境

みなさんLinux開発の環境はご存知ですよね。
PC上のLinuxマイコン用のクロスコンパイラやリンカなどの開発ツールをインストールして、ターミナルコンソールから【Make】とポチポチと入力するものです。Androidプラットフォームの開発の場合、このLinuxの開発環境があれば70%ほどは完成しているようなものです。

この環境にAndroidのソースコードをAndroid Open Source Project(Androidの様々なVersionのソースコードがアップロードされているマスターのサーバー)から取得するツールを2種類インストールします。
まずは「Gitパッケージ」をインストールします。開発環境にしているPC上のLinuxディストリビューションによって多少異なりますが、【sudo apt-get install git-core】とすれば大抵入手できます。
次に「repoツール」をインストールするのですが、こちらのインストールは少し手間がかかります。インストールフォルダ、.bashrcなど環境ファイルへのパス設定などの準備を行う必要があります。その後【curl http://android.git.kernel.org/repo >~/bin/repo】と入力して「repoツール」をインストールするという手順です。こちらの開発環境はLinuxと同様に無償となります。

(2)Androidアプリケーションの開発環境

Androidアプリ開発の環境は、先に説明したものとは全く別の環境です。ソフトウェアエンジニアの方なら、一度は触れたことがあると思いますが、Eclipseベースの開発環境になります。こちらのEclipseに「http://developer.android.com/index.html」からAndroid SDK、JDKをダウンロードしてプラグインすることでアプリケーションの開発環境を構築することができます。開発環境用PCのOSはマイクロソフトのWindowsが多いと思います。
このAndroidアプリケーションの開発環境を使い、作ったアプリケーションがPC上でシュミレーションできてしまうので非常に便利です。しかしながら、実際のハードウェア、開発実機で動かすとやはり少し動きが違ったり、レイアウトがずれてしまったりします。なので、大枠の動きの確認という形での利用が良いと思います。もちろんこちらの開発環境も無償です。

ご紹介した開発環境の構築はこのコラムでは詳細に書けていません。説明しきれていない部分が多くなっていますので、基礎から学ぶ方はこれらをキーワードとして学んでいってください。WEBの情報サイト、開発ブログ日記、それに、テクニックブックなどの単行本・開発書籍、linux書籍、アンドロイド開発本といったタイトルの書籍などから、基礎的な情報を得て、基板の知識を身に着けて下さい。また、WEB検索をして最新情報や開発情報を入手してもいいかもしれません。横浜で行われている組み込み総合技術展でのセミナー(講習)・開発講座で開発基礎情報や基礎知識を得て、開発実験してみるのもいいですね。

開発環境を構築して開発ソフトが準備できたら、実際のハードウェア上で体験してみたいと思う人は、多いのではないでしょうか。TI社やFreescale社のARMマイコン、DSPやグラフィックアクセラレータなどを搭載したSoCが実装されている評価ボードも1万円以下で出品されていますし、ALTERA社やXILINX社といったFPGAメーカからもARMマイコン搭載のFPGA評価ボードも5万円からといった非常に安価で購入できます。開発方法はWEBや書籍に非常に豊富な情報や解説が載っているので、どなたでも簡単に試せますよ。ぜひ試してみてください。