Howto

Java SE Embedded 8/JavaFXをArmadillo-840液晶モデルで使用する

JDK SE Embedded version 8からEmbedded JREを作成して、Armadillo-840 液晶モデルでJavaFXサンプルアプリケーションを動作させる手順を紹介します。

(リッチGUIクライアントのJavaFXを除き、Armadillo-810でも同様の手順でJavaが動作します)

必要機材

  • Armadillo-840液晶モデル
  • SD/SDHCカード(30MB以上の空き容量があるもの)

JDK SE Embedded version 8(ejdk)のダウンロード

ejdkは、下記リンクから入手することができます。

こちらから、以下のファイルをダウンロードしてください。

  • Oracle Java SE Embedded version 8 (ARMv6/ARMv7 Linux - VFP, HardFP ABI, Little Endian)※1

※1 ダウンロードするには、Oracleのアカウント作成(無償)とLicense Agreementへの同意が必要です。

Oracle Java SE Embedded Version 8 Update 33より、ARM向けJDKにJavaFXが同梱されなくなりました。 このため、OpenJFX(オープンソース版JavaFX、GPL v2ライセンス)を使用したバイナリを用意しました。こちらからダウンロードしてください。

※2 本バイナリは、こちらのソースからGradle 1.8を使用し「-PCOMPILE_TARGETS=armv6hf」を指定してビルドしたものです。ソースファイルは、こちら(http://hg.openjdk.java.net/)の8u-b13と同一です。

Embedded JRE(ejre)の作成

ここでは、ATDE v5(ATDE5)上で行う例を紹介します。※3

ejreの作成を行うためには、Javaの実行環境が必要です。初期状態では入っていませんので、apt-getコマンドを用いて追加します。

atmark@atde5:~$ su
パスワード:
root@atde5:/home/atmark# apt-get update
   :
パッケージリストを読み込んでいます... 完了
root@atde5:/home/atmark# apt-get install openjdk-7-jre
   :
icedtea-7-jre-jamvm:amd64 (7u65-2.5.1-5~deb7u1) を設定しています ...
root@atde5:/home/atmark# exit

次に、環境変数JAVA_HOMEを設定します。使用しているATDEの種類に合わせ、どちらか一つを実行してください。

i386向けATDEの場合:

atmark@atde5:~$ export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

amd64向けATDEの場合:

atmark@atde5:~$ export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

先ほどダウンロードしたejdkを展開します。

atmark@atde5:~$ ls
ejdk-8u33-fcs-linux-armv6-vfp-hflt.gz  openjfx-8u31-b13_armv6hf.tar.gz
atmark@atde5:~$ tar zxvf ejdk-8u33-fcs-linux-armv6-vfp-hflt.gz
   :
ejdk1.8.0_33/bin/jrecreate.bat

次に、OpenJFXバイナリをejdk配下に展開します。

atmark@atde5:~$ ls
ejdk-8u33-fcs-linux-armv6-vfp-hflt.gz  openjfx-8u31-b13_armv6hf.tar.gz
ejdk1.8.0_33
atmark@atde5:~$ cd ejdk1.8.0_33/linux_armv6_vfp_hflt/extensions
atmark@atde5:~/ejdk1.8.0_33/linux_armv6_vfp_hflt/extensions$ ls
charsets  debug  gcf  locales  nashorn  sunec  sunpkcs11
atmark@atde5:~/ejdk1.8.0_33/linux_armv6_vfp_hflt/extensions$ tar zxvf ../../../openjfx-8u31-b13_armv6hf.tar.gz
   :
fx/controls/lib/
atmark@atde5:~/ejdk1.8.0_33/linux_armv6_vfp_hflt/extensions$ ls
charsets  debug  fx  gcf  locales  nashorn  sunec  sunpkcs11
atmark@atde5:~/ejdk1.8.0_33/linux_armv6_vfp_hflt/extensions$ cd ../../..

jrecreate.shを実行して、ejreを作成します。オプションには、以下を指定することができます。

オプション 意味 指定可能な内容
dest 出力ディレクトリ 任意のディレクトリ名
profile プロファイル compact1, compact2, compact3, 指定なし(フルJRE APIサポート)のいずれか
vm 使用するVM minimal, client, server, allのいずれか
extension※4 拡張コンポーネント fx:graphics, fx:controls(fx:graphicsを含む), sunec, sunpkcs11, locales, charsets, nashorn, gcfのいずれか
atmark@atde5:~$ ejdk1.8.0_33/bin/jrecreate.sh --dest ejre --profile compact2 --vm minimal --extension fx:controls
Options {
    ejdk-home: /home/atmark/ejdk1.8.0_33
    dest: /home/atmark/ejre
    target: linux_armv6_vfp_hflt
    vm: minimal
    runtime: compact2 profile
    debug: false
    keep-debug-info: false
    no-compression: false
    dry-run: false
    verbose: false
    extension: [fx:controls]
}
を使用してJREを作成しています
Warning: Manifest attribute Implementation-Title is not defined.

ターゲットJREサイズは23,521 KBです(ディスクの使用量はこれより多いことがあります)。
埋込みJREが正常に作成されました
atmark@atde5:~$ ls ejre
COPYRIGHT  THIRDPARTYLICENSEREADME.txt  bin  bom  lib  release

jrecreateスクリプトについての詳細は、下記リンクを参照してください。

作成されるejreのサイズは、指定するオプションにより約10MB(profile:compact1, vm:minimal, 拡張コンポーネントなし)~約65MB(profile:jre, vm:all, すべての拡張コンポーネント含む)に変化します。

※3 一連の作業は、Windowsでも行うことが可能です。Javaの実行環境としてはWindows用のJREを、ファイルの展開にはtar.gz圧縮形式に対応したツール(Lhazなど)を、JRE作成スクリプトはjrecreate.batを、それぞれ使用します。

※4 extensionオプションは複数指定することが可能です。

JavaFXデモ&サンプルのダウンロード

JavaFXデモ&サンプルは、下記リンクから入手することができます。

こちらの下の方にある、以下のファイルをダウンロードしてください。

  • JavaFX Demos and Samples (Linux)

SDカードの準備

ダウンロードしたファイルを展開し、SDカードに書き込みます。

ejreディレクトリ及びその下にあるファイル群は、そのままSDカードのルートディレクトリにコピーしてください。

JavaFX Demos and Samplesからは、srcディレクトリと複数のファイルが展開されます。本HowtoではJavaFXサンプル「Ensemble8」を使用しますので、Ensemble8.jarファイルをSDカードのルートディレクトリにコピーしてください。

下記ではATDEで展開してSDに書き込む例を示します。 (SDカードは/media/sdにマウントされているものとしていますので、ご使用環境に合わせて読み替えてください)

atmark@atde5:~$ ls
ejdk-8u6-fcs-b23-linux-arm-vfp-hflt-12_jun_2014.gz
ejdk1.8.0_06
ejre
javafx_samples-8u20-ea-b17-linux-03_jun_2014.zip
atmark@atde5:~$ unzip javafx_samples-8u20-ea-b17-linux-03_jun_2014.zip
   :
  inflating: javafx-samples-8u20-ea/src/Modena/src/main/resources/modena/windows8-window-frame.png  
atmark@atde5:~$ ls
ejdk-8u6-fcs-b23-linux-arm-vfp-hflt-12_jun_2014.gz
ejdk1.8.0_06
ejre
javafx-samples-8u20-ea
javafx_samples-8u20-ea-b17-linux-03_jun_2014.zip
atmark@atde5:~$ cp -a ejre javafx-samples-8u20-ea/Ensemble8.jar /media/sd
atmark@atde5:~$ umount /media/sd
ejreディレクトリのコピー中に
「cp: シンボリックリンク `/media/sd/ejre/lib/arm/minimal/libjsig.so' を作成できません: 許可されていない操作です」
といったメッセージが表示されることがあります。これは、当該ファイルがシンボリックリンクであるため、FATフォーマットのSDカードに書き込めなかったことを示すエラーメッセージです。本Howtoで使用するサンプルには不要なファイルであるため問題はありませんが、シンボリックリンクを正しく扱いたい場合はSDカードをext3などでフォーマットしてください。

Armadilloへのイメージ書き込み

Java 8とJavaFXをArmadillo-840 液晶モデルで使用するためのカーネル・ユーザーランドイメージを、下記リンクからダウンロードしてください。

ダウンロードしたカーネル・ユーザランドイメージを、Armadillo本体のフラッシュに書き込んでください。(書き込み方法については、マニュアルを参照してください)

※5 本カーネルイメージは、linux v3.4-at6ソースから本コンフィグを使用してビルドしたものです。CONFIG_ARMADILLO840_PRIMARY_FB_LCDC0=y及びCONFIG_TOUCHSCREEN_ST1232_SINGLETOUCH=yが有効になっています。

※6 本ユーザーランドイメージは、Atmark Dist v20140131ソースに本パッチを当て、本コンフィグを使用してビルドしたものです。udevがv175にアップグレードされており、Qt 5を含めないようにしています。

Armadilloの起動とJavaFXサンプルの実行

ArmadilloのSDスロットに準備したSDカードを挿入し、フラッシュ上のカーネル・ユーザランドを使用して起動するよう設定してから、電源を投入してください。

ログインプロンプトが表示されたら、rootユーザーでログインします。そしてSDカードをマウント(下記はVFATでフォーマットされているものとしています)し、JavaFXサンプルEnsemble8を起動します。

armadillo840-0 login: root
Password:
[root@armadillo840-0 (ttySC2) ~]# mount -t vfat /dev/mmcblk0p1 /mnt
[root@armadillo840-0 (ttySC2) ~]# /mnt/ejre/bin/java -jar /mnt/Ensemble8.jar

Ensemble8が起動し、液晶画面に表示されます。本サンプルアプリでは、タッチパネルを用いてJavaFXのさまざまな機能を直接確認することができます。

参考情報

JavaFX Demos and Samplesのsrcディレクトリ下には、各サンプルアプリケーションのソースファイルが収録されています。Java 8及びJavaFXの開発環境は複数存在しますが、ここで用意されているソースはNetBeans IDEを用いてそのままビルドすることができます。

以前のドキュメント