2018年2月23日金曜日

JavaとApp Inventorの連携でより高度なプロトタイピング

 MIT App Inventorとその関連技術や応用については、これまでにかなり多数の記事を書いてきました。すでに、どこかで書いてことではありますが、再度、Javaとの連携について簡単にまとめます。今以上に高度なスマホアプリの素早い開発(ラッピドプロトタイピング)を行う際に思い起こして活用していただければよいと思います。

JavaとApp Inventorの連携3形態

1)App InventorのActivity Starterブロック
 これは当初からあった機能ですが、App Inventorのプログラムから任意のJavaプログラム(for Android)を呼び出してその結果を利用するためのものです。Javaプログラムを呼び出す際の引数の設定と、実行結果を取得するための設定には一定のルールがありますが、特に難しくはありません。
 例えば、App Inventor側にまだブロックが用意されていない新しいセンサーの値をリアルタイムに使いたいとします。その場合には、そのセンサ値を得るだけの小さなJavaプログラムを用意すればよい訳です。また、App Inventorには備わっていないような高度な数学ライブラリなどもJavaで作成すれば同様に利用できます。

(2)App InventorのExtensionsブロック
 これは比較的最近設けられた機能です。上記(1)と機能的には同様のことができるのですが、このExtensionsブロックには画期的な違いあります。(1)では、Javaプログラムを外部プログラムとして呼び出して使いましたが、こちらは、そのJavaプログラムの機能をApp Inventorの新しいブロックとして利用できるようにします!
 すなわち、ユーザが必要に応じて、(原理的には)誰でもApp Inventorをその言語仕様(インタフェース仕様)のなかで機能拡張することができるのです。「原理的には」と書いたのは、Javaを知っていればできるですが、かなり操作手順は入り組んでいます、という意味です。そのようにして新設されたブロックは、他の人も直ぐにそれを取り込んで使ったり、不要であれば解放することができます。
 これまでに、すでに、このExtensionsによるブロックは新たに数百個以上公開(一部は有償で販売)されています。リアルタイムDBであるFireBase人工知能関係機能、ファイルやネットワーク関係(BLE: Bluetooth Low Energy等も含む)など多彩なものがあり、現時点でも次々と発表する人が出てきています。まさに無限の拡張性を与えています!

(3)Java Bridgeによる連携
 これは、上記(1)とは逆の関係にあります。すなわち、この機能は、App Inventorのユーザ用ではなく、Javaプログラマーのためのものです。通常のJavaに比べて、Android用のJavaは(Android SDKを用いる)、スマホ特有のリソース管理の下で作成するため、特有の制約や込み入った制御があるため、一般には敷居が高くなっています。そこで、Javaから、App Inventorブロックの豊富で使い易い機能を呼び出して使えるようにしたということです。App Inventorの各ブロックは元々Javaで書かれており、それぞれJava Classになっているわけですから、(原理的には)そのようにできるはずです。サンフランシスコ大学のProf. David Wolberのところでこれが開発されました。

0 件のコメント:

コメントを投稿