Android .idea / misc.xml's languageLevel etiketi JDK'ları değiştirmeye devam ediyor


178

LanguageLevel anahtarı, farkında olmadığım nedenlerle JDK_1_8 yerine JDK_1_7 olarak değiştirildi.

Ne oluyor olabilir?

Bunun, proje üzerinde çalışan diğer geliştiricilerin IDE'si ile bir ilgisi var mı? Belki başka bir Android Studio ayarı var?

Kaynak kontrolü altındaki dosyaların değiştiğini fark ettikten sonra açılan şey:

$ git diff
diff --git a/.idea/misc.xml b/.idea/misc.xml
index fbb6828..5d19981 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -37,7 +37,7 @@
     <ConfirmationsSetting value="0" id="Add" />
     <ConfirmationsSetting value="0" id="Remove" />
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">

Önemli olması halinde benim gitignore'um bu.

.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures

Öyle ya da böyle kalacak şekilde nasıl ilerlerim?


1
Yaptım. Yanıt eklendi.
kraftydevil

4
Sadece şunu belirtmek istiyorum: intellij-support.jetbrains.com/hc/en-us/articles/… ne olması gerektiğine dair resmi cevaptır .gitignoreve bu geçici çözüm buna aykırıdır. Kod incelemesine geçmeden önce bazı standart kötü uygulamaları önlemek için kullandığımız denetimler / tiftik ayarları gibi proje özelliklerini tüm geliştiricilerle paylaşma yeteneğini kaybedersiniz. Bunu çözmek /.idea/misc.xmliçin sadece .gitignoredosyaya ekleyebilirsiniz .
Matt Quigley

4
Bu sorunu kendim fark ettim ve farklı bir ekip üyesi iş yaptıktan sonra bile değildi. Kendi işimi yaptım, bir taahhütte bulundum, biraz daha çalıştım ve beni tekrar açtığını fark ettim. Beni daha çok ilgilendiren şey bu. Eğer farklı bir ekip üyesi ise, neden değiştiğini biliyorum, ancak kişisel yerel gelişim sırasında rastgele değiştirmek endişe verici ve kafa karıştırıcı. Bununla ilgili bir fikrin var mı?
John Shelley

3
Aynı problemim var, dil seviyesi 1.7 ile 1.8 arasında değişiyor.
Han He

Yanıtlar:


42

Bu beni bir süre delirtiyordu. Açıkça benim java sürümünü ayarlayarak düzeltmek başardı build.gradle:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

Kullandığınız eğer Not VERSION_1_7, sen kullandığı başka bir projeye Android Studio veya anahtarı başlatmak soğuk VERSION_1_8, bu değiştirecektir .idea/misc.xmlkullanımına JDK_1_8. Bir derecelendirme senkronizasyonu yapmak onu kullanmaya geri döndürür JDK_1_7. Kullanıyorsanız VERSION_1_8bu sorunla karşılaşmazsınız.

Mükemmel değil ama bunun şimdilik yeterli olduğunu gördüm.


2
Şu anda, kullanmak ne de önerildiği üzere gömmek JDK kullanmak istemiyorsanız stackoverflow.com/a/40083824/1815624 değişen sorunu önlemek gelmez gradle seçeneğini kullanarak. Bunu not etmek isteyebilirsiniz, code.google.com/p/android/issues/detail?id=172115
CrandellWS

Bunu projeye mi yoksa modül dosyasına mı koymalıyım?
rraallvv

@rraallvv modül
Noel

Bu tür "benim için" düzeltir. Gradle dosyamda bu seçenekler var. Studio'yu açarsam (bir sınıflandırma senkronizasyonu yapar ve), misc.xml dosyasını 1_8 olarak ayarlar. Eğer inşa edersem, 1_7 olarak ayarlanacaktır. Daha sonra dereceyi senkronize edersem 1_8'e geri dönecek ve bina artık 1_7'ye geri dönmeyecek. Gradle senkronizasyonu yapmak benim için asla 1_7 olarak ayarlamaz, gradle senkronizasyonundan sonra her zaman 1_8 olur. Stüdyosu her açışımda 1_8 olarak ayarlanır.
David

JDK 1.8 kullanmak istiyorsanız: android {compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}}
Beatrice Lin

24

Android Studio 2.2'ye güncelledikten sonra Google'dan buraya geldim. Bu başkalarına yardımcı olabilir.

Android Studio 2.2'den beri, JDK, sisteminize indirip yüklemeniz yerine onunla paketlenmiştir. JDK projem 2.2'ye güncellediğimde değişmeye başladı, muhtemelen şu anda mevcut olan iki sürüm arasındaki karışıklıktan dolayı - sistem ve gömülü.

Dosya> Proje Yapısı'na (Mac OS) girerseniz, SDK Konumu sekmesinde JDK konumu vardır. Artık gömülü JDK'yı kullanmak için yeni bir ayar var. Bir kez geçtim, sorunumu çözdü.

resim açıklamasını buraya girin


7
Bunu (Win10'da olsa da) yaptım ama fark ettiğim gibi yeniden başladığımda sorun devam ediyor :(
CesarPim

2
Bu sorunu çözmek için çalışır. @CesarPim'den bahsedildiği gibi, yapı senkronize olmadığında yeniden ortaya çıkıyor. Ardından gradle sync çalıştırıldığında değişiklik silinir. Genel olarak güzel bir temiz çözüm, daha öncekinden daha iyi - teşekkürler!
Gene Bo

5
Ne demek istiyorsun @gnB? Benimle 1.7 ve 1.8 arasında gidip geliyor ... Kararlı bir çözüm bulamadım. Sen?
CesarPim

3
@gnB evet, benimle aynı, ama yine de AS'yi her başlattığımda bu beni rahatsız ediyor ... olmamalı
CesarPim

15
Android Studio 3.0'da hala oluyor ve bu öneri bunu düzeltmedi. Zaten "gömülü JDK" seçtim ve yine de 1_7'den 1_8'e ve hala belirgin bir sebep olmadan geri dönmeye devam ediyor.
Greg Ennis

9

Görünüşe göre dosya sürüm kontrolü altında saklanmalıdır . Git'te tutmayı öneririm, ancak tüm yerel değişiklikleri görmezden gelirim:

git update-index --assume-unchanged .idea/misc.xml

Dalları değiştirirken bu dosyalarda çakışma olabilir. Sonra dosyaları sıfırlamak için aşağıdaki imlreset komut dosyasını kullanabilirsiniz:

#!/bin/bash                                                                     
while read f                                                                    
do                                                                              
  [ -f $f ] && git checkout $f                                                    
done <<!                                                                        
app/app.iml                                                           
wear/wear.iml                                                                   
!

Sık sık yaparsanız bu dosyaları yoksaymak için benzer bir komut dosyası oluşturun.


Bu, şubeleri değiştirirken sorunlardan kaçınmaz, IDE dosyayı değiştirirse, farklı bir şubeye ödeme yapmadan önce değişikliklerin bir şekilde kaldırılması gerekir.
ergosys

@ergosys, yorumunuz için teşekkürler. Bu gibi durumlarda kullandığım komut eklendi.
Paweł Nadolski

1
Dosyayı görmezden gelmek, anti-bir çözümdür ve yararlı bir çözüm bile değildir. Nedeni düzeltmez, semptomları gizler ve bunu yaparak basit problemleri yaratır ve gizler, böylece bulmak ve düzeltmek zorlaşırlar.
Barry Staes

@BarryStaes, geri bildiriminiz için teşekkür ederiz. Bu sorun için mükemmel bir çözüm bulamadım (diğer çözümler işe yaramadı) ve bu benim ve birkaç kişi için işe yarıyor. Bunun, dosyaları değiştirdiklerini gizleyerek tamamen görmezden gelmediğini unutmayın. Bu dosyalar sık ​​sık ve rastgele değiştirilebildiğinden, git komutları yaparken onları filtrelemeye izin verir. Bunları istediğiniz zaman taahhüt edebilirsiniz.
Paweł Nadolski

1

Bu sorunu, .idea klasörünü kaynak denetimine göndermeyi bırakıp durdurduğumda çözdüm.

Sorun, bu dosyaların bazılarının makineye özel yapılandırmalar olması, bu nedenle onları paylaşmak bir sorun olabilir.

Onu ve diğer rahatsız edici dosyaları kaldırmak iki aşamalı bir git işlemiydi:

1) Bu .gitignore'u ekleyin ( https://stackoverflow.com/a/32942758/869936 adresinden ):

#built application files
*.apk
*.ap_

# files for the dex VM
*.dex

# Java class files
*.class

# generated files
bin/
gen/

# Local configuration file (sdk path, etc)
local.properties

# Windows thumbnail db
Thumbs.db

# OSX files
.DS_Store

# Eclipse project files
.classpath
.project

# Android Studio
*.iws
*.iml
.idea
.gradle
build/
*/build/

2) .gitignore öğesinin her satırı git rm lineiçin komut satırından çalıştırın .

Misal:

$ git rm *.iws
$ git rm *.iml
$ git rm .idea
$ git rm .gradle
$ git rm build/
$ git rm */build/

Değişiklikleri ekleyin ve uygulayın

Şimdi bu dosyalar Android Studio projesini açtığınızda oluşturulacak ve git'e eklenmeyecek.


20
İntellij-support.jetbrains.com/hc/ en- us/articles/ … 'a göre , ve dışında, makineye özgü olmadığı için .ideaklasörün çoğunu işlemeniz gerekir . Bununla birlikte, bu tür sorunlar nedeniyle sürüm kontrolü açısından çok iyi düşünülmüş değil. Sonunda karışıklığı çözeceklerini düşünüyorum. workspace.xmltasks.xml
Matt Quigley

Anlaşmazlıkların olduğunu anlıyorum. Aynı zamanda, geliştirme ekibimdeki bu .gitignore'u kullanmanın herhangi bir sorunun farkında değilim. Eğer daha fazla bilgi sahibi olsaydım daha fazla tavsiyede bulunabilirdim, ama şu anda bizim için çalışan bu. Bir sorun ortaya çıkarsa cevabımı değiştireceğim.
kraftydevil

31
Evet, hepimiz git'i bu dosyayı görmezden gelmeye nasıl zorlayacağımızı biliyoruz. Ama asıl soru neden JDK_1_8'den JDK_1_7'ye (ve bazen tekrar geri dönüyor) değişmeye devam ediyor?
Scott Biggs

Android Studio 2.2 ile başıma başladı. Bence AS 2.2'den başlayarak JDK'yı bir araya getirdiler, bu yüzden AS içindeki sistem ile biri arasında karıştırılmaya devam ediyor.
RED_

3
Bu soruya hiç cevap vermiyor. Hangisi garip çünkü sordun. Sorunu nasıl görmezden gelirsiniz, ki bu sizin için iyi olabilir, neden değişmeye devam ettiğini ve bunu yapmayı nasıl durduracağımı bilmek istiyorum.
David
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.