I try to compile an application written on Python 3.10.12 in Linux Mint 21.2 for Android. According to instructions, for example, this one, Android SDK must be installed. There is a possibility to download a version for command line usage (commandlinetools-linux-10406996_latest.zip) from this webpage. It is enough to unzip a zip of the application into a directory and if necessary then to add some pathes to the PATH variable. Here is a content of the directory ~/path/to/cmdline-tools/bin:
apkanalyzer avdmanager lint profgen resourceshrinker retrace screenshot2 sdkmanager
So it's pretty good — the sdkmanager exists in. Next I try to run ./sdkmanager "as is" and with a parameter ./sdkmanager "platforms;android-27" as well as written in the instruction. As a result I get an error: this one with using the openjdk version "1.8.0_392" (both java and javac are the same version):
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/sdklib/tool/sdkmanager/SdkManagerCli has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:621)
And this one with using java-1.11.0-openjdk-amd64 (again both java and javac are the same version being 11 in this case):
Error: LinkageError occurred while loading main class com.android.sdklib.tool.sdkmanager.SdkManagerCli
java.lang.UnsupportedClassVersionError: com/android/sdklib/tool/sdkmanager/SdkManagerCli has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0
However, a JAVA_HOME variable can be tried to set. Here is a content of the /usr/lib/jvm:
default-java java-1.11.0-openjdk-amd64 java-11-openjdk-amd64 java-1.8.0-openjdk-amd64 java-8-openjdk-amd64
I've tried to set both java-8-openjdk-amd64 and java-11-openjdk-amd64 for the JAVA_HOME adding export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 string into ~/.bashrc but it hasn't helped. The error has remained.
Question: what things can be done to fix it?
I had a similar problem while trying to install Android Studio for Flutter. From my notes... I used a tutorial from Digital Ocean to fix my Java installation issue. Source: https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-on-ubuntu-22-04
You already installed Java, so jump to Step 2 — Managing Java, follow the document. I hope it fixes your problem.