【问题标题】:Is there a way to create a library in haxe that can be called natively on iOS and Android?有没有办法在 haxe 中创建一个可以在 iOS 和 Android 上本地调用的库?
【发布时间】:2016-02-12 21:52:55
【问题描述】:

我想进行一些常见的服务调用、数据模型等,以用作我的 iOS 和 Android 应用程序的库,我在想也许 Haxe 能够做到这一点,但我找不到任何示例。有人可以说明这是否可行以及如何开始?

【问题讨论】:

    标签: android ios haxe


    【解决方案1】:

    这是一个非常重要的话题,而且是可能的。但是,您可能不得不公开特定于主机的 API,因为 Java 和 Objective-C/C++ 具有不同的原生类型。

    对于 iOS,您可以在此处找到答案的开头:How to create iOS- & OSX- library from Haxe and use it in native application?

    对于 Android,按照通常的侦听器接口模式公开 API 非常简单。但是您通常不能在 Java 中传递函数引用,因此 Haxe-java 使用了一种类似的模式,该模式使用闭包/函数对象进行泛化,这在 Java 中使用起来很尴尬。

    为 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 原生类型,您必须做一些转换工作:

    从 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
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多