This is my simplified example extension code:
alongpath/org/haxe/extension/MyExt.java
//(...)
public class MyExt extends Extension {
private int accumulator = 0;
public int getAccumulator()
{
return accumulator;
}
public int addAccumulator(int value)
{
accumulator += value;
return accumulator;
}
public int subtractAccumulator(int value)
{
accumulator -= value;
return accumulator;
}
}
org/haxe/extension/MyExt.hx
@:build(ShortCuts.mirrors())
class MyExt {
#if android
@JNI public static function getAccumulator(instance:Dynamic):Int;
@JNI public static function addAccumulator(instance:Dynamic, value:Int):Int;
@JNI public static function subtractAccumulator(instance:Dynamic, value:Int):Int;
#end
}
Now, according to inthebox-macros repository in a PR by @player_03
Instance methods are more complicated. In Haxe, you would call
instance.myInstanceMethod()
, but to make a JNI instance method work, you have to callmyInstanceMethod(instance)
:
What is the instance? I checked
var me = new MyExt();
me.getAccumulator(me);
This causes app crash.
I googled around, and for example in HyperTouch @shoebox uses private property to shuffle instance around.
What am I missing? Should I also create getJNIInstance
method and get it from there?