Java 在ubuntu 20.04中运行uiautomatorviewer时出错
执行命令时显示以下错误: username@device:~/Android/Sdk/tools/bin$。/uiautomatorviewer Djava.ext.dirs=/home/username/Android/Sdk/tools/lib/x86\u 64:/home/username/Android/Sdk/tools/lib不受支持。改用-classpath。 错误:无法创建Java虚拟机。 错误:发生致命异常。程序将退出Java 在ubuntu 20.04中运行uiautomatorviewer时出错,java,android,android-studio,uiautomatorviewer,Java,Android,Android Studio,Uiautomatorviewer,执行命令时显示以下错误: username@device:~/Android/Sdk/tools/bin$。/uiautomatorviewer Djava.ext.dirs=/home/username/Android/Sdk/tools/lib/x86\u 64:/home/username/Android/Sdk/tools/lib不受支持。改用-classpath。 错误:无法创建Java虚拟机。 错误:发生致命异常。程序将退出 然后我在uiautomatorviewer文件中使用--
然后我在uiautomatorviewer文件中使用--class path,并遇到以下错误: 我使用此方法编辑uiautomatorviewer文件: 错误:无法初始化主类com.android.uiautomator.uiautomatorviewer,原因是:java.lang.noclassdeffounderror:org/eclipse/swt/widgets/control 我的变化: 原件: 当我得到上面的错误时,我回到了以前的状态 现在我又有了第一个问题。 外部信息: $JAVA_HOME=>/usr/lib/jvm/JAVA-8-openjdk-amd64 $ANDROID_HOME=>/HOME/username/ANDROID/Sdk
Android studio版本:4.1.3这是我在评论中要求的输出
+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启动器的actaul路径名。(不是$JAVA_HOME
)
其次,我们可以看到java-version
告诉我们它正在使用Java11.0.11。正如我在评论中提到的,Java9和更高版本不支持“ext.dirs”机制
不幸的是,java
命令关于使用-classpath
的建议不起作用(按原样)
所以我将给你们两种方法来解决这个问题:
解决方案1:只需使用Java8。
您需要确保已安装Java 8,并且运行Java-version
打印出版本号为8.0.xxx
,其中xxx
是(理想情况下)最新可用的Java 8修补程序版本
由于您使用的是Ubuntu 20.04,有两种方法可以确保您使用的是Java8而不是Java11
- 您可以使用“备选方案”系统使Java8成为全局默认Java版本。运行文档的
。(您需要以root用户身份运行manupdatealternatives
)更新备选方案
- 通过更改
环境变量,可以将Java 8设置为当前用户或当前shell的默认值PATH
-Djava.ext.dirs=…
转换为-classpath
选项是行不通的。这是因为exec
行正在使用-jar
选项,当使用-jar
时,将忽略-classpath
。但是-jar
意味着这是一个“可执行jar”,入口点类名来自jar文件的清单
所以我们需要解开这个
首先,我们需要知道(完整)入口点类名是什么,并且JAR文件正在设置自己的类路径。我们可以通过使用jar
命令提取META-INF/MANIFEST.MF
文件并查看它来确定
接下来,我们需要形成一个类路径,由
- 当前由
$frameworkdir
- 主JAR文件的路径(即,
)$jarpath
- 清单文件中指定的路径
-classpath
或-cp
选项提供给java
命令。(非——类路径
)
最后删除-jar$jarpath
,并用完整的入口点类名替换它。(它是一个类名,而不是路径名。不要将点更改为斜杠、添加后缀或执行类似操作。严格按照清单文件给出的名称使用名称。)
这种方法应该有效,但我无法测试它。如果失败,请在下面进行评论。您的问题不清楚。如果使用了
--class path
,Java命令将无法识别它。如果您像错误消息所说的那样使用了-classpath
。。。请准确地向我们展示您将uiautomatorviewer
脚本更改为什么。请注意,ext.dirs
机制直到Java 9才被删除,因此您是否真的使用Java 8来运行该程序值得怀疑。@StephenC Hi,谢谢您的时间。你的第二个评论是:我两个都用了,但都不起作用。我的主要问题是:Djava.ext.dirs=/home/username/Android/Sdk/tools/lib/x86_64:/home/username/Android/Sdk/tools/lib不受支持。改用-classpath。错误:无法创建Java虚拟机。错误:发生致命异常。程序将退出。我根据这个链接更改了文件:我能做些什么来解决这个问题呢?解决方案是要么真正使用Java 8,要么使用-classpath
。。。正确地除非你提供我要求的信息,否则我无法进一步帮助你。请按问题提供信息。不是评论。你还没有按照我的要求做。请向我显示您对uiautomatorviewer
脚本所做的更改。(我不想看到您认为您遵循的说明。我想看到实际的更改。)