/ kyokomi note / blog

UaalでAndroidをkotlin化

May 31, 2020 [Android | Unity | Kotlin]

Unity as a LibraryのSampleプロジェクトはJavaなのですが、ちゃんとAndoridでUIとか開発していくならKotlinで書きたかったので対応してみた。

結論から言うと基本的には問題ないが、Bridge部分はminify対象から外してJavaのままにしておかないとだめそう?(たぶん)

Kotlinのコードを追加

単純にKotlinのコードを追加するのはAndroidStudio使ってれば簡単。

AndroidStudioで New ActivityとかするときにKotlinを選べば、必要なgradleの設定とかもしてくれる。

image-20200531145457081

既存のJavaをKotlin化

MainActivityとMainUnityActivityはKotlin化してOK。

MainUnityActivityとOverrideUnityActivityはKotlin化すると動かなくなるので注意。

=> https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html でいけるっぽいが、まあ別Moduleになってるし、abstract classなのでそんなに変更しないし、このままでよさそう。

2020-05-10 17:58:52.647 22799-22799/com.unity.mynativeapp E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.unity.mynativeapp:Unity, PID: 22799
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.unity.mynativeapp/com.unity.mynativeapp.MainUnityActivity}: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState
        at com.unity.mynativeapp.MainUnityActivity.onCreate(Unknown Source:2)
        at android.app.Activity.performCreate(Activity.java:7009)
        at android.app.Activity.performCreate(Activity.java:7000)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)

とりあえずMainActivity.javaは消して、BottomNavigation対応のActivityをMainActivity.ktとして入れ替えて普通に動いた。

おわり

ひとまずは、変なハックとかせずKotlinで開発していけそうなので、Unity as a Libraryいい感じですね。

last modified June 20, 2020

👋 Related posts in the uaal series...