【问题标题】:Getting an error while running uiautomatorviewer in ubuntu 20.04 [duplicate]在 ubuntu 20.04 中运行 uiautomatorviewer 时出错 [重复]
【发布时间】:2021-04-28 12:45:56
【问题描述】:

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

用户名@设备:~/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 我的改变:enter image description here 原文:enter image description here 而当我得到上述错误时,我又回到了之前的状态

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

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

$ANDROID_HOME => /home/username/Android/Sdk

Android Studio 版本:4.1.3

【问题讨论】:

  • 您的问题不清楚。如果您使用--class-path,Java 命令将无法识别它。如果您像错误消息中所说的那样使用了-classpath...请确切地向我们展示您将uiautomatorviewer 脚本更改为的内容。
  • 请注意,ext.dirs 机制直到 Java 9 才被删除,因此您是否真的使用 Java 8 来运行程序是值得怀疑的。
  • @StephenC 您好,感谢您抽出宝贵时间。对于您的第二条评论:我都使用了,但它不起作用。我的主要问题是:不支持 Djava.ext.dirs=/home/username/Android/Sdk/tools/lib/x86_64:/home/username/Android/Sdk/tools/lib。请改用 -classpath。错误:无法创建 Java 虚拟机。错误:发生了致命异常。程序将会退出。我根据这个链接更改了文件:programmersought.com/article/53371586152 我该怎么解决这个问题?
  • 解决方案是真正使用Java 8,或者使用-classpath ... 正确。除非您提供我要求的信息,否则我无法进一步帮助您。请通过EDITING问题提供信息。不像 cmets。
  • 你还没有完成我的要求。请告诉我您对uiautomatorviewer 脚本所做的更改。 (我不想看到您认为自己遵循的说明。我想看到实际更改。)

标签: java android android-studio uiautomatorviewer


【解决方案1】:

这是我在 cmets 中要求的输出。

+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。正如我在 cmets 中提到的,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 获取文档。 (您需要以 root 身份运行 update-alternatives ...)

  • 您可以通过更改 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
  • 清单文件中指定的路径

路径的顺序可能很重要

整个类路径需要通过-classpath-cp 选项提供给java 命令。 (不是--class-path。)

最后删除 -jar $jarpath 并将其替换为完整的入口点类名。 (这是一个类名,而不是路径名。不要将点更改为斜杠、添加后缀或做任何类似的事情。完全按照清单文件给出的名称使用。)

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

【讨论】:

  • 是的,它对我有用。我只是在 Ubuntu 上切换到 java 版本 8 并且 uiautomator 工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多