다음을 다운로드하여 설치했습니다.
jdk-9.0.1_osx-x64_bin.dmg
Oracle의 JDK ( ) 여기sdk-tools-darwin-3859397.zip
Google의 Android SDK ( )는 여기 .
PATH
변수를 구성한 후 SDK 구성 요소 관리 명령을 sdkmanager
대체하는을 실행 해 보았습니다 android
. 그러나 다음과 같이 실패했습니다.
$ sdkmanager --list
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:117)
at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:93)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
... 5 more
다음은 Java 버전입니다.
$ java -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
누구든지 Java 8로 돌아 가지 않고 수정하는 방법을 알고 있습니까?
관련 질문
- android-sdk를 설치하지 못했습니다.
- 이 게시물은 비슷한 질문을했습니다. 그러나 게시물이 닫히고 유일한 대답은 Java 8로 돌아가는 것이 좋습니다.
답변
이 답변 의 도움 으로 문제를 성공적으로 해결했습니다.
에 수정 사항을 적용 할 것입니다 sdkmanager
. 쉘 스크립트입니다. 그것은에 위치한 $android_sdk/tools/bin
경우, $android_sdk
당신은 안드로이드 SDK의 압축을 푼 곳입니다.
sdkmanager
좋아하는 편집기에서 엽니 다 .-
DEFAULT_JVM_OPTS
변수 를 설정하는 줄을 찾습니다 . 내 사본에서는 31 행에 있습니다.DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
-
변수에 다음 옵션을 추가합니다
-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
.. 따옴표에주의하십시오. 내 사본에서 줄은 다음과 같습니다.DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
- 파일을 저장하고 편집기를 종료하십시오.
- 명령을 다시 실행하십시오.
결과는 다음과 같습니다.
$ sdkmanager --list
Installed packages:
Path | Version | Description | Location
------- | ------- | ------- | -------
tools | 26.0.1 | Android SDK Tools 26.0.1 | tools/
Available Packages:
Path | Version | Description
------- | ------- | -------
add-ons;addon-g..._apis-google-15 | 3 | Google APIs
add-ons;addon-g..._apis-google-16 | 4 | Google APIs
add-ons;addon-g..._apis-google-17 | 4 | Google APIs
add-ons;addon-g..._apis-google-18 | 4 | Google APIs
add-ons;addon-g..._apis-google-19 | 20 | Google APIs
add-ons;addon-g..._apis-google-21 | 1 | Google APIs
add-ons;addon-g..._apis-google-22 | 1 | Google APIs
add-ons;addon-g..._apis-google-23 | 1 | Google APIs
add-ons;addon-g..._apis-google-24 | 1 | Google APIs
...
안녕! 효과가있다!
-편집 : 2017-11-07-
당신이 실행 한 후 위에서 다시 수정 프로그램을 적용해야 할 수도주십시오 참고 sdkmanager --update
이후, sdkmanager
경우 쉘 스크립트가 오버라이드 (override) 할 수있다 tools
패키지가 업데이트됩니다.
관련 답변
- https://stackoverflow.com/a/43574427/142239
- @ andy-guibert는이 작업을 수행하는 데 필요한 옵션을 지적했습니다. 그는 또한 그 신비한 옵션이 의미하는 바를 간략하게 설명합니다.
답변
SDKMANAGER_OPTS를 사용하여 sdkmanager 옵션을 설정할 수 있습니다.
예:
export SDKMANAGER_OPTS="--add-modules java.se.ee"
sdkmanager --list
답변
허용되는 답변은 2019 년 2 월 현재 구식입니다. 다음sdkmanager
은 최신 버전의 Java로 마이그레이션 할 때까지 작동 하는 답변 입니다 . 그러나 그때까지는 더 이상이 문제가 발생하지 않을 것입니다.
오픈 JDK (10)은 오픈 JDK (11)에 의해 superseeded했다 구현하지 않습니다,
java.se.ee
전혀 . 이것은 추가하는 해킹이--add-modules java.se.ee
더 이상 아무 일도하지 않는다는 것을 의미합니다 . 또한 업데이트가 올바르게 구성된 경우 OpenJDK 10이 시스템에서 자동으로 제거되고 다음에 업데이트 할 때 OpenJDK 11로 대체됨을 의미합니다.Java 8 설치 내부 를
sdkmanager
설정하여 Java 8을 사용하도록 수정하십시오 . 기본적으로 .JAVA_HOME
sdkmanager
~/Android/Sdk/tools/bin/sdkmanager
# Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options $ JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions'
@rem Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options to this script. set JAVA_HOME="C:\ProgramData\scoop\apps\android-studio\current\jre" set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."
이렇게하면 시스템에서 정상적이고 유지 관리 된 Java 버전을 계속 사용하는 동시에
sdkmanager
.
# Java export JAVA_HOME=/usr/lib/jvm/default-java
이제 수리 할 파이프 라인 이 몇 개 있습니다.
답변
시스템에 Java 11이있는 경우 제공된 솔루션이 유효하지 않습니다.
이 -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or
–add-modules java.xml.bind는 Mac OS의 Java 11에서 작동하지 않습니다.
따라서 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 에서 Java 버전을 버전 8로 다운 그레이드해야합니다 .
설치된 Java 버전 나열
/usr/libexec/java_home -V
자바 11
export JAVA_HOME=$(/usr/libexec/java_home -v 11)
자바 1.8
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
그런 다음
cd ~/Library/Android/sdk/tools/bin
과
./sdkmanager --licenses
답변
Windows의 경우 아무것도 작동하지 않으면 다음을 시도하십시오.
-
여
sdkmanager.bat
메모장. -
다음 줄을 찾습니다.
%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS%
-
더하다
--add-modules java.xml.bind
수정 된 줄은 다음과 같아야합니다.
%JAVA_EXE%" %DEFAULT_JVM_OPTS% --add-modules java.xml.bind %JAVA_OPTS% %SDKMANAGER_OPTS%
답변
2019-10 업데이트 :
으로 이슈 트래커에 언급 , 구글은 새로운 SDK 도구에서 일하고있다는 현재의 JVM (9 +)에 그 실행을 해제!
Android Studio 내 에서 새로운 Android SDK 명령 줄 도구 (1.0.0) 를 다운로드하고 사용 하거나 Google 서버에서 수동으로 다운로드 할 수 있습니다.
최신 버전은 repository.xml 내의 URL을 확인하십시오 .
명령 줄 도구의 압축을 수동으로 풀려면 해당 도구를 내부의 하위 폴더 $ANDROID_HOME
(예 :)에 배치해야합니다 $ANDROID_HOME/cmdline-tools/...
.
답변
이전 주석에서 읽은 것처럼 현재 SDK 버전이 최신 Java 버전 인 9 및 10과 호환되지 않기 때문에이 오류가 발생합니다.
따라서이 문제를 해결하기 위해 Java 버전을 Java 8로 다운 그레이드하거나 해결 방법으로 터미널에서 다음 옵션을 내보낼 수 있습니다.
리눅스 :
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
Windows :
set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
이 오류를 해결합니다. sdkmanager
그리고 그것은 당신이 리눅스에 프로필 파일에서 JAVA_OPTS을 수출 (수 영구적으로 저장 만들려면 .zshrc
, .bashrc
등) 또는 Windows에 영구적으로 환경 변수로 추가 할 수 있습니다.
추신. 이것은 Java EE 모듈이없는 Java 11+에서는 작동하지 않습니다. 이 옵션이 좋은 생각이라면 Java 버전을 다운 그레이드하거나 Flutter 업데이트를 기다리세요 .