16
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AndroidもiOSにも対応、Mobile OpenJDK 9について

Last updated at Posted at 2016-11-19

MobileプラットフォームをJavaを使って
マルチにアレコレやるにはというのを考えるやつです。

ということでOpenJDK 9のモバイル対応の話。

基本的にOpenJDKに書いてある情報を適当に訳してたりしているだけです。
深く理解していない部分も多いので、間違ってたらコメント下さい。

概要

OpenJDKのProjectの1つ。

http://openjdk.java.net/projects/mobile/

Mobile OpenJDK 9はその名の通り、JDKをMobileのプラットフォームに移植しようというもの。

2016年11月現在、Java SE 9 のリリースは2017年の7月とされているので、
そこに含まれるはず、、という代物。たぶん。

対応プラットフォーム

Android,iOS,Windows

iOSやWindowsのアプリケーションもサポートしているのがミソ。

特徴

  • JDK 9ベースの移植(ヘッドレス)
  • 最低限のJDK 8の機能のサポート。compact2 profile (モジュール形式)
  • iOS x64とarm64対応(arm64はzero interpreterで提供されるだろうとのこと)
  • Android x86とarm対応(arm64はzero interpreterで提供されるだろうとのこと)
  • Windows 10タブレットアプリ対応
  • Javaランチャーのヘルパーインターフェースはモバイル用のJavaアプリケーションのプロセスに簡略化される
  • Hello worldのサンプルアプリやもしくはプロジェクトテンプレートを各プラットフォームごとに提供する

一応それぞれのプラットフォームの開発手順などが載っている。
あと、Sample Projectも作られている様子。

iOS

http://openjdk.java.net/projects/mobile/ios.html

x64 simulatorとARM 64-bitデバイスをサポート、と。
x64実装は標準的なHotspot JITだがARM 64-bit実装デバイスはzero interpreterに制限される.
iOS ARMプラットフォームでは動的コード生成を許してないからだとか。
Hotspotの動的テンプレート生成インタプリタは厳密に禁止されてる。ランタイムでコード生成するので。
iOSのデバイスがサポートするCのインタプリタによってこの問題をwork aroundで解決しているとか。

せっかくなので、Sample Projectを落としてみる。

wget http://openjdk.java.net/projects/mobile/samples/hello-ios-x86_64.tar.gz
gzip -dc hello-ios-x86_64.tar.gz  | tar xvf -

多分こんな感じか。

構成はこんな感じになっていました。

tree hello-ios-x86_64
hello-ios-x86_64
├── JavaLauncher.framework
├── build
├── build.xml
├── copy-jre.sh
├── hello
│   ├── AppDelegate.h
│   ├── AppDelegate.m
│   ├── Default-568h@2x.png
│   ├── Default.png
│   ├── Default@2x.png
│   ├── JavaLauncherArgs.properties
│   ├── ViewController.h
│   ├── ViewController.m
│   ├── en.lproj
│   │   ├── InfoPlist.strings
│   │   ├── ViewController.strings
│   │   └── ViewController.xib
│   ├── hello-Info.plist
│   ├── hello-Prefix.pch
│   ├── hello.h
│   ├── hello.m
│   └── main.m
├── hello.xcodeproj
│   ├── project.pbxproj
│   ├── project.xcworkspace
│   │   ├── contents.xcworkspacedata
│   │   └── xcuserdata
│   ├── xcshareddata
│   │   └── xcschemes
│   │       └── hello.xcscheme
│   └── xcuserdata
├── helloTests
│   ├── Info.plist
│   ├── JavaLauncherArgs.properties
│   └── helloTests.m
├── java
│   └── src
│       └── hello
│           ├── Printer.java
│           └── hello.java
├── manifest.mf
├── nbproject
│   ├── build-impl.xml
│   ├── genfiles.properties
│   ├── project.properties
│   └── project.xml
└── remove-jre.sh

なるほどおもいっきりNetBeanベースな感じがありますね。

ということで、NetBeans8.2を落としてきて実行してみると

ant -f /Users/yy_yank/hello-ios-x86_64 -Dnb.internal.action.name=run run
run:
/Users/yy_yank/hello-ios-x86_64/build.xml:99: Execute failed:
java.io.IOException: Cannot run program "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app/Contents/MacOS/iPhone Simulator" (in directory "/Users/yy_yank/hello-ios-x86_64"): error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at java.lang.Runtime.exec(Runtime.java:620)

ということで、Xcodeが必要。

Xcodeをインストールし、実行すると、XcodeのバージョンによりiOSのSimulatorのディレクトリが違うらしいのでbuild.xmlを修正する。ここの部分。

exec executable="/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator"

で、Simulatorが動いてHello Worldだけ表示されるアプリがあらわれる!
はずなのだが出てきてくれない。よく分からない。そもそもこのSample Project自体が古い疑惑もある。ちゃんとしてるかも分からないのでこれ以上の深追いはやめる。

Android

http://openjdk.java.net/projects/mobile/android.html

Androidサポートはx86とarm。実行をエミュレーターもしくはデバイスですることが可能。
x86実装は標準のHotspot JITだがARM 32-bit実装はzero interpreterに制限された。
Android NDK & SDKが必要。

libffiというネイティブコンパイラを使っているらしい

こっちはiOSの方みたいにSample ProjectのURLは無さそうかな。hgのリポジトリURLはあるんだが。

Windows

http://openjdk.java.net/projects/mobile/windows.html

Windows Platform Implementation Details - Coming Soon!

Coming Soonですか、、いつですか。

まとめ

情報がOpenJDKコミュニティとhgのソースコードのアクティビティしか無いので、
常にウォッチしてないと動きがわからない。

メーリングリストはあるので、そこに参加するのが一番分かりやすいかもしれないです。
みた感じ、2016年10月とかも活動しているので今のところアクティブなプロジェクトであるといえるでしょう。

Mobile OpenJDKの形式に合わせてJavaのプロジェクトを作れば、マルチプラットフォームにいけちゃうということだろう。
Maven、Gradleあたりのビルドツールとの連携ももちろん考えているはず。
NetBeansのantからは動いているわけで、そこからGradleのtaskにするなどはさほど難しくないと思う。

16
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?