Adopting the OpenJDK

このことは意外に知られていないかもしれませんが、Javaは多くのフレーバーとパーツから構成されています。OracleによるSun Microsystemsの買収によりOracleはJava商標の正式な所有者となり、主要な「公式」Javaディストリビューションとなりました。

最初に免責事項を説明します:私(Jim McKeeth)は弁護士ではなく、Java開発者でもありません。この記事はJava、Java開発、およびライセンスに関連する多くの複雑な問題に関するハイレベルな概要です。この記事の目的はあなたが前進して成功するために十分な情報を提供することですが、この記事の内容に不足を感じたり不明な点がある場合は、追加の調査を行って詳細を確認したり、弁護士に相談することをお勧めします。

Javaは次の要素で構成されています。

  • JVM: Java Virtual Machineは、すべてのJavaアプリケーションを実行する仮想マシンです。Java アプリケーションは通常、Java バイトコードとして JAR ファイルで配布されます。Javaバイトコードは物理的なコンピュータ上ではネイティブには実行されず、その代わりにJVM上で実行されます。JVMは、Javaバイトコードをネイティブのマシンコードに変換するJust-In-Time-Compiler(JIT)です。
    • JVMで人気のある2つのフレーバーは、Hotspot(Oracle JDKで使用されている公式JVM)とOpenJ9です。
    • 技術的にはAndroidにはJVMがありません。その代わりJavaのバイトコードをDalvikのバイトコードに変換してDVM(Dalvik Virtual Machine)で実行するか、ART(Android Runtime)でコンパイルします。どちらも.dexファイルを使用しますが、ARTはバイトコードを.elf(Executable and Linkable Format)ファイルに変換します。この記事では主に Delphi で Android アプリを構築するための Java デスクトップ側に焦点を当てていますが、わかりやすくするために補足しておきたいと思いました。
  • JRE: Java Runtime Environmentには、Javaアプリケーションを実行するために必要な主要なライブラリとJVMが含まれています。これには、アプリケーションやその他のユーティリティを実行する Java.exe と Javaw.exe が含まれています。
  • JDK: Java Development Kit(Java開発キット)、またはJava開発のためのSDK。JDKはJREのスーパーセットです。Java (および Android) アプリケーションの構築に使用するキットで、Java アプリケーションを実行するために必要なすべてのものが含まれています。これには、KeyTool.exeやJarSigner.exeのようなユーティリティも含まれています。
  • Oracle がリリースした Java プラットフォームには、Standard Edition(Java SE)、Enterprise Edition(Java EE)、Micro Edition(Java ME)の3つのバリエーションがあります。このブログ記事と、皆様が遭遇するであろうほとんどのユースケースでは、Standard Editionを使用しています。

興味深いのは、Java Standard Edition (SE) Platformのフリーでオープンソースの実装であるOpenJDKです。OpenJDKはバージョン7以降のJava SEの公式リファレンス実装です。

ソースの実装はGNU General Public License version 2の下でライセンスされています[wikipedia]。ChromeがオープンソースのChromiumプロジェクトをベースにしているのと同じように、Java SEはOpenJDKをベースにしています。あなた自身も含めて、誰でもOpenJDKのソースファイルをダウンロードしてバイナリビルドを作成することができます。これを行う組織はいくつかあり、それぞれがライセンス、サポート、含まれるコンポーネントについて独自の形態で提供しています。以下にいくつか紹介します(これらは OpenJDK ソースのバイナリディストリビューションです)。


Build

長期サポート

パーミッシブ・ライセンス

Pure

商用サポート

AdoptOpenJDK / 
JClarity / IBM Java SDK

Yes

Yes

Optional

Yes

Alibaba Dragonwell

Yes

Yes

No

Yes

Amazon Corretto

Yes

Yes

No

No

Azul Zulu

Yes

Yes

No

Yes

BellSoft Liberica JDK

Yes

Yes

No

Yes

ojdkbuild

Yes

Yes

Yes

No

Oracle Java SE

Yes

No

No

Yes

Oracle OpenJDK

No

Yes

Yes

No

Red Hat OpenJDK

Yes

Yes

Yes

No

Red Hat for Windows

Yes

Yes

No

Yes

SAP SapMachine

Yes

Yes

No

No

Source: https://en.wikipedia.org/wiki/OpenJDK 

Oracleは直接OpenJDKのビルドを提供していますが、Oracleから直接提供されるビルドには、長期サポートや商用サポートを含みません。そのため、Oracleはパーミッシブ・ライセンスではないOracle SEへの切り替えを求めています(Oracleは最近、Standard Edition JDKのライセンスを変更し、商用利用には有償のサポート契約が必要になりました)。つまり、OpenJDKのソースはパーミッシブ・ライセンスですが、Oracleからのバイナリディストリビューションにはパーミッシブ・ライセンスがありません。

そこでAdoptOpenJDK(その他)の出番です。AdoptOpenJDKはオープンソースのOpenJDKソースコードを利用し、長期サポート(古いバージョンのアップデートや修正)、パーミッシブ・ライセンス、商用サポートを備えたバイナリディストリビューションを提供しています。AdoptOpenJDK は、コミュニティと IBM、GoDaddy、Microsoft、Red Hat を含む多数のベンダーによる支援の下でメンテナンスされています。

RAD Studio は Java に直接依存していませんが、Android をターゲットに Android SDK を使用する場合は、Java を使用していることになります。現在の RAD Studio インストーラでは、標準の Oracle JDK がインストールされていない場合に、標準の Oracle JDK をインストールするオプションを提供しています。エンバカデロでは、将来(おおむね 10.4.x で)、AdoptOpenJDK をインストールするようにデフォルトのオプションを変更する予定です。

どのJDKとJREを使うかはあなた次第です。このブログ記事では、HotSpot JREを使用してAdoptOpenJDKに切り替える方法を説明します(HotSpotはOracle JDKで使用されている公式のJVMですが、他にも選択可能なものがあります)。

始める前に

OracleのJREまたはJDKがすでにインストール済みの場合は、Javaに依存する他のソフトウェアがある場合を除いてアンインストールすることをお勧めします。DelphiでのAndroid開発だけを目的にJavaをインストールしているならアンインストールしても問題ありません。アップデートの仕方によっては、複数のバージョンがインストールされていることに気づくかもしれません。

インストール

https://adoptopenjdk.net/ にアクセスしてください。Windowsコンピューターを使用している場合は、必要なダウンロードがデフォルトで選択されているはずです。より新しいバージョンも配布されていますが、今回の目的にはバージョン8が必要です。バージョン8は、Android開発を含むほとんどのユースケースで最も人気のあるバージョンです。その他のバージョンは互換性がありません。

Downloading AdoptOpenJDK

もし32-bitバージョンのWindowsを使用している場合は、64-bitプラットフォームにアップグレードする必要があります。アップグレードが完了したらインストールを続けてください。64-bit Windowsに32-bitバージョンをインストールする必要はありません。別のコンピューターからWebサイトにアクセスしている場合は、他のプラットフォーム/リリースのページにアクセスして、必要なダウンロードを見つけることができます。Windows x64には、JREだけでなく、フルJDK(JREを含む)が必要です。

Downloading AdoptOpenJDK for Windows x64

インストールの際には、GNU GENERAL PUBLIC LICENSEに同意する必要があります。これはJDKのためだけのもので、あなたが開発するプロジェクトには影響しません(ここでも弁護士に相談するか、ご自身でライセンスを読んで確認してください)。JAVA_HOME環境変数の設定はインストーラーではデフォルトで設定が行われないオプション項目であることに注意してください。これ以外の項目はデフォルトのままで構いません。

Customize Your AdoptOpenJDK Installation

あとは、Delphi / RAD Studio IDEの設定を更新するだけです。「ツール」→「オプション」→「配置」→「SDKマネージャ」と進み、Android SDK(32ビットまたは64ビット)を選択して「Java」タブに移動し、次のスクリーンショットのような画面が表示されることを確認します。

Delphi RAD Studio SDK Manager - Android - Java Tab - Before

赤線で囲まれた箇所に黄色の注意アイコン(三角形)が表示されていない場合は、Oracle Java SE JDKが検出されていますのでアンインストールを正しく完了させてください。Java SE JDKが検出されず黄色の注意アイコンが表示されていたら、その横のブラウズボタンを使用して、AdoptOpenJDKをインストールしたパスを指定してください。これはAndroid SDKのJavaに関するすべてのエントリに対して実施します。

Delphi RAD Studio SDK Manager - Android - Java - After

この変更を実施しても、特に何も変わっていないように感じるかもしれませんが、Oracle Javaを削除する前と同じように動作しているからです。Oracle SE JDKもAdoptOpenJDKも同じソースコードに基づいており、機能や動作に違いはありません。

他のインストール方法

AdoptOpenJDKをインストールや更新するときに私が好ましいと考える方法は、Chocolatey Windowsパッケージマネージャを使う方法です。Chocolateyを使用したインストール手順は次のとおりです。

Chocolatey Package Manager

  1. 管理者権限で PowerShell ウィンドウを開きます
  2. 以下のPowerShellコマンドレットを実行してChocolateyをインストールします
    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
  3. 次のコマンドでAdoptOpenJDK 8をインストールします
    choco install adoptopenjdk8
  4. 今後、AdoptOpenJDK8を更新する場合は、管理者権限で実行中のコマンドプロンプトより以下のように実行できます
    choco update adoptopenjdk8

私はChocolatyのパッケージマネージャーの大ファンです(Proのサブスクリプションを所有しています)。パッケージマネージャーに関する情報を調べていただければ、このツールが環境構築のために大変便利であることがわかると確信しています。

この記事は、Jim McKeethによるAdopting the OpenJDK for Delphi Android Developmentの抄訳です。

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder. Design. Code. Compile. Deploy.

Start Free Trial   Free Delphi Community Edition   Free C++Builder Community Edition   Upgrade Today  

Anonymous