Java 9에서 sdkmanager –list를 실행하지 못했습니다. ) 여기 sdk-tools-darwin-3859397.zipGoogle의

다음을 다운로드하여 설치했습니다.

  • jdk-9.0.1_osx-x64_bin.dmgOracle의 JDK ( ) 여기
  • sdk-tools-darwin-3859397.zipGoogle의 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로 돌아 가지 않고 수정하는 방법을 알고 있습니까?

관련 질문



답변

이 답변 의 도움 으로 문제를 성공적으로 해결했습니다.

에 수정 사항을 적용 할 것입니다 sdkmanager. 쉘 스크립트입니다. 그것은에 위치한 $android_sdk/tools/bin경우, $android_sdk당신은 안드로이드 SDK의 압축을 푼 곳입니다.

  1. sdkmanager좋아하는 편집기에서 엽니 다 .
  2. DEFAULT_JVM_OPTS변수 를 설정하는 줄을 찾습니다 . 내 사본에서는 31 행에 있습니다.

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
    
  3. 변수에 다음 옵션을 추가합니다 -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee.. 따옴표에주의하십시오. 내 사본에서 줄은 다음과 같습니다.

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
    
  4. 파일을 저장하고 편집기를 종료하십시오.
  5. 명령을 다시 실행하십시오.

결과는 다음과 같습니다.

$ 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 업데이트를 기다리세요 .

참조 : JDK 11 : Java EE 모듈의 끝