Không chạy được sdkmanager --list với Java 9


94

Tôi đã tải xuống và cài đặt:

  • JDK (jdk-9.0.1_osx-x64_bin.dmg ) từ Oracle tại đây
  • SDK Android ( sdk-tools-darwin-3859397.zip) của Google tại đây .

Sau khi định cấu hình PATHbiến, tôi đã thử chạy sdkmanager, thay thế androidlệnh để quản lý các thành phần SDK. Tuy nhiên, nó không thành công như được hiển thị ở đây:

$ 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

Đây là phiên bản 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)

Có ai biết cách khắc phục nó mà không quay lại Java 8 không?

Câu hỏi liên quan

  • Không cài đặt được android-sdk
    • Bài đăng này đã hỏi một câu hỏi tương tự. Tuy nhiên, bài đăng đã bị đóng lại và câu trả lời duy nhất gợi ý quay trở lại Java 8.

1
Chỉ tự hỏi: mục đích của việc này là gì?
GhostCat

2
Đang thử các tính năng mới trong Java 9, nhưng đồng thời phát triển các ứng dụng Android và chỉ muốn một JDK trong hệ thống.
Siu Ching Pong -Asuka Kenji-

Câu trả lời được liên kết không dành riêng cho Android SDK. Nó không chỉ ra kịch bản nào để chỉnh sửa và chỉnh sửa ở đâu. Xin lưu ý rằng không phải ai cũng biết shell script và nó giúp giải quyết vấn đề một cách nhanh chóng ngay cả với những người biết. Bạn có muốn đọc mặc dù một tập lệnh không phải do bạn viết để giải quyết một vấn đề cấu hình đơn giản, trong khi một giải pháp đang hoạt động đã được ai đó kiểm tra?
Siu Ching Pong -Asuka Kenji-

2
Trên lưu ý đó, tôi đã bỏ phiếu để mở lại stackoverflow.com/questions/46402772/… ngay cả khi các nhận xét đã chỉ ra.
Naman

Vui lòng không xóa nó cho đến khi stackoverflow.com/q/46402772/142239 được mở lại và tôi sao chép câu trả lời của mình vào đó. Tôi không có bản sao lưu các bài đăng trên StackOverflow của mình. Cảm ơn!
Siu Ching Pong -Asuka Kenji-

Câu trả lời:


159

Với sự trợ giúp của câu trả lời này , tôi đã giải quyết thành công vấn đề.

Chúng tôi sẽ áp dụng một bản sửa lỗi trong sdkmanager. Nó là một tập lệnh shell. Nó được đặt tại $android_sdk/tools/bin, $android_sdknơi bạn đã giải nén Android SDK.

  1. Mở sdkmanagertrong trình soạn thảo yêu thích của bạn.
  2. Xác định vị trí dòng đặt DEFAULT_JVM_OPTSbiến. Trong bản sao của tôi, nó ở dòng 31:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
  3. Nối các tùy chọn sau đây để biến: -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee. Hãy chú ý đến các trích dẫn. Trong bản sao của tôi, dòng trở thành:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
  4. Lưu tệp và thoát khỏi trình chỉnh sửa.
  5. Chạy lại lệnh.

Đây là kết quả:

$ 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
...

Hola! Nó hoạt động!

- Chỉnh sửa: 2017-11-07 -

Xin lưu ý rằng bạn có thể cần phải áp dụng lại bản sửa lỗi ở trên sau khi chạy sdkmanager --update, vì sdkmanagertập lệnh shell có thể bị ghi đè nếu toolsgói được cập nhật.

Các câu trả lời liên quan

  • https://stackoverflow.com/a/43574427/142239
    • @ andy-guibert đã chỉ ra các tùy chọn cần thiết để làm cho việc này hoạt động. Anh ấy cũng nói sơ qua về ý nghĩa của những lựa chọn bí ẩn đó.

1
Như đã lưu ý trong Hướng dẫn di chuyển JDK 9 --add-modules java.se.eenên được coi là một giải pháp tạm thời. Đề xuất loại bỏ mô-đun java.xml.bind khỏi Java SE và JDK ở dạng dự thảo tại đây: bug.openjdk.java.net/browse/JDK-8189188
Alan Bateman

11
Tại sao không chỉ xuất JAVA_OPTSbiến môi trường export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee', thay vì vá các tệp nguồn SDK?
Rafa

6
FWIW, tôi đã tải về và cài đặt cả hai công cụ JDK và Android SDK ngày hôm nay trên Windows 10, và phải thiết lập các dòng là set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeđể có được com.android.sdklib.tool.SdkManagerClilớp để chạy một cách chính xác
RJ Cuthbertson

1
Mặc dù tôi đã quyết định giải pháp này (tôi dễ theo dõi hơn), một "giải pháp" thay thế vẫn ở đây . Một sửa chữa lâu dài sẽ là tuyệt vời.
SherylHohman

4
Điều này -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eehoặc `--add-modules java.xml.bind không hoạt động với Java 11 trên Mac OS. Làm cách nào để khắc phục sự cố mà không cần cài đặt phiên bản Java khác?
Manish

37

Bạn có thể đặt các tùy chọn sdkmanager với SDKMANAGER_OPTS.

Thí dụ:

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

4
Xin lưu ý rằng trên Windows, bạn nên bỏ qua các dấu ngoặc kép:set SDKMANAGER_OPTS=--add-modules java.se.ee
Amfasis,

18
java.se.ee không tồn tại nữa.
Oscar

2
Câu trả lời này đã lỗi thời, ai đó hãy sửa lỗi này
Developerium

21

Câu trả lời được chấp nhận đã lỗi thời kể từ tháng 2 năm 2019. Đây là câu trả lời sẽ hoạt động cho đến khi sdkmanagerchuyển sang phiên bản Java mới hơn. Nhưng đến lúc đó, bạn sẽ không gặp vấn đề này nữa.

OpenJDK 10 được superseeded bởi OpenJDK 11 , mà không thực hiện java.se.ee ở tất cả . Điều này có nghĩa là việc thêm--add-modules java.se.ee sẽ không còn tác dụng gì nữa. Điều đó cũng có nghĩa là OpenJDK 10 sẽ tự động bị xóa khỏi hệ thống của bạn và được thay thế bằng OpenJDK 11 vào lần cập nhật tiếp theo, nếu các bản cập nhật của bạn được định cấu hình đúng cách.

Sửa đổi sdkmanagerđể sử dụng Java 8 bằng cách cài đặt JAVA_HOME bên trong thành cài đặt sdkmanagerJava 8. Nó, theo mặc định, tại ~/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\.."

Bằng cách này, bạn có thể tiếp tục sử dụng phiên bản Java lành mạnh và được duy trì trên hệ thống của mình trong khi sử dụng đồng thời sdkmanager.

# Java
export JAVA_HOME=/usr/lib/jvm/default-java

Và bây giờ tôi có một số đường ống để sửa chữa.


Câu trả lời này đã giúp tôi, khi tôi tạm thời đặt điểm trên cùng của JAVA_HOME thành cài đặt Java từ Android Studio: C: \ Program Files \ Android \ Android Studio \ jre
clzola

2
set JAVA_HOME="...\android-studio\current\jre"giúp tôi trên Windows 10 trong khi tất cả các câu trả lời khác thì không
NearHuscarl

set JAVA_HOME="C:\Program Files\Android\Android Studio\jre"đã làm việc với tôi trên Windows 10. Tìm hiểu Đường dẫn Android Studio của bạn. Tôi đã đặt Java 11 trên JAVA_HOME ban đầu của mình
note-jj

19

Khi có java 11 trong hệ thống, các giải pháp được cung cấp không hợp lệ.

Đây -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or--add mô-đun java.xml.bind không làm việc với Java 11 trên Mac OS.

Vì lý do đó, bạn phải hạ cấp phiên bản java xuống phiên bản 8 từ đây: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Liệt kê các phiên bản Java đã cài đặt

/usr/libexec/java_home -V

Java 11

export JAVA_HOME=$(/usr/libexec/java_home -v 11)

Java 1.8

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

Sau đó đi đến

cd ~/Library/Android/sdk/tools/bin

./sdkmanager --licenses

1
Tôi đã làm điều này và vẫn nhận được lỗi: vv ... Exception in thread "main" java.lang.NoClassDefFoundError: javax / xml / bind / chú thích / XMLSCHEMA .. Tôi đang sử dụng Java 12.0.1
james emanon

@jamesemanon có thể khởi động lại để áp dụng các thay đổi. Tôi không có bất kỳ manh mối nào.
thodwris

bash: /usr/libexec/java_home: file not foundtại cài đặt của tôi.
Eugene Gr. Philippov

13

Đối với Windows, nếu không có gì hoạt động, hãy thử cách này:

  • Mở sdkmanager.batbằng Notepad.

  • Xác định vị trí dòng sau:

    %JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS%

  • Thêm vào --add-modules java.xml.bind

Dòng được sửa đổi sẽ trông như thế này:

%JAVA_EXE%" %DEFAULT_JVM_OPTS% --add-modules java.xml.bind %JAVA_OPTS% %SDKMANAGER_OPTS%


3
Làm việc cho tôi trên cửa sổ 10
AntonB

10

Như chúng tôi đã đọc các nhận xét trước đó, lỗi này xảy ra do phiên bản SDK hiện tại không tương thích với các phiên bản Java mới nhất: 9 và 10.

Vì vậy, để giải quyết vấn đề này, bạn có thể hạ cấp phiên bản java của mình xuống Java 8 hoặc với cách giải quyết là bạn có thể xuất tùy chọn sau trên thiết bị đầu cuối của mình:

Linux:

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

Windows :

set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

Điều này sẽ giải quyết lỗi này cho sdkmanager

Và để làm cho nó lưu vĩnh viễn bạn có thể xuất JAVA_OPTS trong tập tin cá nhân của bạn trên linux ( .zshrc, .bashrcvà vv) hoặc thêm như biến môi trường vĩnh viễn trên Windows.


ps. Điều này không hoạt động đối với Java 11+, không có mô-đun Java EE. Đối với tùy chọn này, bạn nên hạ cấp phiên bản Java của bạn hoặc đợi bản cập nhật Flutter .

Tham khảo: JDK 11: Kết thúc chặng đường cho các mô-đun Java EE


11
Khi tôi cố gắng này, im nhận được lỗi khác: Xảy ra lỗi lầm trong quá trình khởi của lớp khởi động java.lang.module.FindException: java.se.ee Mô-đun' không tìm thấy
Sherin Binu

@SherinBinu bạn đang sử dụng phiên bản Java nào?
valdeci 20/09/18

1
cố gắng sử dụng --add-modules java.xml.bindthay vì--add-modules java.se.ee
valdeci

@valdeci Điều đó thực sự hiệu quả! Cảm ơn bạn rất nhiều!
Apoorv Goyal

10

Cập nhật 2019-10:

Như đã nêu trong trình theo dõi vấn đề , Google đã và đang làm việc trên một bản phát hành công cụ SDK mới chạy trên các JVM (9+) hiện tại!

Bạn có thể tải xuống và sử dụng Công cụ dòng lệnh Android SDK mới (1.0.0) bên trong Android Studio hoặc bằng cách tải xuống theo cách thủ công từ máy chủ Google:

Đối với các phiên bản mới nhất, hãy kiểm tra các URL bên trong repository.xml .

Nếu bạn giải nén các công cụ dòng lệnh theo cách thủ công, hãy cẩn thận đặt chúng vào một thư mục con bên trong $ANDROID_HOME (ví dụ $ANDROID_HOME/cmdline-tools/...) .


8

Như một số người đã đề cập trước đây, đây rất có thể là một vấn đề đơn giản hơn phải làm với một cài đặt java được ưu tiên hơn cài đặt khác.

Trong trường hợp của tôi, đó là java 8 bị lu mờ bởi một java mặc định mới hơn.

Tôi đã cài đặt java 8:

sudo apt-get install openjdk-8-jdk

Sau đó, tôi cập nhật java đã cài đặt thành mặc định mới:

sudo update-alternatives --config java

Theo đó tôi đã chọn số id của java 8.

Sau khi thực hiện các bước (khá đơn giản) này, tôi có thể chạy sdkmanager mà không bị lỗi.

Hy vọng điều này sẽ giúp ai đó!



5

Tôi đã có một thời gian khó khăn để tìm ra giải pháp này chỉ cần thêm sdkmanager.bat đang hoạt động

@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

Tôi e rằng đó không phải là tùy chọn khả thi vì tính năng này sẽ ngừng hoạt động khi phiên bản SDK mới ra mắt vì đoạn mã này chứa các phiên bản được mã hóa cứng:set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar
izogfif

4

Tôi đã có thể giải quyết vấn đề bằng cách sử dụng tệp sdkmanager.bat đã chỉnh sửa bằng cách buộc sử dụng Java được nhúng bên trong Android Studio Itself, mà tôi cho rằng sử dụng OpenJDK 8. Đây là sdkmanager đã chỉnh sửa mà tôi đã sử dụng:

@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

Ở đây tôi đã sử dụng một biến môi trường ANDROID_STUDIO_JAVA_HOME thực sự trỏ đến JRE được nhúng trong android studio, ví dụ: ../android_studio/jre

Điều này cũng có một dự phòng cho JAVA_HOME nếu ANDROID_STUDIO_JAVA_HOME không được đặt.


2

Bổ sung ngắn gọn ở trên cho openJDK 11 với các công cụ sdk android trước khi nâng cấp lên phiên bản mới nhất.

Các giải pháp trên không hiệu quả với tôi

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

Để làm việc này, tôi đã cài đặt jaxb-ri (triển khai tham chiếu) từ repo maven.

Thông tin được cung cấp https://github.com/javaee/jaxb-v2 và các liên kết đến https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/2.3.2/jaxb -ri-2.3.2.zip
Bản tải xuống này bao gồm triển khai thời gian chạy độc lập trong mod-Folder.

Tôi đã sao chép mod-Folder vào $ android_sdk \ tools \ lib \ và thêm phần sau vào biến 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;

Vì vậy, cuối cùng nó trông giống như:

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;

Có lẽ tôi đã bỏ lỡ một lib do một số lỗi nhỏ hiển thị. Nhưng sdkmanager.bat --update hoặc --list hiện đang chạy.


2

Đây là những gì tôi đã làm trong Ubuntu 18.04 (Bất kỳ Linux nào cũng vậy):

$ 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)

1

Giải pháp làm việc duy nhất đối với tôi là sử dụng java đi kèm với Android studio.

đặt JAVA_HOME thành /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home

trong .bashrc

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

Nếu bạn đang sử dụng giá đỡ fish, hãy đặt cái này vào~/.config/fish/config.fish

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

(Điều này dành cho mac, nhưng tôi chắc chắn rằng nó sẽ hoạt động với linux và windows bằng cách đặt đường dẫn chính xác)


Điều này có thể ảnh hưởng đến việc ứng dụng khác đang cố gắng sử dụng phiên bản Java Original / Non-OpenJDK của Oracle. Mặc dù OpenJDK có nhiều khả năng hơn, nhưng một số cũng có thể cần cái khác.
Jemsheer KD

1

JDK 13.0.1, Android SDK 29, Windows 10

Về cơ bản, tôi đã thử mọi thứ, nhưng giải pháp hiệu quả nhất và duy nhất phù hợp với tôi là hạ cấp xuống jdk 1.8. Tôi không hiểu tại sao, đó là đầu năm 2020 và phải hạ cấp xuống phiên bản jdk 1 năm tuổi so với phiên bản mới nhất. Có thể vấn đề là trong phiên bản windows, vì jdk 13.0.1 đã hoạt động với tôi trên macOS 10.15.2. Hy vọng giải pháp này hoạt động.

Liên kết tải xuống (JDK 1.8.0): https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html


Java 8 được phát hành vào tháng 3 năm 2014. Vì vậy, nó đã hơn 1 năm tuổi ...
pqnet

vâng..nhưng chính sách của Oracle đã thay đổi kể từ Java 8 ..... nó không còn miễn phí cho tổ chức nữa. Vì vậy, mọi người buộc phải sử dụng Java8
Kedar Sukerkar

Vấn đề là thời gian chạy java mới hơn (9+) không có thư viện javax, bạn phải gửi chúng cùng với ứng dụng của mình. Vì vậy, phần mềm được viết dự kiến ​​chạy trên java 8 trở về trước không gửi các thư viện này, và do đó sẽ không hoạt động trên 9+. Lý do, như bạn đoán, là để làm cho JDK tiêu chuẩn hoàn toàn là mã nguồn mở (các thư viện này không phải là GPL), vì vậy tôi muốn nói rằng các điều khoản cấp phép đã được cải thiện.
pqnet

1

Xác định thư mục chính của các phiên bản JDK khác nhau trong .bashrc hoặc .zshrc của bạn:

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

Trước hết, hãy sử dụng JDK phiên bản 8. Đặt dòng này ở đầu sdkmanagertệp:

export JAVA_HOME=$JAVA_8_HOME

Chuyển về phiên bản JDK 14. Đặt dòng này ở cuối sdkmanagertệp:

export JAVA_HOME=$JAVA_14_HOME

1

Đây là câu trả lời để làm cho điều này hoạt động cho Java 11 trở lên vì toàn bộ các API JAXB đã bị xóa.

Tải xuống Jakarta XML Binding , cụ thể là zip này . Bạn chỉ cần 3 tệp trong thư mục mod là jakarta.activation.jar, jakarta.xml.bind-api.jar và jakarta.xml.bind-api.jar và bạn có thể bỏ phần còn lại.

Di chuyển các tệp này vào thư mục APP_HOME / lib. Tôi đã tạo một thư mục con jaxb bên trong cho việc này. Vì vậy, trên hệ thống macOS của tôi, đây là: $ HOME / Library / Android / sdk / tools / lib / jaxb

Bây giờ hãy mở sdkmanager bằng trình soạn thảo văn bản yêu thích của bạn và trong CLASSPATH = thêm phần sau vào đầu:

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

Vì vậy, nó kết thúc trông giống như:

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

Và điều đó khá nhiều, sẽ giải quyết được vấn đề.

Tôi đã thực hiện các bước này bởi vì flutter doctor --android-licensestôi đang gặp vấn đề. Và điều này đã sửa nó.


0

https://adoptopenjdk.net hiện hỗ trợ tất cả các bản phân phối của JDK từ phiên bản 8 trở đi. Ví dụ: https://adoptopenjdk.net/releases.html#x64_win

Đây là một ví dụ về cách tôi có thể sử dụng JDK phiên bản 8 với sdkmanager và hơn thế nữa: https://travis-ci.com/mmcc007/screenshots/builds/109365628

Đối với JDK 9 (và tôi nghĩ là 10, và có thể là 11, nhưng không phải 12 và hơn thế nữa), những điều sau sẽ hoạt động để sdkmanager hoạt động:

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

1
Bất kỳ ý tưởng nào về cách khắc phục điều này cho SDK 12?
Richie

@Richie Bạn đã giải quyết vấn đề này chưa, tôi cũng có Java 12 và đang gặp sự cố này và không có gì được đăng ở đây giúp ích.
james emanon

1
Như tôi nhớ lại, tôi nghĩ bạn phải tải xuống tệp jar có chứa java.se.ee và thêm nó vào đường dẫn (hoặc một cái gì đó tương tự). AFAIK Oracle đã tách nhóm các lọ liên quan đến J2EE từ JDK cho 12 và hơn thế nữa. Không kiểm tra điều này với sdkmanager.
mmccabe

@jamesemanon Tôi đã không quản lý để giải quyết nó. Hãy thử gợi ý trên
Richie

0

Một giải pháp khác có thể xảy ra với lỗi này là kiểm tra phiên bản Java của bạn, có thể bạn có thể giải quyết nó khi tải xuống jdk oracle-jdk-8 này, đây là lỗi của tôi: P


0

Bạn chỉ cần cài đặt các tệp jaxb har và đưa vào classpath. điều này hoạt động trong java 11 đến 12 mới nhất.

Đối với những người đang tìm kiếm bản sửa lỗi, tôi đã thực hiện một số ý chính trong github hy vọng điều này sẽ giúp ích. và các liên kết cũng được cung cấp.

https://gist.github.com/Try-Parser/b7106d941cc9b1c9e7b4c7443a7c3540


0

Tôi tải xuống Java 8 SDK

  1. unistall java sdk previuse
  2. đóng cửa studio android
  3. cài đặt java 8
  4. run-> cmd-> flutter doctor --install -licenses và sau đó
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


-1

Rất đơn giản, chỉ cần xuất JAVA_HOMEbiến môi trường, đặt thành đường dẫn cài đặt JDK của bạn.

Tôi đã cài đặt Java theo cách thủ công trên Ubuntu và vì vậy đối với tôi, điều này trông giống như:

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

Và hãy đảm bảo rằng nó cũng tồn tại trong đường dẫn của bạn ...

export PATH="$PATH:$JAVA_HOME"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.