ไม่สามารถติดตั้ง android-sdk:“ java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema”


167

เมื่อติดตั้งเครื่องมือ android sdk ข้อผิดพลาดต่อไปนี้จะถูกปล่อยออกมา:

java.lang.NoClassDefFoundError: javax / xml / bind / คำอธิบายประกอบ / XmlSchema

ทำไมสิ่งนี้จึงเกิดขึ้นและจะแก้ไขได้อย่างไร?

ดีบักเอาต์พุต:

$ java --version
java 9
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
$ brew cask install android-sdk
==> Caveats
We will install android-sdk-tools, platform-tools, and build-tools for you.
You can control android sdk packages via the sdkmanager command.
You may want to add to your profile:
  'export ANDROID_SDK_ROOT=/usr/local/share/android-sdk'

This operation may take up to 10 minutes depending on your internet connection.
Please, be patient.

==> Satisfying dependencies
==> Downloading https://dl.google.com/android/repository/sdk-tools-darwin-3859397.zip
Already downloaded: /Users/tomasnovella/Library/Caches/Homebrew/Cask/android-sdk--3859397,26.0.1.zip
==> Verifying checksum for Cask android-sdk
==> Installing Cask android-sdk
==> 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
Error: Command failed to execute!

==> Failed command:
/usr/local/Caskroom/android-sdk/3859397,26.0.1/tools/bin/sdkmanager tools platform-tools build-tools;26.0.1

==> Standard Output of failed command:


==> Standard Error of failed command:
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)

ฉันถือว่าคำถามของคุณคือ "อะไรคือสาเหตุของข้อผิดพลาดนี้" คำตอบคือไม่พบคลาส javax.xml
สตีฟสมิ ธ

28
จริงๆแล้วคำถามนี้ถามคำถามที่ถูกต้องเกี่ยวกับการติดตั้ง android sdk เมื่อมี java9
jontro

17
ฉันมีปัญหานี้และฉันคัดลอก / วางบรรทัดแรกของข้อความแสดงข้อผิดพลาดของฉันลงใน google และคำถามนี้เป็นคำถามแรกที่เกิดขึ้น ไม่เพียงแค่นั้นหนึ่งในคำตอบด้านล่างนี้ก็แก้ไขได้ สิ่งนี้ไม่ควรปิดอย่างสมบูรณ์: ไม่ว่ากฎของคำถามคืออะไรคำถามนี้สามารถตอบสนองวัตถุประสงค์ทั้งหมดของไซต์ได้อย่างชัดเจน
Le Mot Juiced

1
ลบสิ่งที่เก่ากว่า Java 8 ออกจาก/Library/Java/JavaVirtualMachines
Dimitris

2
ปัญหาเกิดขึ้นกับ Java 8 และ Java 11 บน Ubuntu 18.04 ใช้แพคเกจและopenjdk-8-jdk openjdk-11-jdkไม่มีใครรู้ว่าจะต้องติดตั้งอะไรjavax/xml/bind/annotation/XmlSchemaหรือจะหลีกเลี่ยงjavax/xml/bind/annotation/XmlSchemaใน NDK หรือไม่?
jww

คำตอบ:


138

เช้านี้ฉันมีปัญหาคล้ายกัน (พยายามสร้างสำหรับ Android โดยใช้ Unity3D) ฉันสิ้นสุดถอนการติดตั้ง JDK9 และติดตั้งJava SE พัฒนาชุด 8u144 หวังว่านี่จะช่วยได้

  1. brew cask uninstall java # ถอนการติดตั้ง java9
  2. brew tap homebrew/cask-versions
  3. brew cask install java8 # install java8
  4. touch ~/.android/repositories.cfg # ที่ไม่มีไฟล์นี้ข้อผิดพลาดจะเกิดขึ้นในขั้นตอนถัดไป
  5. brew cask install android-sdk

2
มีข้อผิดพลาดใน windows 10 ลองนี้ยังคงไม่ทำงาน เคล็ดลับใด ๆ
Vedvart1

3
เยี่ยมมาก - สิ่งนี้ใช้ได้กับฉันในการสร้างแอพพลิเคชั่น Flutter ใน Android Studio ขอบคุณ!
Darragh Enright

20
สิ่งนี้หยุดทำงานการติดตั้ง cask brew java8 ไม่ทำงาน
kdy

4
คำสั่งที่ถูกต้องดูเหมือนจะเป็นตอนนี้brew cask install homebrew/cask-versions/java8
caesarsol

21
brew cask install homebrew/cask-versions/adoptopenjdk8ดูเหมือนว่าจะทำงาน
guruz

82

เพื่อแก้ไขข้อผิดพลาดนี้คุณสามารถปรับลดรุ่น Java ของคุณ

หรือส่งออกตัวเลือกต่อไปนี้บนเครื่องของคุณ:

Linux / MAC:

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

Windows :

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

และจะบันทึกไว้อย่างถาวรคุณส่งออกสามารถJAVA_OPTSในแฟ้มประวัติของคุณบนลินุกซ์ ( .zshrc, .bashrcและอื่น ๆ ) หรือเพิ่มเป็นตัวแปรสภาพแวดล้อมอย่างถาวรบน Windows


PS สิ่งนี้ใช้ไม่ได้กับ Java 11+ ซึ่งไม่มีโมดูล Java EE สำหรับตัวเลือกนี้เป็นความคิดที่ดีปรับลดรุ่น Java ของคุณหรือรอให้กระพือปรับปรุง

Ref: JDK 11: จุดสิ้นสุดของถนนสำหรับโมดูล Java EE


6
สิ่งนี้ใช้ได้กับฉันใน Ubuntu 18.04 w / OpenJDK 10.0.2
ทำลายล้างใน

3
ทำงานกับฉันใน macOS Mojave (10.14.2) กับ Java เวอร์ชัน "10.0.1" 2018-04-17
Subfuzion

4
สร้างข้อผิดพลาดใหม่สำหรับฉันใน macOS Mojave (10.14.2): เกิดข้อผิดพลาดระหว่างการเริ่มต้นของเลเยอร์การบูต java.lang.module.FindException: ไม่พบโมดูล java.se.ee
Randy

2
ฉันยังลอง 1.8.0_191 แต่ยังคงได้รับ: ข้อผิดพลาด: ไม่สามารถค้นหาหรือโหลดคลาสหลัก java.se.ee
Randy

1
ตัวเลือกนี้ไม่จำเป็นสำหรับ Java 8 และไม่ทำงานกับ Java 11 ซึ่งไม่มีโมดูล Java EE
valdeci

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

นี่เป็นการแก้ไขปัญหาบน Windows สำหรับฉัน

ที่มา 1 , แหล่งที่ 2


2
นอกจากนี้ยังใช้สิ่งนี้บน Ubuntu 16.04 (ใช้exportไม่ได้set) และจะแก้ไขปัญหาได้
Benjamin Conlan

อัจฉริยภาพ ขอบคุณมาก. คิดว่าฉันจะต้องเปลี่ยน JVM ของฉัน
สะเก็ด

1
ทำงานอย่างมีเสน่ห์ใน Windows 10 ด้วย Java 10
pabz

4
น่าเสียดายที่ดูเหมือนว่าจะถูกลบทั้งหมดใน Java 11
Alastair Maw

ทำงานexport JAVA_OPTS = '-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'บน Ubuntu 18.04
e2-e4

25

หากคุณไม่ต้องการเปลี่ยนเวอร์ชั่น Java (ฉันไม่ชอบ) คุณสามารถเปลี่ยนเวอร์ชั่นในเชลล์ได้ชั่วคราว:

วิ่งครั้งแรก

/usr/libexec/java_home -V

จากนั้นเลือกเวอร์ชันหลักหากคุณติดตั้งหรือติดตั้งก่อน:

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

ตอนนี้คุณสามารถเรียกใช้ sdkmanager


2
$ /usr/libexec/java_home -Vbash: /usr/libexec/java_home: No such file or directoryจะช่วยให้ apt-file search /usr/libexec/java_homeไม่ทำอะไรเลย
Tino

คุณตั้ง $ JAVA_HOME ไว้ถูกต้องหรือไม่ ทำงาน: echo "export JAVA_HOME=`/usr/libexec/java_home`" >> ~/.bashrc(หรือโปรไฟล์หากคุณใช้โปรไฟล์) - โหลดซ้ำ:. ~/.bashrc
Sarah A

ไม่มี/usr/libexecอย่างใดอย่างหนึ่ง คุณใช้ MacOS หรือเปล่า (ฉันอยู่บน Ubuntu / Linux และ Ubuntu / Windows)
Tino

ฉันใช้แม็ค Java_home ของคุณอยู่ที่ไหน
ซาร่าห์ A

21

บน Mac / Linux ใช้คำสั่งต่อไปนี้:

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

ใช้งานได้ทั้ง JDK 9 และ 10 โดยไม่ต้องแก้ไขสคริปต์ใด ๆ (sdkmanager, avdmanager)

สำหรับ Java 11 ดู: https://stackoverflow.com/a/51644855/798165


1
ขอบคุณ! มันแก้ปัญหาเมื่อคุณติดตั้ง jdk 9
Jorge Valvert

15

ผมพบว่าสองคำตอบที่ทำงานสำหรับฉันโดยไม่ต้องถอนการติดตั้ง JDK 10 (หรือ 9) create-react-appซึ่งผมต้องการสำหรับ ทั้ง JDK 9 และ 10 เข้ากันไม่ได้กับ android-sdk!


Siu Ching Pong-Asuka Kenji-แนะนำการแก้ไขsdkmanagerสคริปต์โดยแทนที่บรรทัดนี้:

DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'  

ด้วย:

DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

โปรดทราบว่าตัวดัดแปลงนี้จะถูกเขียนทับเมื่ออัพเดท sdkmanager
ลองดูโพสต์ของเขาและโพสต์ที่เขาลิงก์ไปเพื่อดูรายละเอียดเพิ่มเติม
การแก้ปัญหานี้ก็เป็นหนึ่งในวิธีการแก้ปัญหาที่กล่าวถึงในกระทู้ GitHubนี้


โพสต์ของเยอรมันระบุแหล่งที่มาของความขัดแย้งและนำเสนอการแก้ไขที่จะไม่ถูกเขียนทับโดยการปรับปรุง
เขาแนะนำให้เปลี่ยนชื่อ/Library/Java/JavaVirtualMachines/Info.plistเป็นวิธีปิดบังจากสคริปต์ที่ค้นหา Java เวอร์ชันสูงสุดที่อยู่ในระบบของคุณ ด้วยวิธีนี้ JDK 8 จะถูกส่งกลับเป็นค่าเริ่มต้น
อ้างถึง JDK 10 อย่างชัดเจนหรือโดยการตั้งค่าเป็น$JAVA_HOMEคุณสามารถใช้ JDK 10 แทนค่าเริ่มต้นเมื่อใดก็ตามที่จำเป็น
รายละเอียดอยู่ในโพสต์ของเขา


1
ทำงานได้อย่างสมบูรณ์แบบทางออกที่ดีที่สุด IMHO เพราะไม่ได้บังคับให้คุณดาวน์เกรด java
4levels

ยังไงก็เถอะหลังจากทดลองกับ ao มาเยอะมาก Android Studio, ปัญหานี้หายไปและข้อผิดพลาดใหม่คือCould not find or load main class java.se.ee- การคืนค่า DEFAULT_JVM_OPTS แก้ไขปัญหานี้และปัญหาก่อนหน้านี้หายไป ..
4 ระดับ

3
น่าเสียดายที่ตอนนี้ใช้งานไม่ได้ ผลลัพธ์คือ: เกิดข้อผิดพลาดระหว่างการเริ่มต้นของเลเยอร์บูต java.lang.module.FindException: ไม่พบโมดูล java.se.ee
Oscar

1
Upvoted stackoverflow.com/a/49630166/5411817สำหรับการแก้ปัญหาที่ถูกต้องสำหรับการติดตั้ง jdk-11 และ jdk1.8 โดยไม่ต้องดาวน์เกรด
harrisjb

15

คุณต้องเพิ่มข้อมูลต่อไปนี้ในโปรไฟล์ของคุณ (ใช้งานได้บน MacOS):

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

ไม่จำเป็นต้องแก้ไขอะไร



11

อัปเดต 2019-10:

ตามที่ระบุไว้ในตัวติดตามปัญหา Google ได้ทำงานกับเครื่องมือบรรทัดคำสั่ง Android SDKใหม่ที่ทำงานกับ JVM ปัจจุบัน (9, 10, 11+) และไม่ขึ้นอยู่กับโมดูล JAXB EE ที่เลิกใช้แล้ว!

คุณสามารถดาวน์โหลดและใช้เครื่องมือบรรทัดคำสั่ง Android SDKใหม่ภายใน Android Studio หรือโดยการดาวน์โหลดด้วยตนเองจากเซิร์ฟเวอร์ Google:

สำหรับรุ่นล่าสุดตรวจสอบ URL ที่ภายในrepository.xml

หากคุณคลายเครื่องมือบรรทัดคำสั่งด้วยตนเองให้ดูแลการวางไว้ในโฟลเดอร์ย่อยภายใน$ANDROID_HOME(เช่น$ANDROID_HOME/cmdline-tools/...)


1
เมื่อใช้ Java 9+ นี่ควรเป็นคำตอบจากนี้!
Luiggi Mendoza

9

Strangely Java9 เข้ากันไม่ได้กับ android-sdk

$ avdmanager
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.AvdManagerCli.run(AvdManagerCli.java:213)
    at com.android.sdklib.tool.AvdManagerCli.main(AvdManagerCli.java:200)
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

รวมคำสั่งทั้งหมดไว้ในที่เดียวเพื่อการอ้างอิงที่ง่าย:

$ sudo rm -fr /Library/Java/JavaVirtualMachines/jdk-9*.jdk/
$ sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
$ sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefPane

$ /usr/libexec/java_home -V
Unable to find any JVMs matching version "(null)".
Matching Java Virtual Machines (0):
Default Java Virtual Machines (0):
No Java runtime present, try --request to install

$ brew tap caskroom/versions
$ brew cask install java8
$ touch ~/.android/repositories.cfg
$ brew cask install android-sdk
$ echo 'export ANDROID_SDK_ROOT="/usr/local/share/android-sdk"' >> ~/.bash_profile
$ java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
$ avdmanager

Usage:
      avdmanager [global options] [action] [action options]
      Global options:
  -s --silent     : Silent mode, shows errors only.
  -v --verbose    : Verbose mode, shows errors, warnings and all messages.
     --clear-cache: Clear the SDK Manager repository manifest cache.
  -h --help       : Help on a specific command.

Valid actions are composed of a verb and an optional direct object:
-   list              : Lists existing targets or virtual devices.
-   list avd          : Lists existing Android Virtual Devices.
-   list target       : Lists existing targets.
-   list device       : Lists existing devices.
- create avd          : Creates a new Android Virtual Device.
-   move avd          : Moves or renames an Android Virtual Device.
- delete avd          : Deletes an Android Virtual Device.

8

ตั้งแต่ Java 11 ลบ JavaEE คุณจะต้องดาวน์โหลด jars และเพิ่ม classpath:

JAXB: https://javaee.github.io/jaxb-v2/

JAF: https://www.oracle.com/technetwork/articles/java/index-135046.html

จากนั้นแก้ไข sdkmanager.bat เพื่อให้ชุด CLASSPATH = ...ลงท้ายด้วย;% CLASSPATH%

ตั้ง CLASSPATH เพื่อรวม JAXB และ JAF:

set CLASSPATH=jaxb-core.jar;jaxb-impl.jar;jaxb-api.jar;activation.jar

จากนั้น sdkmanager.bat จะทำงาน


มันใช้งานได้ แต่ฉันได้รับคำเตือนนี้: คำเตือน: การเข้าถึงไตร่ตรองที่ผิดกฎหมายโดย com.sun.xml.bind.v2.runtime.reflect.opt.Injector (ไฟล์: / F: / android_sdk / java / jaxb-ri / lib / jaxb -impl.jar) เป็นวิธี java.lang.ClassLoader.defineClass (java.lang.String, byte [], int, int)
AndyMc

Ya ดูเหมือนว่า Java กำลังเริ่มเตือนการใช้โปรแกรมมิงที่ไม่ดีในการใช้การสะท้อนกลับเพื่อหลีกเลี่ยงการรักษาความปลอดภัยระดับซึ่ง JAXB ใช้ (Oracle ทำลายกฎของตนเอง);)
Peter Quiring

4

ฉันพบปัญหาเดียวกันเมื่อทำงาน:

$ /Users/<username>/Library/Android/sdk/tools/bin/sdkmanager "platforms;android-28" "build-tools;28.0.3"_

ฉันแก้ไขมันเป็น

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home    

$ ls /Library/Java/JavaVirtualMachines/

jdk-11.0.1.jdk      
jdk1.8.0_202.jdk

เปลี่ยน Java เพื่อใช้ 1.8

$ export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home'

จากนั้นคำสั่งเดียวกันจะทำงานได้ดี

$ /Users/<username>/Library/Android/sdk/tools/bin/sdkmanager "platforms;android-28" "build-tools;28.0.3"

นี่เป็นกรณีที่ดีที่สุด หากคุณส่งออก JAVA_OPTS แล้ว โปรดลบออกก่อนที่คุณจะทำตามขั้นตอนจากคำตอบนี้
Sword Jason

4

ฉันประสบปัญหาเดียวกัน แม้ว่าฉันจะเป็นนักพัฒนาที่ล้าสมัยเล็กน้อย (ยังคงใช้ windows เพื่อพัฒนา: P)

วิธีแก้ปัญหานี้บน windows :

ขั้นตอนที่ 1: ติดตั้ง jdk 8 หากไม่ได้ติดตั้งไว้ (jdk 9 หรือ 11 ไม่ทำงาน แต่คุณอาจติดตั้งไว้เพื่อใช้ในการใช้งาน dev อื่น ๆ )

ง่ายมากที่ใช้ Chocolatey:

choco ติดตั้ง jdk8

(หากติดตั้งโดยใช้ Chocolatey ให้ข้ามขั้นตอนที่ 2 และ 3)

ขั้นตอนที่ 2: ไปที่การตั้งค่าตัวแปรสภาพแวดล้อมและตั้งค่า JAVA_HOME เป็นไดเร็กทอรีการติดตั้งของ jdk 8

JAVA_HOME

ขั้นตอนที่ 3: ไปที่ตัวแปรพา ธ และเพิ่มไดเรกทอรีถังของ jdk 8 และย้ายไปด้านบน

Path_varriable

ขั้นตอนที่ 4: ปิดเซสชันเทอร์มินัลที่เปิดอยู่และเริ่มเซสชันใหม่

ขั้นตอนที่ 5: ขึ้นอยู่กับวัตถุประสงค์ของคุณในการรันเทอร์มินัล (อาจต้องเพิ่ม sdkmanager ไปยังพา ธ หรือเพียงนำทางไปยังไดเรกทอรี):

sdkmanager - อัปเดต

นั่นคือทั้งหมด! : O สนุกกับการกระพือ! : D


1
นี้พร้อมกับคำตอบที่ได้ผลสำหรับฉันบน windows 10!
mauriii

THANKSSSSSSSSSSSSSS
Raghav Joshi

2

สำหรับเครื่อง windows ถอนการติดตั้ง JDK ถ้ามากกว่า 1.8.172 ติดตั้ง JDK 1.8.172

ฉันกำลังเผชิญปัญหาเดียวกันใน windows 10 กับ java 10 ฉันถอนการติดตั้ง java 10 และติดตั้ง java8 มันทำงานได้ดีสำหรับฉันตอนนี้ :)


2

สำหรับผู้ใช้ Linux (ฉันใช้ Debian Distro, Kali) นี่คือวิธีที่ฉันจะแก้ไขของฉัน

หากคุณยังไม่มี jdk-8 คุณต้องการไปที่เว็บไซต์ของ oracle

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

ฉันได้รับ jdk-8u191-linux-x64.tar.gz

ขั้นตอนที่ 1 - การติดตั้ง Java Move และแกะมันออกในตำแหน่งที่เหมาะสมเช่นนั้น

$ mv jdk-8u191-linux-x64.tar.gz /suitablelocation/
$ tar -xzvf /suitablelocation/jdk-8u191-linux-x64.tar.gz

คุณควรได้รับโฟลเดอร์ซิปเช่น jdk1.8.0_191 คุณสามารถลบ tarball หลังจากนั้นเพื่อประหยัดพื้นที่

ขั้นตอนที่ 2 - การตั้งค่าทางเลือกไปยังตำแหน่ง Java เริ่มต้น

$ update-alternatives --install /usr/bin/java java /suitablelocation/jdk1.8.0_191/bin/java 1
$ update-alternatives --install /usr/bin/javac javac /suitablelocation/jdk1.8.0_191/bin/javac 1

ขั้นตอนที่ 3 - เลือกทางเลือกของคุณเป็นค่าเริ่มต้น

$ update-alternatives --set java /suitablelocation/jdk1.8.0_191/bin/java
$ update-alternatives --set javac /suitablelocation/jdk1.8.0_191/bin/javac

ขั้นตอนที่ 4 - ยืนยันเวอร์ชันจาวาเริ่มต้น

$ java -version

หมายเหตุ

  1. ในบทความต้นฉบับที่นี่: https://forums.kali.org/showthread.php?41-Installing-Java-on-Kali-Linuxมีการตั้งค่าปลั๊กอินเริ่มต้นสำหรับ mozilla ด้วย ฉันคิดว่าเราไม่จำเป็นต้องใช้ปลั๊กอินเพราะเราแค่พยายามพัฒนาสำหรับ Android
  2. เช่นเดียวกับในคำตอบของ @ spassvogel คุณควรวางไฟล์ @ repositories.cfg ไว้ในไดเรกทอรี ~ / .android ของคุณเช่นนี้เพื่อปรับปรุงรายการ repo ของเครื่องมือ
  3. การย้ายบางสิ่งรอบ ๆ อาจต้องใช้สิทธิ์ของรูท ใช้ sudo อย่างชาญฉลาด
  4. สำหรับการใช้งาน sdkmanager ดูคู่มืออย่างเป็นทางการ: https://developer.android.com/studio/command-line/sdkmanager

1

เรียกใช้java -versionและjavac -versionคำสั่งในบรรทัดคำสั่งเพื่อให้แน่ใจว่ามาจาก JDK เดียวกัน (เช่น: รุ่น 1.8.0_181)

ถ้าไม่ใช่คุณต้องแก้ไขPATHตัวแปรเพื่อให้ชี้ไปยัง JDK เดียวเท่านั้น หากคุณไม่แน่ใจว่าจะทำอย่างไรให้ถอนการติดตั้งอินสแตนซ์ Java อื่นทั้งหมดยกเว้น Java 8 (เพิ่ม / ลบโปรแกรมใน Windows) สำหรับวันนี้ทั้ง Unity และ Android ขอแนะนำให้คุณใช้ JDK 8

ด้วย Java 8 ไม่จำเป็นต้องเอ็กซ์พอร์ตjava.se.eeโมดูลดังแสดงในคำตอบอื่น ๆ นอกจากนี้คุณยังสามารถลบตัวแปรสภาพแวดล้อมใด ๆJAVA_OPTSหรืออื่น ๆที่คุณได้ตั้งค่าไว้


1

ฉันเพิ่งแก้ไขปัญหานี้ได้โดยถอนการติดตั้ง JDK เวอร์ชันที่สูงขึ้นและติดตั้ง JDK 8 หลังจากติดตั้ง JDK คุณต้องระบุพา ธ จากนั้นคุณต้องเปิดพรอมต์คำสั่งใน "C: \ Users \ Milan Adhikari \ AppData \ Local \ Android \ Sdk \ tools" และเรียกใช้ "sdkmanager - อัปเดต" ซึ่งจะอัปเดต sdk ของคุณแล้วคุณต้องเรียกใช้ "หมอกระพือ - -android-license "ในหน่วย cmd และยอมรับไลเซนส์ทั้งหมด
ตอนนี้ปัญหาของคุณควรได้รับการแก้ไข


1

ในกรณีของฉันฉันต้องการทั้ง JDK 8 (พยายามใช้ AVD และ SDK manager ใน Qt ภายใต้ ubuntu) และ 11 สำหรับเครื่องมือต่าง ๆ การลบเวอร์ชัน 11 ไม่ใช่ตัวเลือก

โซลูชัน 'JAVA_OPTS' ไม่ได้ทำอะไรเลย ฉันไม่ชอบการส่งออก JAVA_HOME มากเพราะมันอาจบังคับให้คุณเปิดใช้เครื่องมือใด ๆ ที่เรียกว่า utils เหล่านี้จากเชลล์ตัวเดียวกัน (เช่น Qt) หรือบังคับให้คุณทำสิ่งนี้ถาวรซึ่งไม่สะดวก

ดังนั้นสำหรับฉันการแก้ปัญหาค่อนข้างง่าย เพิ่มสิ่งนี้ในบรรทัดที่สองของ ~ / Android / tools / bin / sdkmanager และ ~ / Android / tools / bin / avdmanager:

JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"

(หรือเส้นทางใดก็ตามที่คุณต้องการไปถึง rev 8 jdk)

ด้วยสิ่งนี้เครื่องมือบรรทัดคำสั่งเหล่านี้ทำงานในโหมดสแตนด์อะโลนพวกเขายังทำงานเมื่อเรียกใช้โดยเครื่องมืออื่น ๆ เช่น Qt และ jdk 11 ยังคงเป็นค่าเริ่มต้นของระบบสำหรับผู้อื่น ไม่จำเป็นต้องผสม libs ฯลฯ ...

ข้อเสียเพียงอย่างเดียวคือการอัพเดทเครื่องมือบรรทัดคำสั่งเหล่านี้จะลบการแก้ไขเหล่านี้ซึ่งคุณจะต้องใส่กลับเข้าไป


TOP! ขอบคุณ!
Funder

0

ปรับลดรุ่น Java ของคุณระบบใดก็ตามหรือ IDE

ตรวจสอบให้แน่ใจว่าเวอร์ชัน Java ไม่สูงกว่า 8

ในกรณีของฉันฉันเปลี่ยน verion java java นี้แก้ไขปัญหาของฉัน ป้อนคำอธิบายรูปภาพที่นี่


0

เมื่อ Android stuio / jre ของคุณใช้จาวารุ่นอื่นคุณจะได้รับข้อผิดพลาดนี้ เพื่อแก้ปัญหาเพียงตั้งค่า Android studio / jre เป็น JAVA_HOME ของคุณ และถอนการติดตั้ง java ของคุณเอง


0

สำหรับฉันฉันติดตั้ง java เวอร์ชัน 8 และเพียงแค่เลือกรุ่น java ใน "สถานที่ตั้ง JDK": ป้อนคำอธิบายรูปภาพที่นี่


0

สำหรับสถานการณ์ของฉันฉันใช้ sdkman เพื่อจัดการจาวาหลายเวอร์ชัน ฉันตั้งค่าจาวาเวอร์ชันเริ่มต้นเป็น 13 ติดตั้งเวอร์ชัน 8 และตอนนี้ก็ใช้ได้


0

วิธีที่ดีที่สุดคือใช้คำสั่งด้านล่าง

   $ wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
   $ unzip \platform-tools-latest-linux.zip
   $ sudo cp platform-tools/adb /usr/bin/adb
   $ sudo cp platform-tools/fastboot /usr/bin/fastboot

ตอนนี้ใช้เวอร์ชัน adb เพื่อตรวจสอบว่ามีการอัปเดตแล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.