From 9009d1d9db8c8fc713cd4d7097681e9648a8ef24 Mon Sep 17 00:00:00 2001 From: Alessandro Astone Date: Sun, 22 Jun 2025 12:20:26 +0200 Subject: [PATCH] shell: Import CLASSPATH env that was generated by Android The *CLASSPATH* environment variables change with every Android version. We can get the correct values by peeking at /data/system/environ/classpath inside the container, where Android has dumped the values we need. Keep a static BOOTCLASSPATH value from Android 11 as a fallback. --- tools/helpers/lxc.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tools/helpers/lxc.py b/tools/helpers/lxc.py index 049c304..edcffd9 100644 --- a/tools/helpers/lxc.py +++ b/tools/helpers/lxc.py @@ -428,8 +428,17 @@ ANDROID_ENV = { "BOOTCLASSPATH": "/apex/com.android.art/javalib/core-oj.jar:/apex/com.android.art/javalib/core-libart.jar:/apex/com.android.art/javalib/core-icu4j.jar:/apex/com.android.art/javalib/okhttp.jar:/apex/com.android.art/javalib/bouncycastle.jar:/apex/com.android.art/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/framework-atb-backward-compatibility.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar:/apex/com.android.mediaprovider/javalib/framework-mediaprovider.jar:/apex/com.android.os.statsd/javalib/framework-statsd.jar:/apex/com.android.permission/javalib/framework-permission.jar:/apex/com.android.sdkext/javalib/framework-sdkextensions.jar:/apex/com.android.wifi/javalib/framework-wifi.jar:/apex/com.android.tethering/javalib/framework-tethering.jar" } -def android_env_attach_options(): - env = [k + "=" + v for k, v in ANDROID_ENV.items()] +def android_env_attach_options(args): + local_env = ANDROID_ENV.copy() + # Include CLASSPATH env that was generated by Android + command = ["lxc-attach", "-P", tools.config.defaults["lxc"], + "-n", "waydroid", "--clear-env", "--", + "/system/bin/cat" ,"/data/system/environ/classpath"] + classpath = tools.helpers.run.user(args, command, output_return=True).strip() + for line in classpath.splitlines(): + _, k, v = line.split(' ', 2) + local_env[k] = v + env = [k + "=" + v for k, v in local_env.items()] return [x for var in env for x in ("--set-var", var)] def shell(args): @@ -441,7 +450,7 @@ def shell(args): return command = ["lxc-attach", "-P", tools.config.defaults["lxc"], "-n", "waydroid", "--clear-env"] - command.extend(android_env_attach_options()) + command.extend(android_env_attach_options(args)) if args.uid!=None: command.append("--uid="+str(args.uid)) if args.gid!=None: -- 2.47.3