Gagal menjalankan sdkmanager --list dengan Java 9


96

Saya mengunduh dan menginstal:

  • JDK ( jdk-9.0.1_osx-x64_bin.dmg) dari Oracle di sini
  • Android SDK ( sdk-tools-darwin-3859397.zip) dari Google di sini .

Setelah mengonfigurasi PATHvariabel, saya mencoba menjalankan sdkmanager, yang menggantikan androidperintah untuk mengelola komponen SDK. Namun, gagal seperti yang ditunjukkan di sini:

$ 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

Ini adalah versi 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)

Adakah yang tahu cara memperbaikinya tanpa kembali ke Java 8?

Pertanyaan-pertanyaan Terkait

  • Gagal memasang android-sdk
    • Posting ini menanyakan pertanyaan serupa. Namun, postingan tersebut ditutup dan satu-satunya jawaban menyarankan untuk kembali ke Java 8.

1
Hanya bertanya-tanya: apa tujuan melakukan ini?
GhostCat

2
Mencoba fitur baru di Java 9, tetapi pada saat yang sama mengembangkan aplikasi Android, dan hanya menginginkan satu JDK di sistem.
Siu Ching Pong -Asuka Kenji-

Jawaban terkait tidak spesifik untuk Android SDK. Itu tidak menunjukkan skrip mana yang akan diedit, dan di mana untuk mengedit. Harap dicatat bahwa tidak semua orang tahu skrip shell, dan ini membantu untuk menyelesaikan masalah dengan cepat bahkan untuk orang yang mengetahuinya. Apakah Anda ingin membaca meskipun skrip yang tidak Anda tulis untuk memecahkan masalah konfigurasi sederhana, sementara solusi yang berfungsi di luar sana sudah diuji oleh seseorang?
Siu Ching Pong -Asuka Kenji-

2
Pada catatan itu, saya memilih untuk membuka kembali stackoverflow.com/questions/46402772/… bahkan seperti yang ditunjukkan oleh komentar.
Naman

Harap jangan hapus ini sampai stackoverflow.com/q/46402772/142239 dibuka kembali, dan saya menyalin jawaban saya di sana. Saya tidak memiliki cadangan posting StackOverflow saya. Terima kasih!
Siu Ching Pong -Asuka Kenji-

Jawaban:


159

Dengan bantuan jawaban ini , saya berhasil menyelesaikan masalah.

Kami akan menerapkan perbaikan dalam sdkmanager. Ini adalah skrip shell. Itu terletak di $android_sdk/tools/bin, di $android_sdkmana Anda membuka ritsleting SDK Android.

  1. Buka sdkmanagerdi editor favorit Anda.
  2. Temukan baris yang menetapkan DEFAULT_JVM_OPTSvariabel. Dalam salinan saya, ada di baris 31:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
    
  3. Menambahkan pilihan berikut untuk variabel: -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee. Harap perhatikan kutipannya. Dalam salinan saya, barisnya menjadi:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
    
  4. Simpan file dan keluar dari editor.
  5. Jalankan kembali perintah tersebut.

Inilah hasilnya:

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

Halo! Berhasil!

- Edit: 2017-11-07 -

Harap dicatat bahwa Anda mungkin perlu menerapkan perbaikan di atas lagi setelah berjalan sdkmanager --update, karena sdkmanagerskrip shell mungkin diganti jika toolspaket diperbarui.

Jawaban Terkait


1
Sebagaimana tercantum dalam Panduan Migrasi JDK 9 --add-modules java.se.eeharus dianggap sebagai solusi sementara. Proposal untuk melepaskan modul java.xml.bind dari Java SE dan JDK ada dalam bentuk draf di sini: bugs.openjdk.java.net/browse/JDK-8189188
Alan Bateman

11
Mengapa tidak mengekspor JAVA_OPTSvariabel lingkungan saja export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee', daripada menambal file sumber SDK?
Rafa

7
FWIW, saya download dan diinstal baik JDK dan Android SDK Tools hari ini pada Windows 10, dan harus mengatur garis menjadi set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeuntuk mendapatkan com.android.sdklib.tool.SdkManagerClikelas untuk berjalan dengan benar
RJ Cuthbertson

2
ketika memiliki java 11 di sistem, solusi yang diusulkan @SherylHohman harus digabungkan dengan yang satu ini, java 11 harus "disembunyikan" dari daftar agar ini berfungsi
Alejandro Moya

5
Ini -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeatau `--add-modules java.xml.bind tidak bekerja dengan Java 11 di Mac OS. Bagaimana cara memperbaikinya tanpa menginstal versi Java yang lain?
Manish

37

Anda dapat menyetel opsi sdkmanager dengan SDKMANAGER_OPTS.

Contoh:

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

4
Harap dicatat pada Windows Anda harus menghilangkan tanda kutip:set SDKMANAGER_OPTS=--add-modules java.se.ee
Amfasis

20
java.se.ee sudah tidak ada lagi.
Oscar

2
Jawaban ini sudah kedaluwarsa, seseorang tolong perbaiki ini
Developerium

25

Jawaban yang diterima sudah tidak berlaku sejak Februari 2019. Berikut adalah jawaban yang akan berfungsi hingga Anda sdkmanagerbermigrasi ke versi Java yang lebih baru. Tetapi saat itu, Anda tidak akan mengalami masalah ini lagi.

OpenJDK 10 telah digantikan oleh OpenJDK 11 , yang tidak diimplementasikan java.se.ee sama sekali . Ini berarti bahwa peretasan menambahkan --add-modules java.se.eetidak melakukan apa-apa lagi. Ini juga berarti bahwa OpenJDK 10 akan secara otomatis dihapus dari sistem Anda dan diganti dengan OpenJDK 11 pada saat Anda memperbarui, jika pembaruan Anda dikonfigurasi dengan benar.

Ubah sdkmanageruntuk menggunakan Java 8 dengan mengatur JAVA_HOME di dalam sdkmanager ke instalasi Java 8. Ini, secara default, di ~/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\.."

Dengan cara ini, Anda dapat tetap menggunakan versi Java yang waras dan terpelihara di sistem Anda sekaligus menggunakan sdkmanager.

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

Dan sekarang saya punya beberapa saluran pipa untuk diperbaiki.


Jawaban ini membantu saya, karena saya sementara menetapkan titik teratas JAVA_HOME ke instalasi Java dari Android Studio: C: \ Program Files \ Android \ Android Studio \ jre
clzola

3
set JAVA_HOME="...\android-studio\current\jre"membantu saya di Windows 10 sementara semua jawaban lain tidak
NearHuscarl

set JAVA_HOME="C:\Program Files\Android\Android Studio\jre"bekerja untuk saya di Windows 10. Cari tahu Path Android Studio Anda. Saya telah menyetel Java 11 pada JAVA_HOME asli saya
notes-jj

Ini tidak akan berfungsi: Java 8 tidak lagi ada di Debian stable (berusia 1½ tahun) dan yang lebih baru.
mirabilos

21

Saat memiliki java 11 di sistem, solusi yang diberikan tidak valid.

Ini -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or--add-modules java.xml.bind tidak bekerja dengan Java 11 di Mac OS.

Oleh karena itu, Anda harus menurunkan versi java ke versi 8 dari sini: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Daftar versi Java yang diinstal

/usr/libexec/java_home -V

Jawa 11

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

Java 1.8

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

Lalu pergi ke

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

dan

./sdkmanager --licenses

1
Saya melakukan ini dan masih mendapatkan kesalahan: dll ... Pengecualian di utas "main" java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema .. Saya menggunakan Java 12.0.1
james emanon

@jamesemanon mungkin melakukan restart untuk menerapkan perubahan. Saya tidak punya petunjuk apapun.
thodwris

1
bash: /usr/libexec/java_home: file not founddi instal saya.
Eugene Gr. Philippov

13

Untuk Windows, jika tidak ada yang berhasil, coba ini:

  • Buka sdkmanager.batdengan Notepad.

  • Temukan baris berikut:

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

  • Menambahkan --add-modules java.xml.bind

Baris yang dimodifikasi akan terlihat seperti ini:

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


3
Bekerja untuk saya di windows 10.
AntonB

11

Perbarui 2019-10:

Seperti yang dinyatakan dalam pelacak masalah , Google telah mengerjakan rilis alat SDK baru yang berjalan pada JVM saat ini (9+)!

Anda dapat mendownload dan menggunakan Android SDK Command-line Tools (1.0.0) baru di dalam Android Studio atau dengan mendownloadnya secara manual dari server Google:

Untuk versi terbaru, periksa URL di dalam repository.xml .

Jika Anda membongkar alat baris perintah secara manual, berhati-hatilah dalam menempatkannya di subfolder di dalam $ANDROID_HOME(mis $ANDROID_HOME/cmdline-tools/....) Anda.


1
Alat baris perintah 2.1 (terbaru) juga gagal seperti ini, dengan Java 11.
mirabilos

10

Seperti yang kita baca di komentar sebelumnya, kesalahan ini terjadi karena versi SDK saat ini tidak kompatibel dengan versi Java terbaru: 9 dan 10.

Jadi, untuk mengatasinya, Anda dapat menurunkan versi java Anda ke Java 8, atau sebagai solusinya, Anda dapat mengekspor opsi berikut di terminal Anda:

Linux:

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

Windows :

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

Ini akan mengatasi kesalahan ini untuk sdkmanager

Dan untuk membuatnya disimpan secara permanen, Anda dapat mengekspor JAVA_OPTS di file profil Anda di Linux ( .zshrc, .bashrcdan lain-lain) atau menambahkannya sebagai variabel lingkungan secara permanen di Windows.


ps. Ini tidak berfungsi untuk Java 11/11 +, yang tidak memiliki modul Java EE. Untuk opsi ini adalah ide yang bagus, turunkan versi Java Anda atau tunggu pembaruan Flutter .

Ref: JDK 11: Ujung jalan untuk modul Java EE


12
Ketika saya mencoba ini, saya mendapatkan kesalahan lain: Terjadi kesalahan selama inisialisasi lapisan boot java.lang.module.FindException: Modul java.se.ee 'tidak ditemukan
Sherin Binu

@SherinBinu versi Java mana yang Anda gunakan?
valdeci

1
coba gunakan --add-modules java.xml.bindalih-alih--add-modules java.se.ee
valdeci

@valdeci Itu benar-benar berhasil! Terima kasih banyak!
Apoorv Goyal

8

Seperti yang telah disebutkan beberapa orang sebelumnya, ini sangat baik bisa menjadi masalah yang lebih sederhana yang harus dilakukan dengan satu instalasi java diutamakan daripada yang lain.

Dalam kasus saya, itu adalah java 8 yang dibayangi oleh java default yang lebih baru.

Saya menginstal java 8:

sudo apt-get install openjdk-8-jdk

Kemudian saya memperbarui java yang diinstal menjadi default baru:

sudo update-alternatives --config java

Dimana saya memilih nomor id java 8.

Setelah melakukan langkah-langkah (cukup sederhana) ini, saya bisa menjalankan sdkmanager tanpa kesalahan.

Semoga ini bisa membantu seseorang!


Ini tidak akan berfungsi: Java 8 tidak lagi ada di Debian stable (berusia 1½ tahun) dan yang lebih baru.
mirabilos


5

Saya mengalami kesulitan mencari tahu solusi ini hanya dengan menambahkan sdkmanager.bat yang berfungsi

@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

Saya khawatir ini bukan opsi yang layak karena ini akan berhenti berfungsi ketika versi baru SDK keluar karena cuplikan kode ini berisi versi hard-code:set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar
izogfif

4

Saya dapat menyelesaikan masalah ini dengan menggunakan file sdkmanager.bat yang diedit dengan memaksa untuk menggunakan Java yang tertanam di dalam Android Studio Itu Sendiri, yang saya anggap menggunakan OpenJDK 8. Berikut adalah sdkmanager yang diedit yang saya gunakan:

@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

Di sini saya menggunakan variabel lingkungan ANDROID_STUDIO_JAVA_HOME yang sebenarnya mengarah ke JRE yang tertanam di studio android misalnya: ../android_studio/jre

Ini juga memiliki fallback ke JAVA_HOME jika ANDROID_STUDIO_JAVA_HOME tidak disetel.


3

Inilah yang saya lakukan di Ubuntu 18.04 (Semua Linux akan melakukannya):

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

Ini tidak akan berfungsi: Java 8 tidak lagi ada di Debian stable (berusia 1½ tahun) dan yang lebih baru.
mirabilos

2

Penambahan singkat di atas untuk openJDK 11 dengan alat sdk android sebelum meningkatkan ke versi terbaru.

Solusi di atas tidak berhasil untuk saya

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

Agar ini berfungsi, saya telah menginstal jaxb-ri (implementasi referensi) dari repo maven.

Informasi tersebut diberikan https://github.com/javaee/jaxb-v2 dan tautan ke https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/2.3.2/jaxb -ri-2.3.2.zip
Download ini menyertakan implementasi runtime mandiri di Mod-Folder.

Saya menyalin mod-Folder ke $ android_sdk \ tools \ lib \ dan menambahkan yang berikut ke variabel 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;

Jadi akhirnya terlihat seperti:

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;

Mungkin saya melewatkan lib karena beberapa kesalahan kecil muncul. Tetapi sdkmanager.bat --update atau --list sedang berjalan sekarang.


2

Ini adalah jawaban untuk membuat ini berfungsi untuk Java 11 dan yang lebih baru karena seluruh JAXB API telah dihapus.

Download Jakarta XML Binding , khususnya file zip ini . Anda hanya memerlukan 3 file dalam folder mod yaitu jakarta.activation.jar, jakarta.xml.bind-api.jar dan jakarta.xml.bind-api.jar dan Anda dapat membuang sisanya.

Pindahkan file-file ini ke folder APP_HOME / lib. Saya membuat sub folder jaxb di dalamnya untuk ini. Jadi, di sistem macOS saya ini: $ HOME / Library / Android / sdk / tools / lib / jaxb

Sekarang buka sdkmanager menggunakan editor teks favorit Anda dan di bawah CLASSPATH = tambahkan yang berikut ini di awal:

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

Jadi akhirnya terlihat seperti:

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

Dan itu cukup banyak, seharusnya menyelesaikan masalah.

Saya melakukan langkah-langkah ini karena flutter doctor --android-licensesmemberi saya masalah. Dan ini memperbaikinya.


1

Satu-satunya solusi yang berfungsi bagi saya adalah menggunakan java yang dikirimkan dengan studio Android.

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

di .bashrc

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

Jika Anda menggunakan fishrak, masukkan ini~/.config/fish/config.fish

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

(Ini untuk mac, tapi saya yakin ini harus bekerja dengan linux dan windows dengan mengatur jalur yang benar)


Ini mungkin mengganggu aplikasi lain yang mencoba menggunakan Java versi Asli / Non-OpenJDK dari Oracle. Meskipun OpenJDK lebih dari sekedar mampu, beberapa mungkin membutuhkan yang lain juga.
Jemsheer KD

1

JDK 13.0.1, Android SDK 29, Windows 10

Pada dasarnya saya mencoba segalanya, tetapi solusi yang paling efektif dan hanya 1 yang berhasil untuk saya adalah menurunkan versi ke jdk 1.8. Saya tidak mengapa, ini adalah awal 2020 dan harus menurunkan versi ke versi jdk berusia 1 tahun terhadap versi flutter terbaru. Mungkin masalahnya ada di versi windows, karena jdk 13.0.1 berfungsi untuk saya di macOS 10.15.2. Semoga solusi ini berhasil.

Tautan Unduhan (JDK 1.8.0): https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html


Java 8 dirilis pada Maret 2014. Jadi usianya sedikit lebih dari 1 tahun ...
pqnet

yeah..tapi kebijakan Oracle telah berubah sejak Java 8 ..... itu tidak gratis lagi untuk organisasi. Jadi, semua orang terpaksa pakai Java8
Kedar Sukerkar

Masalahnya adalah bahwa runtime java yang lebih baru (9+) tidak memiliki pustaka javax, Anda seharusnya mengirimkannya bersama aplikasi Anda. Jadi perangkat lunak yang ditulis berharap dapat berjalan di java 8 dan sebelumnya tidak mengirimkan pustaka ini, dan karenanya tidak akan berfungsi pada 9+. Alasannya, seperti yang Anda duga, adalah untuk membuat JDK standar sepenuhnya open source (pustaka ini bukan GPL), jadi saya akan mengatakan bahwa persyaratan lisensinya ditingkatkan.
pqnet

1

Tentukan direktori home dari berbagai versi JDK di .bashrc atau .zshrc Anda:

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

Pertama-tama gunakan JDK versi 8. Letakkan baris ini di bagian atas sdkmanagerfile:

export JAVA_HOME=$JAVA_8_HOME

Beralih kembali ke JDK versi 14. Letakkan baris ini di bagian bawah sdkmanagerfile:

export JAVA_HOME=$JAVA_14_HOME

Ini tidak akan berfungsi: Java 8 tidak lagi ada di Debian stable (berusia 1½ tahun) dan yang lebih baru.
mirabilos

1

(JENDELA)

Jika Anda telah menginstal Android Studio, buka File>> Project Structure...>> Lokasi SDK.

Pergi ke lokasi itu + \cmdline-tools\latest\bin Salin Path keEnvironment Variables

daripada menggunakan alat baris perintah.


0

https://adoptopenjdk.net saat ini mendukung semua distribusi JDK dari versi 8 dan seterusnya. Misalnya https://adoptopenjdk.net/releases.html#x64_win

Berikut adalah contoh bagaimana saya dapat menggunakan JDK versi 8 dengan sdkmanager dan banyak lagi: https://travis-ci.com/mmcc007/screenshots/builds/109365628

Untuk JDK 9 (dan saya pikir 10, dan mungkin 11, tetapi tidak 12 dan seterusnya), berikut ini harus bekerja agar sdkmanager berfungsi:

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

1
Ada ide tentang cara memperbaikinya untuk SDK 12?
Richie

@Richie Apakah Anda menyelesaikan ini, saya juga memiliki Java 12 dan mengalami masalah ini dan tidak ada yang diposting di sini yang membantu.
james emanon

1
Seingat saya, saya pikir Anda harus mengunduh file jar yang berisi java.se.ee dan menambahkannya ke jalur (atau yang serupa). AFAIK Oracle memisahkan stoples terkait J2EE dari JDK untuk 12 tahun dan seterusnya. Tidak menguji ini dengan sdkmanager.
mmccabe

@jamesemanon Saya tidak berhasil menyelesaikannya. Coba saran di atas
Richie

0

Solusi lain yang mungkin untuk kesalahan ini adalah memeriksa versi Java Anda, mungkin Anda dapat menyelesaikannya dengan mengunduh jdk oracle-jdk-8 ini, ini adalah kesalahan saya: P



0

Saya mengunduh Java 8 SDK

  1. unistall java sdk previuse
  2. tutup studio android
  3. instal java 8
  4. run-> cmd-> flutter doctor --install -licenses dan setelah
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

Ini sangat sederhana, cukup ekspor JAVA_HOMEvariabel lingkungan, setel ke jalur instalasi JDK Anda.

Saya menginstal Java secara manual di Ubuntu, dan bagi saya ini terlihat seperti:

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

Dan pastikan itu ada di jalan Anda juga ...

export PATH="$PATH:$JAVA_HOME"

Ini tidak akan berfungsi: Java 8 tidak lagi ada di Debian stable (berusia 1½ tahun) dan yang lebih baru.
mirabilos
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.