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?

1

There are 1 best solutions below

0
rgucluer On

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.