Herkese merhaba,
Ortalama 1,5 yıl ara verdikten sonra yeniden yazı yazmaya başlayınca nasıl bir giriş yapacağım konusunda bi hayli düşünmek zorunda kaldım. Neyse bir şekilde giriş yaptık sanırım 🙂
Hemen problemimizi tanımakla başlayalım..
Android geliştiriciler gayet iyi bilir ki işe başlamadan Android SDK içindeki lisansları onaylamak gerekiyor. Bunun için gerekli kurumları ve yol ayarlarını yaptıktan sonra aşağıdaki komutu çalıştırmak yeterlidir. Ardından tek tek onaylamak gerekiyor.
Komutumuzu çalıştırıyoruz…
1 |
sdkmanager --licenses |
…ve sonuç hüsran 🙂

Gördüğünüz gibi Java tarafından bir hata fırlatıldı.
Şimdi bir de Flutter tarafına bakalım. Flutter geliştiricileri de Android SDK ile geliştirme yaptıkları için aynı hata ile karşılaşmaktadırlar.
Komutumuzu çalıştırıyoruz…
1 |
flutter doctor --android-licenses |
…ve sonuç yine hüsran 🙂

Gördüğünüz gibi ikisi de aynı hata mesajını fırlattı. Sorunu çözebilmek için ilk önce sorunun gerçekten nereden kaynaklandığını anlamamız gerekiyor.
1 2 3 4 5 6 7 8 9 10 11 |
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.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73) at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48) Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 5 more |
Hata mesajını dikkatlice inceleyecek olursak çok güzel bir ipucu görebiliriz.
1 |
javax/xml/bind/annotation/XmlSchema |
Bu hatayı Java geliştiricileri bir süredir çok iyi biliyorlar. Java dilini geliştirenler bir gün terslerinden kalkmışlar ve demişler ki bu Android geliştiricileri dertsiz tasasız kod yazıyorlar. Biz en iyisi bu geliştiricilerin başına tatlı bir bela açalım da sık sık bizi akıllarına getirsinler. Tabi bu işin latifesi 🙂
Sorunun kaynağı tam olarak burada anlatılmış.

Resim koyma kaynak ver dediğinizi duyar gibiyim. İşte buyrun kaynak linki : https://stackoverflow.com/a/52502208
Sorunun sebebini anladığımıza göre şimdi bizdeki kaynağını tespit edelim. Bunun için sistemde kurulu olan Java sürümüne bakmamız gerekiyor.

Gördüğünüz gibi benim sistemde Java’nın 13. sürümü kurulu. Hatanın kaynağı da tam olarak burası oluyor. Java’nın 13. sürümünde JAXB paketi olmadığı için hata veriyor.
Sorunu çözmek için en basit yöntem sisteminizde kurulu olan aktif Java sürümünü 8 olarak değiştirmektir. Bunun için ya tüm sürümleri kaldırıp Java 8’i kurabilirsiniz ya da işletim sisteminize uygun biçimde geçerli sürümü 8 yaparsınız. İkisi de sorunu çözecektir.
Ben bu yoldan değil de daha uzun bir yoldan ilerlemeyi tercih ettim. Benim sistemde gördüğünüz gibi 3 farklı sürüm kurulu.

Ben kendi işlerim gereği 3 sürümü de saklamalıyım. Bu nedenle sadece Java 8’i kuramam.
Sorunu biraz daha derinlemesine incelediğimde sorunun kaynağının sdkmanager
olduğunu gördüm. Sorun madem sadece sdkmanager
tarafında çıkıyor o zaman tüm sistemi etkileyecek bir değişik yapmak yerine sadece sorunun kaynağına yönelik çözüm üretmek daha doğru bir tercih olur diyerek sdkmanager
dosyasını incelemeye karar verdim.
İşletim sistemine göre ve yazılımcının tercihine göre Android SDK’nın konumu değişmektedir. Bu nedenle siz de kendi sisteminizde kurulu olan Android SDK klasörünü açın. Ardından o klasör içindekitools/bin/
klasörünü açın.
Örnek olması için benim sistemdeki tam yolu inceleyebilirsiniz.
1 |
/Volumes/Backup/Workspace/Libraries/android/sdk/tools/bin/ |
Eğer bin/
klasörüne ulaşabildiyseniz artık sdkmanager
dosyasını düzenleyebiliriz. Sisteminizde kurulu olan herhangi bir metin editörü ile bu sdkmanager
dosyasını açın.

Gördüğünüz gibi 69. satırdan 89. satıra kadar işaretledim. Kodu biraz incelediğimizde JAVACMD
değişkenine Java’nın geçerli sürümünün yolu atanmış. Demek ki burada bir değişiklik yaparsak sistemdeki diğer tarafları etkilemeden doğruca sdkmanager
‘a özel bir değişiklik yapmış oluruz.
Buraya kadar geldikten sonra artık yapacak pek fazla iş kalmamış oluyor. Şimdi eğer sisteminizde Java 8 sürümü yoksa önce onu kurmanız gerekiyor. Kurulumun ardından tekrar aşağıdaki komutla kurulu sürümleri kontrol edin.

Gördüğünüz gibi kurulu sürümlerin klasör yolları da yanında yazıyor. Buradan Java 8’in yolunu kopyalayın. Ardından aşağıdaki adımları takip edin.
Böyleydi : /Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home
Bunun ekledim: /bin/java
Böyle oldu: /Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/bin/java
Siz de kendi sisteminize göre yolunuzu oluşturduktan aşağıdaki gibi değişkene atayın.
1 |
JAVACMD="/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/bin/java" |
Son olarak oluşturduğumuz değişkeni 89. satırın altına ekleyin.

sdkmanager
açılırken sistemden Java yolunu isteyecektir. Varsayılan Java sürümü ne olursa olsun atamanın ardından biz tekrar o sürümü Java 8 ile değiştirmiş olacağız. Böylelikle sorunu sdkmanager
‘a özel çözmüş olacağız.
Artık gönül rahatlığıyla lisansları onaylayıp kod yazmaya başlayabilirsiniz.
Faydalı olması dileğiyle…
İlk Yorumu Siz Yapın