0

执行命令时显示如下错误:

用户名@设备:~/Android/Sdk/tools/bin$ ./uiautomatorviewer

不支持 Djava.ext.dirs=/home/username/Android/Sdk/tools/lib/x86_64:/home/username/Android/Sdk/tools/lib。请改用 -classpath。错误:无法创建 Java 虚拟机。错误:发生了致命异常。程序将会退出。


然后我在 uiautomatorviewer 文件中使用 --class-path 并遇到此错误:我使用此方法编辑 uiautomatorviewer 文件:https ://www.programmersought.com/article/53371586152/

错误:无法初始化主类 com.android.uiautomator.uiautomatorviewer 原因:java.lang.noclassdeffounderror: org/eclipse/swt/widgets/control mychange:在此处输入图像描述 原始:在此处输入图像描述 当我得到上述错误,我回到了之前的状态

现在我又遇到了第一个问题。

额外信息:$JAVA_HOME => /usr/lib/jvm/java-8-openjdk-amd64

$ANDROID_HOME => /home/用户名/Android/Sdk

安卓工作室版本:4.1.3

4

1 回答 1

0

这是我在评论中要求的输出。

+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它将用于解析javaJava 启动器的实际路径名。(不是$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。

  • 您可以使用“替代”系统将 Java 8设为全局默认 Java 版本。运行man update-alternatives文档。(您需要以update-alternativesroot 身份运行...)

  • PATH您可以通过更改环境变量使 Java 8 成为当前用户或当前 shell 的默认值。

解决方案 #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并用完整的入口点类名替换它。(这是一个类名,而不是路径名。不要将点更改为斜杠、添加后缀或做任何类似的事情。完全按照清单文件给出的名称使用。)

这种方法应该有效,但我无法测试它。如果失败,请在下方评论。

于 2021-04-28T14:08:55.737 回答