解决方法
对于iOS,您可以在这里找到答案的开头:How to create iOS- & OSX- library from Haxe and use it in native application?
对于Android,它很容易按照通常的侦听器接口模式公开API.但是你通常不能在Java中传递函数引用,所以Haxe-java使用类似的模式使用Closure / Function对象来概括,这些对象在Java中很难使用.
编写Java的Haxe代码:
确保将@:nativeGen meta添加到所有公开的类中 – 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.Lib函数来使用Java类型:http://api.haxe.org/java/Lib.html
>使用java.NativeArray制作Java数组:http://api.haxe.org/java/NativeArray.html
从Haxe生成JAR:
# generates java source under /MyAPI and a corresponding /MyAPI/MyAPI.jar haxe -cp src -java MyAPI -D no-root com.foo.MyModel
笔记:
> -main被省略,因为我们不需要静态入口点
> -D no-root将生成一个本机外观的包,否则就会出现haxe包.
在Java方面:
您可以导入此JAR并透明地使用它.
从IntelliJ / Android Studio,您可以创建一个模块:项目结构>添加模块>导入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 } });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。