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 件のコメント:
コメントを投稿