Java 9 ile sdkmanager --list çalıştırılamadı


96

İndirdim ve kurdum:

  • jdk-9.0.1_osx-x64_bin.dmgOracle'dan JDK ( ) burada
  • sdk-tools-darwin-3859397.zipGoogle'dan Android SDK ( ) burada .

PATHDeğişkeni yapılandırdıktan sonra , SDK bileşenlerini yönetme komutunun sdkmanageryerini alan çalıştırmayı denedim android. Ancak, burada gösterildiği gibi başarısız oldu:

$ 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 sürümü şu şekildedir:

$ 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'e geri dönmeden nasıl düzeltileceğini bilen var mı?

ilgili sorular

  • Android-sdk yüklenemedi
    • Bu gönderi benzer bir soru sordu. Ancak gönderi kapalıdır ve tek cevap Java 8'e geri dönmeyi önerir.

1
Merak ediyorum: Bunu yapmanın amacı nedir?
GhostCat

2
Java 9'daki yeni özellikleri denemek, ancak aynı zamanda Android uygulamaları geliştirmek ve sistemde sadece bir JDK istiyorum.
Siu Ching Pong - Asuka Kenji -

Bağlantılı yanıt Android SDK'ya özgü değildir. Hangi betiğin düzenleneceğini ve nerede düzenleneceğini göstermedi. Lütfen herkesin kabuk betiğini bilmediğini ve bilen insanlar için bile sorunu hızlı bir şekilde çözmeye yardımcı olduğunu unutmayın. Basit bir konfigürasyon problemini çözmek için sizin tarafınızdan yazılmamış bir komut dosyasını, çalışan bir çözüm dışarıda zaten birisi tarafından test edilmişken okumak ister misiniz?
Siu Ching Pong - Asuka Kenji -

2
Bu notta, yorumlarda belirtildiği gibi stackoverflow.com/questions/46402772/… ' yi yeniden açmaya oy verdim .
Naman

Lütfen stackoverflow.com/q/46402772/142239 yeniden açılana kadar bunu silmeyin ve cevabımı oraya kopyalarım. StackOverflow yayınlarımın yedeği yok. Teşekkürler!
Siu Ching Pong -Asuka Kenji-

Yanıtlar:


159

Bu cevabın yardımıyla sorunu başarıyla çözdüm.

Bir düzeltme uygulayacağız sdkmanager. Bu bir kabuk betiğidir. Hiç de bulunduğu $android_sdk/tools/binyerde, $android_sdkAndroid SDK fermuarını yerdir.

  1. sdkmanagerEn sevdiğiniz düzenleyicide açın .
  2. DEFAULT_JVM_OPTSDeğişkeni ayarlayan çizgiyi bulun . Kopyamda 31. satırda:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
    
  3. Değişkeni için aşağıdaki seçenekleri ekleyin: -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee. Lütfen alıntılara dikkat edin. Benim kopyamda satır şöyle oluyor:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
    
  4. Dosyayı kaydedin ve düzenleyiciden çıkın.
  5. Komutu tekrar çalıştırın.

İşte sonuç:

$ 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! İşe yarıyor!

- Düzenleme: 2017-11-07 -

Paket güncellenirse kabuk betiği geçersiz kılınabileceğinden sdkmanager --update, çalıştırdıktan sonra yukarıdaki düzeltmeyi tekrar uygulamanız gerekebileceğini lütfen unutmayın .sdkmanagertools

İlgili Cevaplar


1
JDK 9 Geçiş Kılavuzu'nda --add-modules java.se.eebelirtildiği gibi, geçici bir çözüm olarak kabul edilmelidir. Java.xml.bind modülünü Java SE'den ve JDK'dan çıkarma teklifi burada taslak halindedir: bugs.openjdk.java.net/browse/JDK-8189188
Alan Bateman

11
Neden SDK kaynak dosyalarına yama uygulamak yerine JAVA_OPTSortam değişkenini dışa export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'aktarmıyorsunuz?
Rafa

7
FWIW, hem JDK hem de Android SDK Araçlarını bugün Windows 10'a indirip yükledim set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0.." -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeve com.android.sdklib.tool.SdkManagerClisınıfı , sınıfın doğru çalışması için ayarlamam gerekiyordu
RJ Cuthbertson

2
Sistemde java 11 olduğunda, @SherylHohman'ın önerdiği çözüm bununla birleştirilmeli, java 11 bu işi yapabilmek için listeden "gizlenmeli"
Alejandro Moya

5
Bu -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.eeveya `--add-module java.xml.bind, Mac OS'de Java 11 ile çalışmaz. Java'nın başka bir sürümünü yüklemeden nasıl düzeltebilirim?
Manish

37

SDKMANAGER_OPTS ile sdkmanager seçeneklerini ayarlayabilirsiniz.

Misal:

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

4
Windows'ta şu alıntıları atlamanız gerektiğini lütfen unutmayın:set SDKMANAGER_OPTS=--add-modules java.se.ee
Amfasis

20
java.se.ee artık yok.
Oscar

2
Bu cevap güncel değil, birisi düzeltin lütfen
Developerium

25

Kabul edilen yanıt Şubat 2019 itibarıyla geçerliliğini yitirmiş durumda. İştesdkmanager Java'nın daha yeni bir sürümüne taşınana kadar geçerli olacak bir yanıt . Ama o zamana kadar, artık bu problemi yaşamayacaksınız.

OpenJDK 10 OpenJDK 11 tarafından superseeded edildi uygulamıyor, java.se.ee hiç . Bu, ekleme hackinin --add-modules java.se.eeartık hiçbir şey yapmadığı anlamına gelir . Ayrıca, güncellemeleriniz doğru yapılandırılırsa, bir sonraki güncellemenizde OpenJDK 10'un sisteminizden otomatik olarak kaldırılacağı ve OpenJDK 11 ile değiştirileceği anlamına gelir.

Bir Java 8 kurulumunun içindesdkmanager ayarlayarak Java 8'i kullanmak için değiştirin . Varsayılan olarak adresinde .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\.."

Bu şekilde, kullanırken aynı anda sisteminizde Java'nın mantıklı ve bakımlı bir sürümünü kullanmaya devam edebilirsiniz sdkmanager.

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

Ve şimdi tamir etmem gereken bazı boru hatları var .


JAVA_HOME'un en üst noktasını Android Studio'dan Java yüklemesine geçici olarak ayarladığım için bu cevap bana yardımcı oldu: C: \ Program Files \ Android \ Android Studio \ jre
clzola

3
set JAVA_HOME="...\android-studio\current\jre"Windows 10'da bana yardımcı olurken diğer yanıtlar yardımcı olmadı
NearHuscarl

set JAVA_HOME="C:\Program Files\Android\Android Studio\jre"Windows 10'da benim için çalıştı. Android Studio Yolunuzu bulun. Java 11'i orijinal JAVA_HOME'umda ayarladım
notes-jj

Bu işe yaramayacak: Java 8 artık Debian kararlı (1½ yaşında) ve daha yeni sürümlerinde mevcut değil.
mirabilos

21

Sistemde java 11 olduğunda, sağlanan çözümler geçerli değildir.

Bu -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or--add-module java.xml.bind, Mac OS'de Java 11 ile çalışmaz.

Bu nedenle java sürümünü buradan sürüm 8'e düşürmeniz gerekir: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Yüklü Java sürümlerini listeleyin

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

Sonra şuraya git

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

ve

./sdkmanager --licenses

1
Bunu yaptım ve hala hatayı alıyorum: vb ... "main" iş parçacığında istisna java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema .. Java 12.0.1 kullanıyorum
james emanon

@jamesemanon, değişiklikleri uygulamak için yeniden başlatabilir. Hiçbir fikrim yok.
thodwris

1
bash: /usr/libexec/java_home: file not foundbenim kurulumumda.
Eugene Gr. Philippov

13

Windows için hiçbir şey işe yaramazsa şunu deneyin:

  • sdkmanager.batNot Defteri ile açın .

  • Aşağıdaki satırı bulun:

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

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

Değiştirilen satır şu şekilde görünmelidir:

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


3
Windows 10'da benim için çalıştı.
AntonB

11

2019-10 Güncellemesi:

Sorun izleyicide belirtildiği gibi , Google mevcut JVM'lerde (9+) çalışan yeni bir SDK araçları sürümü üzerinde çalışıyor!

Yeni Android SDK Komut Satırı Araçlarını (1.0.0) Android Studio'nun içinden veya Google sunucularından manuel olarak indirerek indirebilir ve kullanabilirsiniz :

En son sürümler için repository.xml içindeki URL'leri kontrol edin .

Komut satırı araçlarını manuel olarak paketinden çıkarırsanız, bunları $ANDROID_HOME(örn. $ANDROID_HOME/cmdline-tools/...) İçindeki bir alt klasöre yerleştirmeye dikkat edin .


1
Komut satırı araçları 2.1 (en son) da Java 11 ile bu şekilde başarısız oluyor.
mirabilos

10

Önceki yorumlarda okuduğumuz gibi, bu hata, mevcut SDK sürümü en yeni Java sürümleri ile uyumsuz olduğu için meydana geliyor: 9 ve 10.

Dolayısıyla, sorunu çözmek için java sürümünüzü Java 8'e düşürebilir veya geçici bir çözüm olarak aşağıdaki seçeneği terminalinizde dışa aktarabilirsiniz:

Linux:

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

Windows :

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

Bu, bu hatayı çözecektir. sdkmanager

Ve bu Linux üzerindeki profil dosyasında JAVA_OPTS dışa (edebilirsiniz kalıcı olarak kaydedilir yapmak için .zshrc, .bashrcvb) ya da Windows üzerinde kalıcı bir ortam değişkeni olarak ekleyin.


ps. Bu, Java EE modüllerine sahip olmayan Java 11/11 + için çalışmaz. Bu seçenek iyi bir fikirdir, Java sürümünüzü düşürün veya bir Flutter güncellemesi bekleyin .

Ref: JDK 11: Java EE modülleri için yolun sonu


12
Bunu denediğimde, başka bir hata alıyorum: Önyükleme katmanı java.lang.module.FindException başlatılırken hata oluştu: Modül java.se.ee 'bulunamadı
Binu

@SherinBinu hangi Java sürümünü kullanıyorsunuz?
valdeci

1
--add-modules java.xml.bindyerine kullanmayı deneyin--add-modules java.se.ee
valdeci

@valdeci Gerçekten işe yaradı! Çok teşekkür ederim!
Apoorv Goyal

8

Bazı kişilerin daha önce de bahsettiği gibi, bu çok daha basit bir problem olabilir ve bir java kurulumunun diğerinden öncelikli olmasıyla ilgili olabilir.

Benim durumumda, java 8 varsayılan olarak daha yeni bir java tarafından gölgede bırakılıyordu.

Java 8'i yükledim:

sudo apt-get install openjdk-8-jdk

Sonra yüklenen java'yı yeni varsayılan olacak şekilde güncelledim:

sudo update-alternatives --config java

Böylece java 8'in kimlik numarasını seçtim.

Bu (oldukça basit) adımları uyguladıktan sonra, sdkmanager'ı hatasız çalıştırabilirim.

Umarım bu birine yardımcı olur!


Bu işe yaramayacak: Java 8 artık Debian kararlı (1½ yaşında) ve daha yeni sürümlerinde mevcut değil.
mirabilos


5

Sadece çalışan sdkmanager.bat dosyasını ekleyerek bu çözümü bulmakta zorlandım

@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

Korkarım bu uygun bir seçenek değil, çünkü bu kod pasajı sabit kodlanmış sürümler içerdiğinden SDK'nın yeni sürümü çıktığında çalışmayı durduracak:set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar
izogfif

4

OpenJDK 8 kullandığını düşündüğüm Android Studio Itself içine gömülü Java'yı kullanmaya zorlayarak, düzenlenmiş bir sdkmanager.bat dosyasını kullanarak sorunu çözebildim. İşte kullandığım düzenlenmiş 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

Burada, android stüdyosunda gömülü JRE'ye işaret eden çevresel bir değişken ANDROID_STUDIO_JAVA_HOME kullandım, örneğin: ../android_studio/jre

ANDROID_STUDIO_JAVA_HOME ayarlanmamışsa, bu ayrıca JAVA_HOME'a bir geri dönüş sağlar.


3

Ubuntu 18.04'te yaptığım buydu (Herhangi bir Linux yapacak):

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

Bu işe yaramayacak: Java 8 artık Debian kararlı (1½ yaşında) ve daha yeni sürümlerde mevcut değil.
mirabilos

2

En son sürüme yükseltmeden önce android sdk araçlarıyla openJDK 11 için yukarıdakilere kısa bir ekleme.

Yukarıdaki çözümler benim için işe yaramadı

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

Bu çalışmayı elde etmek için jaxb-ri'yi (referans uygulama) maven deposundan kurdum.

Bilgiler https://github.com/javaee/jaxb-v2 verildi ve https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/2.3.2/jaxb -ri-2.3.2.zip
Bu indirme, mod-Klasöründe bağımsız bir çalışma zamanı uygulaması içerir.

Mod-Klasörünü $ android_sdk \ tools \ lib \ konumuna kopyaladım ve sınıf yolu değişkenine aşağıdakileri ekledim:

;% 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;

Sonunda şöyle görünüyor:

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;

Belki bazı küçük hataların ortaya çıkması nedeniyle bir kitaplığı kaçırdım. Ancak sdkmanager.bat --update veya --list şu anda çalışıyor.


2

Tüm JAXB API'leri kaldırıldığından, bunun Java 11 ve üzeri için çalışmasını sağlamanın cevabı budur.

İndir Cakarta XML Bağlama , özellikle bu zip dosyasını. Mod klasöründe sadece 3 dosyaya ihtiyacınız var, yani jakarta.activation.jar, jakarta.xml.bind-api.jar ve jakarta.xml.bind-api.jar ve geri kalanını atabilirsiniz.

Bu dosyaları APP_HOME / lib klasörüne taşıyın. Bir jaxb alt klasörü oluşturdum için içinde . Yani, macOS sistemimde bu: $ HOME / Library / Android / sdk / tools / lib / jaxb idi

Şimdi favori metin düzenleyicinizi kullanarak sdkmanager'ı açın ve CLASSPATH = altında aşağıdakileri baştan ekleyin:

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

Böylece şöyle göründü:

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

Ve bu hemen hemen sorunu çözmeli.

Bu adımları yaptım çünkü flutter doctor --android-licensesbana sorun çıkarıyordu. Ve bu onu düzeltti.


2

(PENCERELER)

Android Studio'yu zaten yüklediyseniz File>> Project Structure...>> SDK Konumu'na gidin .

O konuma gidin + \cmdline-tools\latest\bin Yolu kopyalayınEnvironment Variables

komut satırı aracını kullanmakta sorun yok.


1

Benim için çalışan tek çözüm, Android stüdyosu ile birlikte gelen javayı kullanmaktır.

JAVA_HOME'u şu şekilde ayarlayın: /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home

içinde .bashrc

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

fishShel kullanıyorsanız , bunu koyun~/.config/fish/config.fish

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

(Bu mac içindir, ancak doğru yolu ayarlayarak linux ve Windows ile çalışması gerektiğinden eminim)


Bu, Oracle'dan Java'nın Orijinal / OpenJDK Olmayan sürümünü kullanmaya çalışan diğer uygulamalara müdahale edebilir. OpenJDK yetenekli olandan daha fazlasına sahip olsa da, bazılarının diğerine de ihtiyacı olabilir.
Jemsheer KD

1

JDK 13.0.1, Android SDK 29, Windows 10

Temel olarak her şeyi denedim, ancak benim için işe yarayan en etkili ve tek çözüm, jdk 1.8'e düşürmekti. Neden bilmiyorum, 2020'nin başları ve en son flutter sürümüne karşı 1 yıllık jdk sürümüne geçmek zorunda. Belki sorun Windows sürümündedir, çünkü jdk 13.0.1 macOS 10.15.2'de benim için çalıştı. Umarım bu çözüm işe yarar.

İndirme Linki (JDK 1.8.0): https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html


Java 8 Mart 2014'te piyasaya sürüldü. Yani 1 yıldan biraz daha eski ...
pqnet

evet..ama Oracle politikası Java 8'den beri değişti ..... artık organizasyon için ücretsiz değil. Yani herkes Java8 kullanmak zorunda kalıyor
Kedar Sukerkar

Sorun şu ki, daha yeni java çalışma zamanlarının (9+) javax kitaplıkları olmaması, bunları uygulamanızla birlikte göndermeniz gerekiyor. Bu nedenle, java 8 ve daha önce çalışması beklenen yazılımlar bu kitaplıkları göndermez ve bu nedenle 9+ üzerinde çalışmaz. Bunun nedeni, tahmin ettiğiniz gibi, standart JDK'yı tamamen açık kaynak yapmaktır (bu kitaplıklar GPL değildir), bu nedenle lisans koşullarının geliştiğini söyleyebilirim.
pqnet

1

.Bashrc veya .zshrc'nizde farklı JDK sürümlerinin ana dizinlerini tanımlayın:

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

Öncelikle JDK sürüm 8'i kullanın. Bu satırı sdkmanagerdosyanın en üstüne koyun :

export JAVA_HOME=$JAVA_8_HOME

JDK sürüm 14'e geri dönün. Bu satırı sdkmanagerdosyanın altına koyun :

export JAVA_HOME=$JAVA_14_HOME

Bu işe yaramayacak: Java 8 artık Debian kararlı (1½ yaşında) ve daha yeni sürümlerde mevcut değil.
mirabilos

0

https://adoptopenjdk.net şu anda sürüm 8'den itibaren tüm JDK dağıtımlarını desteklemektedir. Örneğin https://adoptopenjdk.net/releases.html#x64_win

JDK sürüm 8'i sdkmanager ve çok daha fazlası ile nasıl kullanabildiğime dair bir örnek: https://travis-ci.com/mmcc007/screenshots/builds/109365628

JDK 9 için (ve bence 10 ve muhtemelen 11, ancak 12 ve ötesi değil), sdkmanager'ın çalışması için aşağıdakiler çalışmalıdır:

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

1
Bunun SDK 12 için nasıl düzeltileceğine dair bir fikriniz var mı?
Richie

@Richie Bunu çözdünüz mü, bende de Java 12 var ve bu sorunla karşılaşıyorum ve burada yayınlanan hiçbir şey yardımcı olmuyor.
james emanon

1
Hatırladığım kadarıyla java.se.ee içeren jar dosyasını indirip yola eklemeniz gerektiğini düşünüyorum (veya benzer bir şey). AFAIK Oracle, J2EE ile ilgili J2EE ile ilgili kavanozları JDK'dan 12 ve üstü için ayrıştırdı. Bunu sdkmanager ile test etmedim.
mmccabe

@jamesemanon Çözmeyi başaramadım. Yukarıdaki öneriyi deneyin
Richie

0

Bu hatanın olası başka bir çözümü de Java sürümünüzü kontrol etmektir, belki bu jdk oracle-jdk-8'i indirerek çözebilirsiniz , bu benim hatamdı: P



0

Java 8 SDK indiriyorum

  1. unistall java sdk previuse
  2. android stüdyosunu kapat
  3. java 8'i yükle
  4. run-> cmd-> flutter doctor --install -licenses ve sonra
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

Çok basit, sadece JAVA_HOME JDK kurulumunuzun yoluna ayarlanmış ortam değişkenini .

Java'yı Ubuntu'ya manuel olarak yükledim ve bu benim için şöyle görünüyor:

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

Ve yolunuzda da var olduğundan emin olun ...

export PATH="$PATH:$JAVA_HOME"

Bu işe yaramayacak: Java 8 artık Debian kararlı (1½ yaşında) ve daha yeni sürümlerde mevcut değil.
mirabilos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.