I am a native developer and new to Unity. I am trying to play to my strengths by coding in Kotlin and then using my code as a plugin in Unity. One issue I am running into is that I cannot figure out how to reference a function that is inside of a companion object.
Here is my Kotlin class
class MyAnalytics internal constructor(
private val MyAnalyticsConfiguration: MyAnalyticsConfiguration
) : MyAnalyticsLogger {
.
.
.
override fun logEvent(eventRequest: Event?) {
// some code in here
}
companion object {
@JvmStatic
fun factory(
context: Context,
MyAnalyticsConfiguration: MyAnalyticsConfiguration = MyAnalyticsConfiguration()
) : MyAnalytics {
val eventExecutor = MyWorkManager(
workManager = WorkManager.getInstance(context.applicationContext),
MyAnalyticsConfiguration = MyAnalyticsConfiguration
)
return MyAnalytics(
MyAnalyticsConfiguration
)
}
}
}
I want to be able to access the factory function from my Unity code.
In Kotlin I can do so like this,
MyAnalytics.factory(
context = requireActivity()
)
But how can I do the same in Unity? Here is what I have tried.
AndroidJavaClass UnityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject UnityPlayerActivity = UnityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject myAnalytics = new AndroidJavaObject("com.test.analytics.MyAnalytics");
AndroidJavaObject analyticsObject = myAnalytics.Call<AndroidJavaObject>("factory", UnityPlayerActivity); //Also tried with 'CallStatic'; no result, same error
The error I am receiving is,
AndroidJavaException: java.lang.NoSuchMethodError: no static method with name='factory' signature='(Landroid.app.Application;)Ljava/lang/Object;' in class Ljava.lang.Object; 12-10 14:00:21.883 13537 13674 E Unity : java.lang.NoSuchMethodError: no static method with name='factory' signature='(Landroid.app.Application;)Ljava/lang/Object;' in class Ljava.lang.Object; 12-10 14:00:21.883 13537 13674 E Unity : at com.unity3d.player.ReflectionHelper.getMethodID(Unknown Source:162) 12-10 14:00:21.883 13537 13674 E Unity : at com.unity3d.player.UnityPlayer.nativeRender(Native Method) 12-10 14:00:21.883 13537 13674 E Unity : at com.unity3d.player.UnityPlayer.access$300(Unknown Source:0) 12-10 14:00:21.883 13537 13674 E Unity : at com.unity3d.player.UnityPlayer$e$1.handleMessage(Unknown Source:95) 12-10 14:00:21.883 13537 13674 E Unity : at android.os.Handler.dispatchMessage(Handler.java:103) 12-10 14:00:21.883 13537 13674 E Unity : at android.os.Looper.loop(Looper.java:214) 12-10 14:00:21.883 13537 13674 E Unity : at com.unity3d.player.UnityPlayer$e.run(Unknown Source:20)