pkl icon indicating copy to clipboard operation
pkl copied to clipboard

Got Error When run ConfigEvaluator.preconfigured().forKotlin() on Android app Runtime

Open bayuwijdev opened this issue 1 year ago • 2 comments

I'm very excited to learn about Apple Pickle and I just following the documentation of configuration for kotlin and example for config-kotlin,

I have SoldierConfig at my resources.

image

This is my SoldierConfig.kt

package example

import org.pkl.config.java.Config
import org.pkl.config.java.ConfigEvaluator
import org.pkl.config.kotlin.forKotlin
import org.pkl.config.kotlin.to
import org.pkl.core.ModuleSource

class SoldierConfig {
    private val config: Config = ConfigEvaluator.preconfigured().forKotlin().use { evaluator ->
        evaluator.evaluate(ModuleSource.modulePath("SoldierConfig.pkl"))
    }
    private val soldier = config.to<Soldier>()

    fun getBandungConfig() : Soldier.SoldierRequirement? {
        return soldier.soldierConfigs.getOrNull(0)
    }
}

I call the class at MainActivity.kt, like this

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val soldierConfig = SoldierConfig()
        val requirementBandung = soldierConfig.getBandungConfig()
        println("reqBandung: minAge is "+requirementBandung?.minAge)
        
}

I'm successfull on code generation and run it at main() fun, but failed when access the config from the class in app with error

FATAL EXCEPTION: main
                                                                                                    Process: id.visionplus.android.atv.stag, PID: 2366
                                                                                                    java.lang.NoSuchMethodError: No static method of(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path; in class Ljava/nio/file/Path; or its super classes (declaration of 'java.nio.file.Path' appears in /system/framework/core-oj.jar)
                                                                                                    	at org.pkl.core.util.IoUtils.getPklHomeDir(IoUtils.java:164)
                                                                                                    	at org.pkl.core.util.IoUtils.getDefaultModuleCacheDir(IoUtils.java:169)
                                                                                                    	at org.pkl.core.EvaluatorBuilder.<init>(EvaluatorBuilder.java:53)
                                                                                                    	at org.pkl.core.EvaluatorBuilder.preconfigured(EvaluatorBuilder.java:89)
                                                                                                    	at org.pkl.config.java.ConfigEvaluatorBuilder.preconfigured(ConfigEvaluatorBuilder.java:47)
                                                                                                    	at org.pkl.config.java.ConfigEvaluator.preconfigured(ConfigEvaluator.java:30)
                                                                                                    	at example.SoldierConfig.<init>(SoldierConfig.kt:9)
                                                                                                    	at id.visionplus.android.atv.presentation.main.MainActivity.onCreate(MainActivity.kt:126)
                                                                                                    	at android.app.Activity.performCreate(Activity.java:7161)
                                                                                                    	at android.app.Activity.performCreate(Activity.java:7152)
                                                                                                    	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
                                                                                                    	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
                                                                                                    	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3114)
                                                                                                    	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
                                                                                                    	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1839)
                                                                                                    	at android.os.Handler.dispatchMessage(Handler.java:110)
                                                                                                    	at android.os.Looper.loop(Looper.java:193)
                                                                                                    	at android.app.ActivityThread.main(ActivityThread.java:6833)
                                                                                                    	at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:500)
                                                                                                    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Please help me, what's wrong and how to solve it?

bayuwijdev avatar Feb 22 '24 14:02 bayuwijdev

Path.of() was added in API 34. Make sure your phone runs in this version. Then it might work 😉

Otherwise you could try using desugaring = https://developer.android.com/studio/write/java11-nio-support-table It seems this brings also support for older android versions.

StefMa avatar Feb 22 '24 14:02 StefMa

@bwijayap does this solve/fix the problem? Would be good to know 🙃

StefMa avatar Feb 29 '24 07:02 StefMa