自作のJavaクラスを使用するには

Androidアプリケーションで自作のJavaクラスを使用する方法を説明します。

サードパーティのJavaライブラリも同様に使用することができます。

Javaクラスを作成する

テスト用のJavaクラスを作成します。

今回は「C:\tmp\src」にJavaのソースコードを配置します。

C:\
└tmp
  └src
    └com
      └example
        └hello
          └Hello.java

Hello.javaのソースコードは次のようになります。

package com.example.hello;

public class Hello {
  public String sayHello() {
    return "Hello!";
  }
}

classファイルを作成する

javacでHelloクラスをコンパイルします。

classファイルは「c:\tmp\bin\classes」に出力します。

> cd c:\tmp\
>
> mkdir bin\classes
>
> javac -d bin\classes src\com\example\hello\Hello.java

Android SDKのクラスを使用している場合は、クラスパスにandroid.jarを追加します。

> javac -classpath "C:\Users\Public\Documents\Embarcadero\Studio\15.0\PlatformSDKs\adt-bundle-windows-x86-20131030\sdk\platforms\android-19\android.jar" -d bin\classes src\com\example\hello\Hello.java

「C:\tmp\bin\classes\com\example\hello\」に「Hello.class」ファイルが作成されました。

C:\
└tmp
  └bin
    └com
      └example
        └hello
          └Hello.class

JARファイルを作成する

JARファイルはC:\tmp\binフォルダーに出力します。

> mkdir bin

>jar cvf bin\Hello.jar -C bin\classes com
マニフェストが追加されました。
com/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
com/example/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
com/example/hello/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
com/example/hello/Hello.class を追加中です。(入 = 693) (出 = 412)(40% 収縮されま
した)

「C:\tmp\bin\」フォルダーに「Hello.jar」ファイルが作成されました。

C:\
└tmp
  └bin
    └Hello.jar

ブリッジファイルを作成する

HelloクラスをDelphiから使用できるようにするためのブリッジファイルを作成します。

Helloクラスを含むJARファイルを作成します。

登録ユーザー向けサイト(http://cc.embarcadero.com/myreg)からJava2OP.exeをダウンロードし、パスを通すなどの設定を行います。

Java2OPを使って、ソースファイルからブリッジファイルを作成します。

> cd C:\tmp
> Java2OP.exe -source src -unit Android.JNI.Hello

「C:\tmp\」フォルダーに「Android.JNI.Hello.pas」が作成されました。

{*******************************************************}
{                                                       }
{           CodeGear Delphi Runtime Library             }
{ Copyright(c) 2014 Embarcadero Technologies, Inc.      }
{                                                       }
{*******************************************************}

unit Android.JNI.Hello;

interface

uses
  Androidapi.JNIBridge,
  Androidapi.JNI.JavaTypes;

type
// ===== Forward declarations =====

  JHello = interface;//com.example.hello.Hello

// ===== Interface declarations =====

  JHelloClass = interface(JObjectClass)
    ['{86670A40-8969-4509-8840-27E22542A4A1}']
    {class} function init: JHello; cdecl;
  end;

  [JavaSignature('com/example/hello/Hello')]
  JHello = interface(JObject)
    ['{CFAF0852-C764-48A7-95DF-336924807FF9}']
    function sayHello: JString; cdecl;
  end;
  TJHello = class(TJavaGenericImport<JHelloClass, JHello>) end;

implementation

procedure RegisterTypes;
begin
  TRegTypes.RegisterType('Android.JNI.Hello.JHello', TypeInfo(Android.JNI.Hello.JHello));
end;

initialization
  RegisterTypes;
end.

Java2OPの入力オプション

Java2OPは、ソースファイルの他に、クラスファイルやjarファイルからブリッジファイルを作成することができます。

例:com\example\hello\Hello.classからブリッジファイルをAndroid.JNI.Hello.pasに作成する

Java2OP.exe -classes com\example\hello\Hello.class -unit Android.JNI.Hello

例:Hello.jarからブリッジファイルをAndroid.JNI.Hello.pasに作成する

Java2OP.exe -jar Hello.jar -unit Android.JNI.Hello

テスト用のAndroidアプリケーションを作成する

Delphi XE7を起動し、Firemonkeyモバイルアプリケーションを作成します。

先ほど作成したブリッジファイル(Android.JNI.Hello.pas)をプロジェクトに追加します。

_images/002.gif

フォームにボタンとラベルを配置します。

_images/001.gif

ボタンをクリックしたときのイベントを追加します。

ボタンを押すと、HelloクラスのsayHelloメソッドを呼び出します。

uses Androidapi.Helpers, Android.JNI.Hello;

procedure TForm1.Button1Click(Sender: TObject);
var
  Hello: JHello;
begin
  Hello := TJHello.Create;
  Label1.Text := JStringToString(Hello.sayHello);
end;

AndroidアプリケーションにJARファイルを追加する

「プロジェクトマネージャ」の「ターゲットプラットフォーム」ノードを展開します。

[ターゲットプラットフォーム」ノード内の「Android」ノードを展開します。

「ライブラリ」ノードを右クリックして[Add]を選択します。

_images/003.gif

表示されたダイアログボックスでJARファイルを選択し、「開く」をクリックします。

「プロジェクトマネージャ」の「ライブラリ」ノードの下に、カスタムJavaライブラリが表示されます。

_images/004.gif

Androidアプリケーションを実行して動作を確認する

アプリケーションを実行します。

_images/005.gif

ボタンを押します。ラベルの文字が更新されたら成功です。

_images/006.gif