https://blogs.oracle.com/jfxprg/entry/how_to_build_open_javafx
Android dalvik向けにJavaFXをビルドする方法を手短にまとめました。いくつか必要なものがありますが、それぞれに注意すべきことがあります。それでは仕事にとりかかりましょう。
[訳注]
このエントリの原文にopen JavaFXといった表現がありますが、OpenJFXと読み替えています。
Sources
まずはOpenJFXリポジトリが必要です。これは簡単なものですね。いつものように落とし穴があります。おそらくご存知でしょうが、dalvikはJDK互換であり、Oracleからの古き良きJava VMと比べるとあるAPIがなくなっています。幸いにも、正規のOpenJFXからJDK7へのバックポートであるリポジトリがあり、これをJDK7からJDK6へ移植することが可能です。最初に行うことは、以下のリンクからリポジトリをクローンまたはダウンロードすることです。JFX78(OpenJFX 8 Master RT のフォーク)このプロジェクトのメインページには、「ある条件で動作します」とあるため、ほとんどの場合に動作すると想定しましょう。
https://bitbucket.org/narya/jfx78
申し上げた通り、あるAPIがないためにdalvik VMではビルドが失敗してしまいます。不足しているAPIを入手するために、利用可能なGitHub上の別の互換リポジトリを使いましょう。
robovm-jfx78-compatZipファイルをダウンロード、ソースをjfx78/modules/baseに展開します。JavaFXバイナリスタブも必要ですので、JDK8からjfxrt.jarを拝借しましょう。最後にダウンロードすべきものは、FreeTypeのソースです。これはネイティブフォントのレンダリングに必要です。
https://github.com/robovm/robovm-jfx78-compat
FreeType Downloads
http://www.freetype.org/download.html
Toolchain setup
これらの手順は、Linuxでのみテスト済みであることをお伝えしなければなりません。おそらく、Mac OS上でも最小限の変更で動作すると思います。また、OpenJFXのビルドが出来たものと想定しています。つまり、antやgradle、gcc、JDK8といった全てのツールがインストールされており、全てうまく動いている、ということです。これに加え、ネイティブコードのコンパイルのためにJDK7、Android SDK、Android NDKをダウンロードしインストールしておきましょう。Android SDKインストールには少々時間がかかります。パスを通しておくことをお忘れなく。
http://developer.android.com/sdk/index.html
Android NDK
http://developer.android.com/tools/sdk/ndk/index.html
export
ANDROID_SDK=
/opt/android-sdk-linux
export
ANDROID_NDK=
/opt/android-ndk-r9b
export
JAVA_HOME=
/opt/jdk1
.7.0
export
PATH=$JAVA_HOME
/bin
:$ANDROID_SDK
/tools
:$ANDROID_SDK
/platform-tools
:$ANDROID_NDK
FreeType
FreeTypeがリリースしているソースをまずは展開します。ARM用にこれらをクロスコンパイルする必要があります。まずは~/work/ndk-standalong-19にインストールされている、クロスコンパイルのためのスタンドアロンのツールチェーンを作成しましょう。スタンドアロンのツールチェーンの作業の後、クロスコンパイルFreeTypeを以下のスクリプトで作成します。
$ANDROID_NDK
/build/tools/make-standalone-toolchain
.sh --platform=android-19 --
install
-
dir
=~
/work/ndk-standalone-19
コンパイルし、FreeTypeライブラリを$FREETYPE/installにインストールします。後ほどこのインストールディレクトリにリンクを張ります。FreeTypeに既に含まれている、Android上で利用可能なskiaライブラリに対して動的にサポートするOpenJFXフォントをリンクすることもできます。ファイルサイズはより小さくなりますが、互換性の問題が派生する可能性があります。
export
TOOLCHAIN=~
/work/freetype/ndk-standalone-19
export
PATH=$TOOLCHAIN
/bin
:$PATH
export
FREETYPE=`
pwd
`
.
/configure
--host=arm-linux-androideabi --prefix=$FREETYPE
/install
--without-png --without-zlib --
enable
-shared
sed
-i
's/\-version\-info \$(version_info)/-avoid-version/'
builds
/unix/unix-cc
.mk
make
make
install
Patching
javafx-android-compat.patchとandroid-tools.patch の2個のパッチをダウンロードし、jfx78ディレクトリにこのパッチを適用します。これらのパッチをご覧になることをお薦めします。android-compat.patchでは、OpenJFXビルドスクリプトをアップデートし、SharedSecretクラスへの依存性を削除し、LensLoggerを更新してjdk固有のPlatformLoggerへの依存を削除します。もう一つのandroid-tools.patchはandroid-toolsのヘルパースクリプトを作成します。このスクリプトはJavaFX Androidプロジェクトをセットアップするのに役立ちます。Building
では、ビルドしましょう。以下のスクリプトを実行します。エラーが出なければ、build/android-sdkにビルドしたものがあるはずです。
JAVA_HOME=
/opt/jdk1
.7.0
JDK_HOME=
/opt/jdk1
.7.0
ANDROID_SDK=
/opt/android-sdk-linux
ANDROID_NDK=
/opt/android-ndk-r9b
PATH=$JAVA_HOME
/bin
:$ANDROID_SDK
/tools
:$ANDROID_SDK
/platform-tools
:$ANDROID_NDK:$PATH
gradle -PDEBUG -PDALVIK_VM=
true
-PBINARY_STUB=~
/work/binary_stub/linux/rt/lib/ext/jfxrt
.jar \
-PFREETYPE_DIR=~
/work/freetype/install
-PCOMPILE_TARGETS=android
Create first JavaFX Android project
android-toolsにあるgradleスクリプトを使います。スクリプトはあなたのためのプロジェクト構造を設定します。以下のコマンドを使ってAndroid Hello Worldプロジェクトを作成し、このプロジェクトを最新ビルドのJavaFXランタイムとHelloWorlrdアプリケーションにリンクします。- NAME:Androidプロジェクト名
- DIR:最初のプロジェクトを作成したディレクトリ
- PACKAGE:Androidが必要とするパッケージ名。JavaFXアプリケーションのパッケージングとは無関係
- JFX_SDK:最新ビルドのランタイム
- JFX_APP:JavaFXアプリケーションのdistディレクトリ(全てのアプリケーションのjarファイルが配置される)
- JFX_MAIN:メインクラスの完全修飾名
作成したプロジェクトにディレクトリを移動し、他のAndroidプロジェクトのように使いましょう。ant clean、debug、uninstall、installが使えます。IDEのEclipseやNetBeansからは試していません。
gradle -PDEBUG -PDIR=
/home/user/work
-PNAME=HelloWorld -PPACKAGE=com.helloworld \
-PJFX_SDK=
/home/user/work/jfx78/build/android-sdk
-PJFX_APP=
/home/user/NetBeansProjects/HelloWorld/dist
\
-PJFX_MAIN=com.helloworld.HelloWorld createProject
0 件のコメント:
コメントを投稿