Java 9에서 sdkmanager --list를 실행하지 못했습니다.


96

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

  • 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로 돌아 가지 않고 수정하는 방법을 알고 있습니까?

관련 질문


1
그냥 궁금해 :이 작업의 목적은 무엇입니까?
GhostCat

2
Java 9의 새로운 기능을 시도하면서 동시에 Android 앱을 개발하고 시스템에 하나의 JDK 만 있으면됩니다.
Siu Ching Pong -Asuka Kenji- 2017

연결된 답변은 Android SDK에만 국한되지 않습니다. 편집 할 스크립트와 편집 할 위치를 지정하지 않았습니다. 모든 사람이 셸 스크립트를 아는 것은 아니며 아는 사람이라도 문제를 빠르게 해결하는 데 도움이됩니다. 간단한 구성 문제를 해결하기 위해 사용자가 작성하지 않은 스크립트를 읽고 싶습니까? 작업 솔루션이 이미 누군가에 의해 테스트되고 있습니까?
Siu Ching Pong -Asuka Kenji- 2017

2
그 메모에서 나는 댓글이 지적했듯이 stackoverflow.com/questions/46402772/… 를 다시 열기로 투표 했습니다.
나만

stackoverflow.com/q/46402772/142239 가 다시 열릴 때까지 이것을 삭제하지 말고 거기에 내 대답을 복사합니다. 내 StackOverflow 게시물의 백업이 없습니다. 감사!
Siu Ching Pong -Asuka Kenji- 2017

답변:


159

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

에 수정 사항을 적용 할 것입니다 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는이 작업을 수행하는 데 필요한 옵션을 지적했습니다. 그는 또한 그 신비한 옵션이 의미하는 바를 간략하게 설명합니다.

1
JDK 9 마이그레이션 가이드에 명시된대로 --add-modules java.se.ee임시 해결 방법으로 간주해야합니다. 제안은 자바 SE에서 java.xml.bind 모듈을 삭제하고 JDK는 여기 초안 형태 : bugs.openjdk.java.net/browse/JDK-8189188
앨런 베이트먼

11
SDK 소스 파일을 패치하는 대신 단순히 JAVA_OPTS환경 변수 를 내 보내지 않는 이유는 무엇 export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'입니까?
Rafa

7
FWIW, 저는 오늘 Windows 10에 JDK 및 Android SDK 도구를 모두 다운로드하여 설치했으며 set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee, com.android.sdklib.tool.SdkManagerCli클래스가 올바르게 실행되도록 라인을 설정 해야했습니다
RJ Cuthbertson

2
시스템에 자바 (11)을 가진 경우,이 솔루션은 @SherylHohman이 하나와 결합되어야 제안 된 것으로, 자바 (11)은 목록에서 "숨겨진는"이 작업 할 수 있어야합니다
알레한드로 모야

5
-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee또는`--add-modules java.xml.bind는 Mac OS의 Java 11에서 작동하지 않습니다. 다른 버전의 Java를 설치하지 않고 어떻게 수정할 수 있습니까?
Manish

37

SDKMANAGER_OPTS를 사용하여 sdkmanager 옵션을 설정할 수 있습니다.

예:

export SDKMANAGER_OPTS="--add-modules java.se.ee"
sdkmanager --list

4
Windows에서는 따옴표를 생략해야합니다.set SDKMANAGER_OPTS=--add-modules java.se.ee
Amfasis

20
java.se.ee가 더 이상 존재하지 않습니다.
Oscar

2
이 답변은 구식입니다. 누군가이 문제를 수정하십시오
Developerium

25

허용되는 답변은 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 설치에 I 일시적으로 설정 JAVA_HOME 최고 지점으로 : C : \ 프로그램 파일 \ 안드로이드 \ 안드로이드 스튜디오 \ JRE
clzola

3
set JAVA_HOME="...\android-studio\current\jre"다른 모든 답변은 지원하지 않았지만 Windows 10에서는 도움이됩니다.
NearHuscarl

set JAVA_HOME="C:\Program Files\Android\Android Studio\jre"Windows 10에서 저와 함께 일했습니다. Android Studio 경로를 찾으십시오. 원래 JAVA_HOME에 Java 11을 설정했습니다
notes-jj

작동하지 않습니다. Java 8은 Debian 안정 버전 (1½ 년) 이상에 더 이상 존재하지 않습니다.
mirabilos

20

시스템에 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

1
이 작업을 수행했는데 여전히 오류가 발생합니다. etc ... 스레드 "main"java.lang.NoClassDefFoundError : javax / xml / bind / annotation / XmlSchema .. Java 12.0.1을 사용하고 있습니다.
james emanon

@jamesemanon은 변경 사항을 적용하기 위해 다시 시작할 수 있습니다. 나는 단서가 없습니다.
thodwris

1
bash: /usr/libexec/java_home: file not found내 설치시.
Eugene Gr. Philippov

13

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%


3
Windows 10에서 나를 위해 일했습니다.
AntonB

11

2019-10 업데이트 :

으로 이슈 트래커에 언급 , 구글은 새로운 SDK 도구에서 일하고있다는 현재의 JVM (9 +)에 그 실행을 해제!

Android Studio 내 에서 새로운 Android SDK 명령 줄 도구 (1.0.0) 를 다운로드하고 사용 하거나 Google 서버에서 수동으로 다운로드 할 수 있습니다.

최신 버전은 repository.xml 내의 URL을 확인하십시오 .

명령 줄 도구의 압축을 수동으로 풀려면 해당 도구를 내부의 하위 폴더 $ANDROID_HOME(예 :)에 배치해야합니다 $ANDROID_HOME/cmdline-tools/....


1
명령 줄 도구 2.1 (최신)도 Java 11에서 이와 같이 실패합니다.
mirabilos

10

이전 주석에서 읽은 것처럼 현재 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 모듈의 끝


12
내가 이것을 시도하면, im 또 다른 오류가 발생합니다. 부팅 계층 java.lang.module.FindException : 모듈 java.se.ee를 초기화하는 동안 오류가 발생했습니다. 찾을 수 없음
Sherin Binu

@SherinBinu 어떤 Java 버전을 사용하고 있습니까?
valdeci

1
--add-modules java.xml.bind대신 사용하십시오--add-modules java.se.ee
valdeci

@valdeci 실제로 작동했습니다! 정말 고맙습니다!
Apoorv Goyal

8

일부 사람들이 전에 언급했듯이 이것은 하나의 Java 설치가 다른 것보다 우선하는 것과 관련된 더 간단한 문제가 될 수 있습니다.

제 경우에는 Java 8이 기본 최신 Java로 가려졌습니다.

Java 8을 설치했습니다.

sudo apt-get install openjdk-8-jdk

그런 다음 설치된 Java를 새 기본값으로 업데이트했습니다.

sudo update-alternatives --config java

그래서 Java 8의 ID 번호를 선택했습니다.

이 (매우 간단한) 단계를 수행 한 후 오류없이 sdkmanager를 실행할 수 있습니다.

이것이 누군가를 돕기를 바랍니다!


작동하지 않습니다. Java 8은 Debian 안정 버전 (1½ 년) 이상에 더 이상 존재하지 않습니다.
mirabilos


5

이 솔루션을 찾는 데 어려움을 겪었습니다.

@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  sdkmanager startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%..

@rem Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."


@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:init
@rem Get command-line arguments, handling Windows variants

if not "%OS%" == "Windows_NT" goto win9xME_args

:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2

:win9xME_args_slurp
if "x%~1" == "x" goto execute

set CMD_LINE_ARGS=%*

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar;%APP_HOME%\lib\layoutlib-api-25.3.1.jar;%APP_HOME%\lib\dvlib-25.3.1.jar;%APP_HOME%\lib\repository-25.3.1.jar;%APP_HOME%\lib\gson-2.2.4.jar;%APP_HOME%\lib\commons-compress-1.8.1.jar;%APP_HOME%\lib\httpclient-4.1.1.jar;%APP_HOME%\lib\httpmime-4.1.jar;%APP_HOME%\lib\common-25.3.1.jar;%APP_HOME%\lib\kxml2-2.3.0.jar;%APP_HOME%\lib\annotations-25.3.1.jar;%APP_HOME%\lib\annotations-12.0.jar;%APP_HOME%\lib\jimfs-1.1.jar;%APP_HOME%\lib\httpcore-4.1.jar;%APP_HOME%\lib\commons-logging-1.1.1.jar;%APP_HOME%\lib\commons-codec-1.4.jar;%APP_HOME%\lib\guava-18.0.jar

@rem Execute sdkmanager
"%JAVA_EXE%" %DEFAULT_JVM_OPTS%  -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee  %JAVA_OPTS% %SDKMANAGER_OPTS%  -classpath "%CLASSPATH%" com.android.sdklib.tool.SdkManagerCli %CMD_LINE_ARGS%

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable SDKMANAGER_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if  not "" == "%SDKMANAGER_EXIT_CONSOLE%" exit 1
exit /b 1

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega

이 코드 조각에는 하드 코딩 된 버전이 포함되어 있기 때문에 새 버전의 SDK가 나올 때 작동이 중지되기 때문에 실행 가능한 옵션이 아닙니다.set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar
izogfif

4

편집 된 sdkmanager.bat 파일을 사용하여 Android Studio 자체에 포함 된 Java를 사용하도록하여 문제를 해결할 수있었습니다.이 파일은 OpenJDK 8을 사용한다고 가정합니다. 다음은 내가 사용한 편집 된 sdkmanager입니다.

@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  sdkmanager startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%..

@rem Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."

@rem find Java from Android Studio
@rem Find java.exe
if defined ANDROID_STUDIO_JAVA_HOME goto findJavaFromAndroidStudioJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init

goto findJavaNormally

:findJavaFromAndroidStudioJavaHome
set JAVA_HOME=%ANDROID_STUDIO_JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init

goto findJavaNormally




@rem java from java home
@rem Find java.exe
:findJavaNormally
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init

goto javaError

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init

goto javaDirectoryError



:javaError
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:javaDirectoryError
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail


:init
@rem Get command-line arguments, handling Windows variants

if not "%OS%" == "Windows_NT" goto win9xME_args

:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2

:win9xME_args_slurp
if "x%~1" == "x" goto execute

set CMD_LINE_ARGS=%*

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\lib\dvlib-26.0.0-dev.jar;%APP_HOME%\lib\jimfs-1.1.jar;%APP_HOME%\lib\jsr305-1.3.9.jar;%APP_HOME%\lib\repository-26.0.0-dev.jar;%APP_HOME%\lib\j2objc-annotations-1.1.jar;%APP_HOME%\lib\layoutlib-api-26.0.0-dev.jar;%APP_HOME%\lib\gson-2.3.jar;%APP_HOME%\lib\httpcore-4.2.5.jar;%APP_HOME%\lib\commons-logging-1.1.1.jar;%APP_HOME%\lib\commons-compress-1.12.jar;%APP_HOME%\lib\annotations-26.0.0-dev.jar;%APP_HOME%\lib\error_prone_annotations-2.0.18.jar;%APP_HOME%\lib\animal-sniffer-annotations-1.14.jar;%APP_HOME%\lib\httpclient-4.2.6.jar;%APP_HOME%\lib\commons-codec-1.6.jar;%APP_HOME%\lib\common-26.0.0-dev.jar;%APP_HOME%\lib\kxml2-2.3.0.jar;%APP_HOME%\lib\httpmime-4.1.jar;%APP_HOME%\lib\annotations-12.0.jar;%APP_HOME%\lib\sdklib-26.0.0-dev.jar;%APP_HOME%\lib\guava-22.0.jar

@rem Execute sdkmanager
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS%  -classpath "%CLASSPATH%" com.android.sdklib.tool.sdkmanager.SdkManagerCli %CMD_LINE_ARGS%

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable SDKMANAGER_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if  not "" == "%SDKMANAGER_EXIT_CONSOLE%" exit 1
exit /b 1

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega

여기에서는 실제로 Android 스튜디오에 포함 된 JRE를 가리키는 ANDROID_STUDIO_JAVA_HOME 환경 변수를 사용했습니다. 예 : ../android_studio/jre

ANDROID_STUDIO_JAVA_HOME이 설정되지 않은 경우 JAVA_HOME으로 대체됩니다.


3

이것은 Ubuntu 18.04에서 내가 한 일입니다 (모든 Linux가 할 것입니다).

$ sudo apt-get install openjdk-8-jdk

$ sudo update-alternatives --config java
There are 2 choices for the alternative javac (providing /usr/bin/javac).

  Selection    Path                                          Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      manual mode
* 2            /usr/lib/jvm/java-8-openjdk-amd64/bin/javac    1081      manual mode

Press <enter> to keep the current choice[*], or type selection number: 2

$ export JAVA_HOME=$(/usr/lib/jvm/java-1.8.0-openjdk-amd64)

작동하지 않습니다. Java 8은 Debian 안정 버전 (1½ 년) 이상에 더 이상 존재하지 않습니다.
mirabilos

2

최신 버전으로 업그레이드하기 전에 android sdk 도구가있는 openJDK 11에 대한 위의 짧은 추가 사항입니다.

위의 솔루션이 저에게 효과적이지 않았습니다.

set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."

이 작업을 수행하기 위해 maven repo에서 jaxb-ri (참조 구현)를 설치했습니다.

이 정보는 주어진 https://github.com/javaee/jaxb-v2 받는 링크를 https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/2.3.2/jaxb -ri-2.3.2.zip
이 다운로드에는 mod-Folder의 독립 실행 형 런타임 구현이 포함되어 있습니다.

mod-Folder를 $ android_sdk \ tools \ lib \에 복사하고 다음을 classpath 변수에 추가했습니다.

; % APP_HOME % \ lib \ mod \ jakarta.xml.bind-api.jar; % APP_HOME % \ lib \ mod \ jakarta.activation-api.jar; % APP_HOME % \ lib \ mod \ jaxb-runtime.jar; % APP_HOME % \ lib \ mod \ istack-commons-runtime.jar;

그래서 마침내 다음과 같이 보입니다.

set CLASSPATH=%APP_HOME%\lib\dvlib-26.0.0-dev.jar;%APP_HOME%\lib\jimfs-1.1.jar;%APP_HOME%\lib\jsr305-1.3.9.jar;%APP_HOME%\lib\repository-26.0.0-dev.jar;%APP_HOME%\lib\j2objc-annotations-1.1.jar;%APP_HOME%\lib\layoutlib-api-26.0.0-dev.jar;%APP_HOME%\lib\gson-2.3.jar;%APP_HOME%\lib\httpcore-4.2.5.jar;%APP_HOME%\lib\commons-logging-1.1.1.jar;%APP_HOME%\lib\commons-compress-1.12.jar;%APP_HOME%\lib\annotations-26.0.0-dev.jar;%APP_HOME%\lib\error_prone_annotations-2.0.18.jar;%APP_HOME%\lib\animal-sniffer-annotations-1.14.jar;%APP_HOME%\lib\httpclient-4.2.6.jar;%APP_HOME%\lib\commons-codec-1.6.jar;%APP_HOME%\lib\common-26.0.0-dev.jar;%APP_HOME%\lib\kxml2-2.3.0.jar;%APP_HOME%\lib\httpmime-4.1.jar;%APP_HOME%\lib\annotations-12.0.jar;%APP_HOME%\lib\sdklib-26.0.0-dev.jar;%APP_HOME%\lib\guava-22.0.jar;%APP_HOME%\lib\mod\jakarta.xml.bind-api.jar;%APP_HOME%\lib\mod\jakarta.activation-api.jar;%APP_HOME%\lib\mod\jaxb-runtime.jar;%APP_HOME%\lib\mod\istack-commons-runtime.jar;

사소한 오류가 나타나서 lib를 놓쳤을 수도 있습니다. 그러나 sdkmanager.bat --update 또는 --list가 현재 실행 중입니다.


2

전체 JAXB API가 제거되었으므로 Java 11 이상에서이 작업을 수행 할 수있는 대답입니다.

Jakarta XML Binding , 특히이 zip 파일을 다운로드 합니다. mod 폴더 내에 3 개의 파일, 즉 jakarta.activation.jar, jakarta.xml.bind-api.jar 및 jakarta.xml.bind-api.jar 만 필요하며 나머지는 버릴 수 있습니다.

이 파일을 APP_HOME / lib 폴더로 이동하십시오. 이를 위해 jaxb 하위 폴더를 만들었습니다 . 따라서 내 macOS 시스템에서는 $ HOME / Library / Android / sdk / tools / lib / jaxb입니다.

이제 좋아하는 텍스트 편집기를 사용하여 sdkmanager를 열고 CLASSPATH = 아래에 처음에 다음을 추가하십시오.

$APP_HOME/lib/jaxb/jakarta.activation.jar:$APP_HOME/lib/jaxb/jakarta.xml.bind-api.jar:$APP_HOME/lib/jaxb/jaxb-impl.jar

그래서 결과는 다음과 같습니다.

CLASSPATH=$APP_HOME/lib/jaxb/jakarta.activation.jar:$APP_HOME/lib/jaxb/jakarta.xml.bind-api.jar:$APP_HOME/lib/jaxb/jaxb-impl.jar:$APP_HOME/lib/dvlib-26.0.0-dev.jar:$APP_HOME/lib/jimfs-1.1.jar:$APP_HOME/lib/jsr305-1.3.9.jar:$APP_HOME/lib/repository-26.0.0-dev.jar:$APP_HOME/lib/j2objc-annotations-1.1.jar:$APP_HOME/lib/layoutlib-api-26.0.0-dev.jar:$APP_HOME/lib/gson-2.3.jar:$APP_HOME/lib/httpcore-4.2.5.jar:$APP_HOME/lib/commons-logging-1.1.1.jar:$APP_HOME/lib/commons-compress-1.12.jar:$APP_HOME/lib/annotations-26.0.0-dev.jar:$APP_HOME/lib/error_prone_annotations-2.0.18.jar:$APP_HOME/lib/animal-sniffer-annotations-1.14.jar:$APP_HOME/lib/httpclient-4.2.6.jar:$APP_HOME/lib/commons-codec-1.6.jar:$APP_HOME/lib/common-26.0.0-dev.jar:$APP_HOME/lib/kxml2-2.3.0.jar:$APP_HOME/lib/httpmime-4.1.jar:$APP_HOME/lib/annotations-12.0.jar:$APP_HOME/lib/sdklib-26.0.0-dev.jar:$APP_HOME/lib/guava-22.0.jar

그리고 그것은 거의 문제를 해결해야합니다.

나는 flutter doctor --android-licenses문제를 주었기 때문에 이러한 단계를 수행 했습니다. 그리고 이것은 그것을 고쳤습니다.


1

나를 위해 작동하는 유일한 솔루션은 Android 스튜디오와 함께 제공되는 Java를 사용하는 것입니다.

JAVA_HOME을 /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home

.bashrc

set JAVA_HOME="/Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home"

fishshel 을 사용하는 경우 이것을 넣으십시오.~/.config/fish/config.fish

set -gx JAVA_HOME /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home

(이것은 Mac 용이지만 올바른 경로를 설정하여 Linux 및 Windows에서 작동해야한다고 확신합니다)


이는 Oracle에서 Java의 원본 / 비 OpenJDK 버전을 사용하려는 다른 응용 프로그램을 방해 할 수 있습니다. OpenJDK는 능력 이상이지만 일부는 다른 것도 필요할 수 있습니다.
Jemsheer KD

1

JDK 13.0.1, Android SDK 29, Windows 10

기본적으로 나는 모든 것을 시도했지만 가장 효과적이고 유일한 해결책은 jdk 1.8로 다운 그레이드하는 것입니다. 이유는 모르겠습니다. 2020 년 초이며 최신 flutter 버전에 대해 1 년 된 jdk 버전으로 다운 그레이드해야합니다. Windows 버전에 문제가있을 수 있으므로 jdk 13.0.1이 macOS 10.15.2에서 저에게 효과적이었습니다. 이 솔루션이 작동하기를 바랍니다.

다운로드 링크 (JDK 1.8.0) : https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html


Java 8은 2014 년 3 월에 출시되었습니다. 따라서 1 년이 조금
넘었습니다

예 ..하지만 Oracle 정책은 Java 8 ..... 이후로 변경되었습니다. 더 이상 조직에 무료가 아닙니다. 따라서 모든 사람은 Java8
Kedar Sukerkar

문제는 최신 자바 런타임 (9+)에는 javax 라이브러리가 없으며 애플리케이션과 함께 제공해야한다는 것입니다. 따라서 Java 8 및 이전에 실행될 것으로 예상되는 소프트웨어는 이러한 라이브러리를 제공하지 않으므로 9+에서 작동하지 않습니다. 그 이유는 표준 JDK를 완전 오픈 소스로 만드는 것입니다 (이 라이브러리는 GPL이 아닙니다). 따라서 라이선스 조건이 개선되었다고 말하고 싶습니다.
pqnet

1

.bashrc 또는 .zshrc에 다른 JDK 버전의 홈 디렉토리를 정의하십시오.

export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_14_HOME=$(/usr/libexec/java_home -v14)

우선 JDK 버전 8을 사용 sdkmanager하십시오. 다음 줄을 파일 맨 위에 놓으십시오 .

export JAVA_HOME=$JAVA_8_HOME

JDK 버전 14로 다시 전환하십시오. 다음 줄을 sdkmanager파일 맨 아래에 넣으십시오 .

export JAVA_HOME=$JAVA_14_HOME

작동하지 않습니다. Java 8은 Debian 안정 버전 (1½ 년) 이상에 더 이상 존재하지 않습니다.
mirabilos

1

(윈도우)

Android Studio를 이미 설치 한 경우 File>> Project Structure...>> SDK 위치로 이동하십시오.

해당 위치로 이동 + \cmdline-tools\latest\bin 경로 복사Environment Variables

명령 줄 도구를 사용하는 것이 좋습니다.


0

https://adoptopenjdk.net은 현재 버전 8부터 모든 JDK 배포를 지원합니다. 예를 들면 https://adoptopenjdk.net/releases.html#x64_win

다음은 sdkmanager 등에서 JDK 버전 8을 사용하는 방법의 예입니다. https://travis-ci.com/mmcc007/screenshots/builds/109365628

JDK 9 (그리고 10 개, 아마도 11 개는 아니지만 12 개 이상은 아님)의 경우 sdkmanager가 작동하도록하려면 다음을 수행해야합니다.

export SDKMANAGER_OPTS="--add-modules java.se.ee"
sdkmanager --list

1
SDK 12에서 이것을 수정하는 방법에 대한 아이디어가 있습니까?
Richie

@Richie이 문제를 해결 했나요? 저도 Java 12를 가지고 있고이 문제를 겪고 있으며 여기에 게시 된 내용이 도움이되지 않습니다.
에 매논 제임스

1
내가 회상했듯이 java.se.ee가 포함 된 jar 파일을 다운로드하여 경로 (또는 비슷한 것)에 추가해야한다고 생각합니다. AFAIK Oracle은 JDK에서 12 이상을위한 J2EE 관련 jar를 번들로 제공하지 않았습니다. sdkmanager로 이것을 테스트하지 않았습니다.
mmccabe

@jamesemanon 나는 그것을 해결하지 못했습니다. 위의 제안을 시도
리치

0

이 오류에 대한 또 다른 해결책은 Java 버전을 확인하는 것입니다.이 jdk oracle-jdk-8을 다운로드하여 해결할 수 있습니다 . 이것은 내 실수였습니다.



0

Java 8 SDK를 다운로드합니다.

  1. unistall java sdk previuse
  2. android studio 닫기
  3. Java 8 설치
  4. 실행-> cmd-> flutter doctor --install -licenses 이후
flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, v1.12.13+hotfix.9, on Microsoft Windows [Version 10.0.19041.388], locale en-US)
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[√] Android Studio (version 4.0)
[√] VS Code (version 1.47.3)
[!] Connected device
    ! No devices available

! Doctor found issues in 1 category
display  and finish


-2

매우 간단합니다. JAVA_HOME 환경 변수를 JDK 설치 경로로 설정하면됩니다.

Ubuntu에 Java를 수동으로 설치 했으므로 다음과 같이 보입니다.

export JAVA_HOME="$HOME/pkg-src/jdk1.8.0_251"

그리고 그것이 당신의 경로에도 존재하는지 확인하십시오 ...

export PATH="$PATH:$JAVA_HOME"

작동하지 않습니다. Java 8은 Debian 안정 버전 (1½ 년) 이상에 더 이상 존재하지 않습니다.
mirabilos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.