这是我在评论中要求的输出。
+java -version
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)
+exec java -Xmx1600M -Djava.ext.dirs=/home/alielyasi/Android/Sdk/tools/lib/x86_64:/home/alielyasi/Android/Sdk/tools/lib -Dcom.android.uiautomator.bindir=/home/alielyasi/Android/Sdk/tools -jar /home/alielyasi/Android/Sdk/tools/lib/uiautomatorviewer-26.0.0-dev.jar
-Djava.ext.dirs=/home/alielyasi/Android/Sdk/tools/lib/x86_64:/home/alielyasi/Android/Sdk/tools/lib is not supported.
Use -classpath
首先,我们可以看到正在使用的 Java 命令是java
,而不是特定(绝对)路径名。
没关系,但这意味着$PATH
它将用于解析java
Java 启动器的实际路径名。(不是$JAVA_HOME
。)
其次,我们可以看到它java -version
告诉我们它正在使用 Java 11.0.11。正如我在评论中提到的,Java 9 及更高版本不支持“ext.dirs”机制。
不幸的是,该java
命令的使用建议-classpath
不会起作用(按原样)。
所以我会给你两种方法来解决这个问题:
解决方案 #1:只需使用 Java 8。
您需要确保已安装 Java 8,并且运行java -version
打印出版本号为8.0.xxx
,其中xxx
(理想情况下)是最新可用的 Java 8 补丁版本。
由于您使用的是 Ubuntu 20.04,因此有两种方法可以确保您使用的是 Java 8 而不是 Java 11。
解决方案 #2:调整脚本以使 Java 11 能够正常工作。
正如我上面所说,简单地转换-Djava.ext.dirs=...
为-classpath
选项是行不通的。那是因为该exec
行正在使用该-jar
选项,而何时-jar
使用-classpath
被忽略。但这-jar
意味着这是一个“可执行 JAR”,并且入口点类名来自 JAR 文件的清单。
所以我们需要取消这个。
首先,我们需要知道(完整的)入口点类名是什么,并且 JAR 文件正在设置自己的类路径。我们可以通过使用jar
命令提取META-INF/MANIFEST.MF
文件并查看它来确定。
接下来我们需要形成一个类路径,包括
- 当前给出的路径
$frameworkdir
- 主 JAR 文件的路径(即
$jarpath
)
- 清单文件中指定的路径
路径的顺序可能很重要。
整个类路径需要通过or选项提供给java
命令。(不是。)-classpath
-cp
--class-path
最后删除-jar $jarpath
并用完整的入口点类名替换它。(这是一个类名,而不是路径名。不要将点更改为斜杠、添加后缀或做任何类似的事情。完全按照清单文件给出的名称使用。)
这种方法应该有效,但我无法测试它。如果失败,请在下方评论。