SDKmanager突然无法启动
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDKmanager突然无法启动相关的知识,希望对你有一定的参考价值。
本来一直可以正常运行的,期间比较“大”的两个操作,一个是想下载4.0之前的API用了下兼容模式启动,最后下载失败。另一个是下载了一个模拟HTTP的软件,这个软件有点问题,下载了就给我绑定2345主页,后来用杀毒软件解决了。一开始说是无法启动adb,丢失'nul',对于这个我也试了无数次失败,后来想删SDK重装结果连SDKmanager都打不开了,甚是无奈。JAVA环境应该是正常的。后来发现关键是Find_java.bat还有android.bat 都无法启动,命令模式下也显示找不到,具体的看接下来的图片吧,我自己也尝试了无数次,改android.bat代码啥的都试了,我后来发现一样的SDK拷贝在别人电脑上不用改就ok,难道真的要重装系统么。求哪位大神指教一下,多谢!
环境变量找不到了, 是不是文件移走了, 2227421573帮你远程; 以下为fei话!
分为五个步骤来完成Android开发环境的搭建。
第一步:安装JDK。
要下载Oracle公司的JDK可以百度“JDK”进入Oracle公司的JDK下载页面,选择自己电脑系统的对应版本即可。
第二步:配置Windows上JDK的变量环境 。
JAVA_HOME
先设置这个系统变量名称,变量值为JDK在电脑上的安装路径:C:\\Program Files\\Java\\jdk1.8.0_20。创建好后则可以利用%JAVA_HOME%作为JDK安装目录的统一引用路径。
Path
PATH属性已存在,可直接编辑,在原来变量后追加:;%JAVA_HOME%\\bin;%JAVA_HOME%\\jre\\bin 。
CLASSPATH
设置系统变量名为:CLASSPATH 变量值为:.;%JAVA_HOME%\\lib\\dt.jar;%JAVA_HOME%\\lib\\tools.jar 。
注意变量值字符串前面有一个"."表示当前目录,设置CLASSPATH 的目的,在于告诉Java执行环境,在哪些目录下可以找到所要执行的Java程序所需要的类或者包。
第三步: 下载安装Eclipse(已上传附件,电脑打开可下载) 。
Eclipse为Java应用程序及Android开发的IDE(集成开发环境)。Eclipse不需要安装,下载后把解压包解压后,剪切eclipse文件夹到你想安装的地方,打开时设置工作目录即可。
第四步:下载安装Android SDK 。
配置了JDK变量环境,安装好了Eclipse,这个时候如果只是开发普通的JAVA应用程序,那么Java的开发环境已经准备好了。要通过Eclipse来开发Android应用程序,那么需要下载Android SDK(Software Development Kit)和在Eclipse安装ADT插件,这个插件能让Eclipse和Android SDK关联起来。
第五步:为Eclipse安装ADT插件。
前面已经配置好了java的开发环境,安装了开发Android的IDE,下载安装了Android SDK,但是Eclipse还没有和Android SDK进行关联,也就是它们现在是互相独立的,就好比枪和子弹分开了。为了使得Android应用的创建,运行和调试更加方便快捷,Android的开发团队专门针对Eclipse IDE定制了一个插件:Android Development Tools(ADT)。
做 Android 开发就要下载 Android SDK,其中的 SDK Manager.exe 无法启动,一闪而过。
尝试重装 JDK、重新从官网下载 Android SDK、添加环境变量等等均无效。
而且,有些版本的没事,有些版本的就不行。下载的 android-sdk_r14 可以正常执行 SDK Manager.exe,但是 android-sdk_r18 就不能执行,闪了一下就退出了。
【问题所在】
SDK Manager.exe 通过调用 android-sdk-windows\tools\lib\find_java.bat 确认 java.exe 的路径。
启用 cmd.exe,命令行切换路径到 android-sdk-windows\tools\lib,执行 find_java.bat,看到输出:
C:\Windows\system32\java.exe
虽然该路径下存在 java.exe,但是这并不是 jre 的安装路径。估计是由于某些需要 java 的软件在安装时,将 java.exe、javaw.exe、javaws.exe 复制到了 c:\windows\system32 下,导致 SDK Manager.exe 调用了错误位置的 java.exe 所致。
【解决办法】
知道了问题所在,解决起来就很容易了,删掉 C:\Windows\system32\ 下的 java.exe、javaw.exe、javaws.exe 即可解决。不放心的话,可以进入 cmd 再切换路径执行 find_java.bat 检查一下,输出:C:\Program Files\Java\jre7\bin\java.exe 就没问题了。
突然无法通过VSCode启动配置运行Java [重复]
【中文标题】突然无法通过VSCode启动配置运行Java [重复]【英文标题】:Suddenly cannot run Java through VSCode launch configuration [duplicate] 【发布时间】:2021-04-09 06:08:08 【问题描述】:我正在使用 VSCode 开发容器来编写 Java 应用程序。我把它放了大约一个月,回来继续工作,现在我遇到了一些不熟悉的错误。
配置
这里我将提供我的 devcontainer 环境的相关配置文件。
我的 Dockerfile 如下:
FROM openjdk:16-slim-buster
# Install things
RUN apt-get update \
&& apt-get -y install --no-install-recommends apt-utils dialog 2>&1 \
#
# Verify git, process tools, lsb-release (common in install instructions for CLIs) installed
&& apt-get -y install curl git openssh-client vim less iproute2 procps lsb-release
# Install Maven CLI things
ARG MAVEN_VERSION=3.6.3
ARG MAVEN_SHA=c35a1803a6e70a126e80b2b3ae33eed961f83ed74d18fcd16909b2d44d7dada3203f1ffe726c17ef8dcca2dcaa9fca676987befeadc9b9f759967a8cb77181c0
RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
&& curl -fsSL -o /tmp/apache-maven.tar.gz https://archive.apache.org/dist/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz \
&& echo "$MAVEN_SHA /tmp/apache-maven.tar.gz" | sha512sum -c - \
&& tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
&& rm -f /tmp/apache-maven.tar.gz \
&& ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
ENV MAVEN_HOME /usr/share/maven
ENV MAVEN_CONFIG /root/.m2
# Allow for a consistant java home location for settings - image is changing over time
RUN if [ ! -d "/docker-java-home" ]; then ln -s "$JAVA_HOME" /docker-java-home; fi
我的开发者 JSON 在这里:
"name": "Java Development",
"dockerFile": "Dockerfile",
// Set *default* container specific settings.json values on container create.
"settings":
"terminal.integrated.shell.linux": "/bin/bash",
"java.home": "/docker-java-home"
,
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"vscjava.vscode-java-pack",
"redhat.vscode-xml"
]
问题
当我之前停止使用此应用程序时,一切编译和运行都很好,我能够通过 VSCode 启动我的配置进行测试。现在,我遇到了两个问题,我认为它们是相关的。首先,当我尝试使用启动配置运行我的应用程序时,它不起作用并且我收到了这个奇怪的错误:
所以我无法通过 VSCode 启动任何东西。接下来,我尝试了mvn package
,但我的测试失败并出现以下错误:
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Unable to load cache item
at com.insurexcel.poipoi.input.InputProcessorTest.setup(InputProcessorTest.java:34)
Caused by: java.lang.IllegalStateException: Unable to load cache item
at com.insurexcel.poipoi.input.InputProcessorTest.setup(InputProcessorTest.java:34)
Caused by: java.lang.ExceptionInInitializerError
at com.insurexcel.poipoi.input.InputProcessorTest.setup(InputProcessorTest.java:34)
Caused by: com.google.inject.internal.cglib.core.$CodeGenerationException: java.lang.reflect.InaccessibleObjectException-->Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @523fa30b
at com.insurexcel.poipoi.input.InputProcessorTest.setup(InputProcessorTest.java:34)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @523fa30b
at com.insurexcel.poipoi.input.InputProcessorTest.setup(InputProcessorTest.java:34)
所以它看起来与一些反射有关。我正在使用 GSON 和 Guice,这是pom.xml
的相关部分:
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.inject/guice -->
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.2.3</version>
</dependency>
我尝试将 Guice 更新为 5.0.0-BETA-1
并修复了测试中的错误并成功编译。但是,现在我在进行一些序列化时遇到运行时错误。以下是错误的样子:
Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make field private java.lang.String java.lang.Throwable.detailMessage accessible: module java.base does not "opens java.lang" to unnamed module @523fa30b
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:177)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:171)
at com.google.gson.internal.reflect.UnsafeReflectionAccessor.makeAccessible(UnsafeReflectionAccessor.java:44)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:159)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
at com.google.gson.Gson.getAdapter(Gson.java:458)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
at com.google.gson.Gson.getAdapter(Gson.java:458)
at com.google.gson.Gson.toJson(Gson.java:696)
at com.google.gson.Gson.toJson(Gson.java:683)
at com.google.gson.Gson.toJson(Gson.java:638)
at com.google.gson.Gson.toJson(Gson.java:618)
...
显然它与 GSON 有关。似乎无法访问私有字段?我尝试序列化的对象如下所示:
public class MapContainer
private MyMapObject map;
private String status;
private Exception errorInformation;
public MapContainer(MyMapObject map)
this.map = map;
this.status = "okay";
this.errorInformation = null;
public MapContainer(Exception error)
this.map = null;
this.status = "error";
this.errorInformation = error;
...
getters and setters
...
根据错误,我的对象中的异常字段似乎很难处理。我已经查看了所有内容,但无法真正找到可能发生这种情况的充分理由。我检查了正在运行它的 Docker 映像,它似乎最近已更新。我在容器中的java --version
返回这个:
openjdk 16-ea 2021-03-16
OpenJDK Runtime Environment (build 16-ea+30-2130)
OpenJDK 64-Bit Server VM (build 16-ea+30-2130, mixed mode, sharing)
如果有人能提供任何线索或想法来说明这可能来自哪里,我将不胜感激!
【问题讨论】:
除非您知道自己在做什么,否则不应使用 EA 版本的 java。现在使用 java 15 或使用 java 11 直到 java 17 出来。 【参考方案1】:问题是 Gson 试图使用反射来访问 java.lang
模块中某个类的私有字段。
在 Java 9 之前的日子里,这很好。在 Java 9 中,这可能会引发异常。
快速而肮脏的解决方法是在java
命令行中使用-add-opens
选项。有关详细信息,请参阅第一个参考。
另一种选择是实现自定义对象映射器来序列化/反序列化触发此操作的 JDK 类(或多个类)。应用程序的序列化/反序列化依赖于 JDK 类的私有字段的详细信息有点狡猾。它们可能会发生变化,导致您的应用程序在没有警告的情况下中断。
(我的猜测是这是由errorInformation
字段引起的......)
有关这些选项的更多信息,请参阅:
How to solve InaccessibleObjectException ("Unable to make member accessible: module A does not 'opens package' to B") on Java 9? Gson Advanced — Custom Serialization for Simplification我检查了运行它的 Docker 映像,它似乎最近已更新。
是的。看起来您现在正在使用新的 Java 16 EA 版本。我不确定这是可取的。让你的 docker 镜像在你的脚下更新当然是不可取的。您应该针对 Java 的特定目标(主要)版本进行开发。
更新
但是,由于容器中的 Java 版本更改,这个问题“突然”开始发生,之前的版本必须是 Java 8 或更早版本。
在查看 OpenJDK 站点上的 Java 16 page 时,我看到它正在实现 JEP 396: Strongly Encapsulate JDK Internals by Default,这将具有阻止 Gson 干扰私有字段访问的效果。如果您阅读 JEP,可能还有其他解决方法。
【讨论】:
这是一个很好的例子,说明如果您不调查从 JVM 获得的堆栈跟踪的根本原因,您最终可以做多少工作。 感谢这个非常有帮助的答案!我所要做的就是使用 Java 15 而不是 16,现在一切都按预期工作了。 好吧……这很令人惊讶,但我明白为什么。查看我的更新。以上是关于SDKmanager突然无法启动的主要内容,如果未能解决你的问题,请参考以下文章