iOSとAndroidアプリでライブラリとして使用する共通のサービスコール、データモデルなどを作りたいと思っていましたが、おそらくHaxeがこれを実行できると思っていましたが、例は見つかりませんでした。誰かがこれが可能かどうか、そしてどうやって始めるべきかについて、いくつか明言することができますか?iOSとAndroidでネイティブに呼び出すことができるhaxeでライブラリを作成する方法はありますか?
答えて
これは非常に重要なトピックであり、可能です。しかし、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型:
- Javaの型を消費する
java.Lib
機能を使用します。 Java配列を作るためにhttp://api.haxe.org/java/Lib.html - 使用
java.NativeArray
:http://api.haxe.org/java/NativeArray.html
の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
}
});
- 1. TFSでタスクを作成するときにサービスを呼び出す方法はありますか
- 2. AndroidでActionScriptを呼び出す方法はありますか?
- 3. drawRectを呼び出す方法:layoutSubviewsがiosで呼び出すとき
- 4. 別のjarファイルにあるjarライブラリ内にあるクラスファイルを呼び出すことはできますか?
- 5. freemarker:私は呼び出し元のURLを知ることができる方法はありますか?
- 6. iOS用アダプタを呼び出すことができません
- 7. クラスを関数ネイティブで関数呼び出しとして呼び出すことができません
- 8. VBAで呼び出すことができる単純なPythonコードからDLLを作成する方法
- 9. 関数内で関数を呼び出すことができるpythonライブラリがありますか?再帰的スタックを作成するwtihout
- 10. 私たちはアンドロイドのネイティブAPIを呼び出すことができます
- 11. AndroidネイティブARM64でクリアキャッシュを呼び出す方法は?
- 12. iOSアプリでMagicalRecord.cleanUp()をどこで呼び出す必要がありますか?
- 13. テンプレートファイルからライブラリ関数を呼び出すことはできますか?
- 14. Rでパッケージをダウンロードできますが、ライブラリから呼び出すことはできませんか?
- 15. Android VNC Serverでコンパイルされた共有ライブラリにJNIを呼び出すことはできますか?
- 16. android-onPostInitCompleteは、getRemoteServiceへの呼び出しごとに1回だけ呼び出すことができます
- 17. 呼び出し可能メソッドを使用してオブジェクトを作成する方法ですが、関数のように呼び出すこともできます
- 18. マクロはプリプロセッサコマンドを呼び出すことができますか?
- 19. 私はプライベートメソッドを呼び出すことができますか?
- 20. ラムダがアレクスキルを呼び出すことはできますか?
- 21. このJavaScript関数を一方向に呼び出すことはできますが、もう一方向に呼び出すことはできません。
- 22. Androidで2回のasyncTask呼び出しの後に文を呼び出す方法はありますか?
- 23. Service.onStartCommandでstopSelf()を呼び出すことはできますか?
- 24. cfscriptでカスタムタグを呼び出すことはできますか?
- 25. GJSでGdk.Seat.grab()を呼び出すことはできますか?
- 26. プリミティブでdeleteを呼び出すことはできますか?
- 27. rootViewControllerでメソッドを呼び出すことはできますか?
- 28. C#でオブジェクトを呼び出すことはできますか?
- 29. Javaでprintlnを呼び出すことはできますか?
- 30. ネイティブではネイティブでは実行できないことはありますか?