OpenFL用のネイティブ拡張ライブラリの作成、パート3

まえがき


これは、 OpenFLのネイティブ拡張ライブラリの作成に関する一連の記事の最後の第3部の翻訳です。 2番目の部分では、iOS用の拡張ライブラリを作成する方法について説明しました。 このパートでは、Java言語でAndroidプラットフォーム用の拡張ライブラリを作成する方法について説明します。後で説明するように、AndroidではiOSよりもやや簡単です。

Java、Haxe、すべて、すべて、すべて!


次のゲームでは、埋め込みHTMLページの形式でヘルプを表示することを思いつき、次のプロジェクトを見つけました: NMEWebview 。 このプロジェクトは、haxeアプリケーションでJavaコードを使用する方法を示しています。

今度は、Javaコードとの相互作用を確認します。

拡張機能のディレクトリを作成します。
cd project mkdir android mkdir android/testextension 

そして、ファイルTestExtension.java
 package testextension; class TestExtension { public static String doSomething(String in){ return in+"\n"+in; } } 

testextension.TestExtension.doSomething(String):文字列はテスト関数であり、haxeにエクスポートする必要があります。

Javaで記述しているため、cpp.Lib.loadを使用して拡張機能にアクセスすることはできなくなり、これにはopenfl.utils.JNIを使​​用する必要があります。

これが、TestExtension.hxでhaxeラップする方法です
 #if android //  ,      JNI    main. //  ,   :) private static var testextension_dosomething : Dynamic; private static function init(){ if (testextension_dosomething != null) return; testextension_dosomething = openfl.utils.JNI.createStaticMethod( "testextension/TestExtension", "doSomething", "(Ljava/lang/String;)Ljava/lang/String;" ); } public static function doSomething(str:String) : String { init(); return testextension_dosomething(str); } #end 

openfl.utils.JNI.createStaticMethodはcpp.Lib.loadと同様に機能します。 この関数の最初の2つのパラメーターは、使用するクラス名と静的メソッドの名前です。 しかし、3番目の引数、最も難しい部分はメソッドシグネチャです。

()はメソッドを示し、括弧内は引数であり、外部は結果の型であると言えます。

(Ljava / lang / String;)Ljava / lang / String; haxeのString-> Stringに一致します。

JNIの署名の指定の詳細については、 こちらをご覧ください (例付き)。ただし、これはGoogleで最初に見つけたリンクです。 もっとシンプルなドキュメントがあると思います。

使用する前にJava拡張機能をコンパイルする必要はありません。コンパイルはアプリケーションのアセンブリ中に行われ、その方法を指定する必要があります。

これを行うには、次の行を、拡張子が付いたディレクトリのinclude.xmlファイルに追加します。
 <java path="project/android" if="android" /> 

その後、TestAppアプリケーションでTestExtension.doSomething()を呼び出すと問題なく動作します。

この記事のコードは、 GitHub 'eのリポジトリにあります。

条件付きコンパイルを回避し、コード全体に#if iosを追加するために、 Android / Tweet.cppファイルも追加しました(ただし、Tweet関数は実装していません)。

Java / haxeバンドルで次にしたいことは、HaxeObjectを渡し、関数をあちこちで呼び出す方法を学ぶことです(現在、openfl.utils.JNIは少し制限されていますが、必要なすべてのC ++メソッドをJNIからhaxeにエクスポートできると思います)。

翻訳者から


これで、LaurentBédubourgからのネイティブ拡張ライブラリの作成に関する一連の記事を締めくくりました。 サイクルは、その拡張で作業を開始するのに十分な必要最小限を記述します。 拡張機能セットの作業を開始したとき、そのような記事はなく、さまざまなブログで情報を探す必要がありました。
Android用の拡張機能を作成し、最新のSDKの機能が必要な場合は、SDKの目的のバージョンの拡張機能を構築する方法に関する記事をご覧ください。

Source: https://habr.com/ru/post/J187594/


All Articles