2016-02-12 39 views

cevap

8

Bu çok önemli bir konu ve mümkün. Ancak, Java'ya ve Objective-C/C++'ın farklı yerel türlere sahip olması nedeniyle, ana bilgisayara özgü API'ları göstermeniz olasıdır.

iOS için, burada cevabın bir başlangıcı bulabilirsiniz: How to create iOS- & OSX- library from Haxe and use it in native application?

Android için her zamanki dinleyici arabirimi deseni izleyen bir API maruz yeterince basittir. Ancak genellikle Java'da işlev referanslarını geçemezsiniz, bu nedenle Haxe-java, Java'dan kullanmak için garip olan Closure/Function nesneleri kullanılarak genelleştirilmiş benzer bir model kullanır. Java için

Yaz Haxe kodu:

tüm maruz sınıflara @:nativeGen meta eklemek için emin olun - Haxe yansıma işe yaramaz ama Java dan tüketilen zaman daha temiz olacak.

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

temelleri basit ama şeytan ayrıntıda gizlidir: Java türlerini tüketmeye

Ge Haxe bir JAR nerate:

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

Notlar: Biz bir yerli görünümlü paketi üretecek statik giriş noktası

  • -D no-root istemiyoruz çünkü

    • -main atlanırsa, aksi şeylerdir haxe paketinin altında. Java tarafında

  • :

    Bu JAR içe ve şeffaf kullanabilirsiniz.

    IntelliJ/Android Studio'dan bir modül oluşturabilirsiniz: Proje Yapısı> Modül Ekle> JAR/AAR Paketini İçe Aktar.

    IntelliJ'in, JAR'ı projenin içine kopyalarken, Haxe projenizi yeniden oluştururken JAR'ı orada güncellemeniz gerektiğini unutmayın. IntelliJ değişiklikleri hemen alacak.

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