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

Open
opened 2025-12-30 01:20:39 +01:00 by adam · 2 comments
Owner

Originally created by @bayuwijdev on GitHub (Feb 22, 2024).

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?

Originally created by @bayuwijdev on GitHub (Feb 22, 2024). I'm very excited to learn about Apple Pickle and I just following the documentation of [configuration for kotlin](https://pkl-lang.org/main/current/kotlin-binding/pkl-config-kotlin.html) and [example for config-kotlin](https://github.com/apple/pkl-jvm-examples/), I have SoldierConfig at my resources. ![image](https://github.com/apple/pkl/assets/14341686/c10ef347-8a52-48a7-b29b-0babec1f1e38) 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?
Author
Owner

@StefMa commented on GitHub (Feb 22, 2024):

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 commented on GitHub (Feb 22, 2024): [Path.of()](https://developer.android.com/reference/java/nio/file/Path#of(java.lang.String,%20java.lang.String[])) 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.
Author
Owner

@StefMa commented on GitHub (Feb 29, 2024):

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

@StefMa commented on GitHub (Feb 29, 2024): @bwijayap does this solve/fix the problem? Would be good to know 🙃
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/pkl#88