]> glassweightruler.freedombox.rocks Git - waydroid.git/commitdiff
shell: Import CLASSPATH env that was generated by Android
authorAlessandro Astone <ales.astone@gmail.com>
Sun, 22 Jun 2025 10:20:26 +0000 (12:20 +0200)
committerAlessandro Astone <ales.astone@gmail.com>
Sun, 22 Jun 2025 10:20:26 +0000 (12:20 +0200)
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

index 049c304175c6b61bf8ab6e29d0009f3a6daf253e..edcffd9f271dafe117aa5f877aa873b3d5ecf566 100644 (file)
@@ -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: