2016-02-12 8 views
6

iOSとAndroidアプリでライブラリとして使用する共通のサービスコール、データモデルなどを作りたいと思っていましたが、おそらくHaxeがこれを実行できると思っていましたが、例は見つかりませんでした。誰かがこれが可能かどうか、そしてどうやって始めるべきかについて、いくつか明言することができますか?iOSとAndroidでネイティブに呼び出すことができるhaxeでライブラリを作成する方法はありますか?

答えて

8

これは非常に重要なトピックであり、可能です。しかし、JavaとObjective-C/C++のネイティブタイプが異なるため、ホスト固有のAPIを公開する必要があります。 iOSのについては

、あなたはここで答えの始まりを見つけることができます:How to create iOS- & OSX- library from Haxe and use it in native application?

アンドロイドのために、通常のリスナーインタフェースパターンを、次のAPIを公開するために十分に簡単です。しかし、一般的にJavaで関数参照を渡すことはできないので、Haxe-javaは、Javaから使用するのが難しいClosure/Functionオブジェクトを使って同様のパターンを使用します。 Java用

書き込みhaXeのコード:

すべての露出のクラスに@:nativeGenメタを追加してください - haXeの反射は機能しませんが、Javaから消費するとき、それはきれいになります。

package com.foo; 

@:nativeGen 
class MyModel { 
    public function new() { 
    } 
    public function doSomething(listener:SomethingListener) { 
     Timer.delay(function() { 
      listener.onResult(cpt); 
     }, 2000); 
    } 
} 

@:nativeGen 
interface SomethingListener { 
    function onResult(value:Int):Void; 
} 

基本はシンプルですが、悪魔は細部にある:あなたには、いくつかの変換作業を行う必要があります消費する/戻るネイティブなJava型:

のGe haXeのからnerate JAR:

# generates java source under /MyAPI and a corresponding /MyAPI/MyAPI.jar 
haxe -cp src -java MyAPI -D no-root com.foo.MyModel 

注:私たちは、静的なエントリポイント

  • -D no-rootがネイティブに見えるパッケージを生成しますしたくないので

    • -mainが省略され、それ以外のものがありますhaxeパッケージの下にあります。 Java側で

  • あなたはこのJARをインポートして、透過的にそれを使用することができます。

    IntelliJ/Androidスタジオから、プロジェクト構造>モジュールの追加> JAR/AARパッケージのインポートというモジュールを作成することができます。

    IntelliJはJARをプロジェクトの中にコピーするので、Haxeプロジェクトを再構築するときにJARを更新する必要があることに注意してください。 IntelliJはすぐに変更を受け取ります。

    import com.foo.MyModel; 
    import com.foo.SomethingListener; 
    
    MyModel myModel = new MyModel(); 
    myModel.doSomething(new SomethingListener() { 
        @Override 
        public void onResult(int value) { 
         // Got something from Haxe 
        } 
    }); 
    
    関連する問題