แท็ก languageLevel ของ Android .idea / misc.xml ยังคงเปลี่ยนแปลง JDK


178

คีย์ languageLevel ได้รับการเปลี่ยนจาก JDK_1_8 เป็น JDK_1_7 ด้วยเหตุผลที่ฉันไม่ทราบ

จะเกิดอะไรขึ้น?

สิ่งนี้เกี่ยวข้องกับ IDE ของผู้พัฒนารายอื่นที่ทำงานในโครงการหรือไม่ บางทีพวกเขาอาจมีการตั้งค่า Android Studio อีกหรือไม่

นี่คือสิ่งที่ปรากฏขึ้นหลังจากฉันสังเกตเห็นไฟล์ภายใต้การควบคุมแหล่งที่มีการเปลี่ยนแปลง:

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

นี่คือ gitignore ของฉันในกรณีที่มันสำคัญ

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

ฉันจะดำเนินการต่อเพื่อให้มันอยู่ทางเดียวหรืออื่น ๆ ?


1
ฉันทำ. เพิ่มคำตอบแล้ว
kraftydevil

4
ฉันแค่อยากจะชี้ให้เห็นว่าintellij-support.jetbrains.com/hc/en-us/articles/…เป็นคำตอบอย่างเป็นทางการสำหรับสิ่งที่ควรจะเป็น.gitignoreและวิธีแก้ปัญหานี้ขัดกับสิ่งนี้ คุณสูญเสียความสามารถในการแบ่งปันคุณสมบัติโครงการให้กับนักพัฒนาทั้งหมดเช่นการตรวจสอบ / การตั้งค่าผ้าสำลีที่เราใช้เพื่อป้องกันการปฏิบัติที่ไม่ดีมาตรฐานก่อนที่จะได้รับการตรวจสอบโค้ด คุณก็สามารถเพิ่ม/.idea/misc.xmlไปยัง.gitignoreไฟล์ที่จะแก้ปัญหานี้
Matt Quigley

4
ฉันสังเกตเห็นปัญหานี้ด้วยตัวเองและมันก็ไม่ได้เกิดขึ้นหลังจากสมาชิกในทีมคนอื่นทำงานที่มุ่งมั่น ฉันทำงานของตัวเองผลักดันให้ทำบางอย่างเพิ่มเติมและสังเกตเห็นว่ามันเปิดให้ฉันอีกครั้ง นั่นคือสิ่งที่ฉันกังวลมากขึ้น ถ้าเป็นสมาชิกในทีมคนอื่นฉันก็รู้ว่าทำไมมันถึงเปลี่ยนไป แต่การเปลี่ยนแบบสุ่มระหว่างการพัฒนาท้องถิ่นส่วนบุคคลนั้นเกี่ยวกับและทำให้สับสน มีข้อมูลเชิงลึกเกี่ยวกับเรื่องนี้หรือไม่?
John Shelley

3
ฉันมีปัญหาเดียวกันระดับภาษาจะเปลี่ยนไประหว่าง 1.7 และ 1.8
ฮั่นเขา

1
หัวข้อที่เกี่ยวข้องกับstackoverflow.com/questions/17637179/…
CrandellWS

คำตอบ:


42

นี่ทำให้ฉันกลัวถั่วซักพักนึง ฉันสามารถแก้ไขได้โดยการตั้งค่าเวอร์ชัน java ในbuild.gradle:

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

โปรดทราบว่าหากคุณกำลังใช้VERSION_1_7เมื่อคุณเย็นเปิดสตูดิโอ Android หรือสลับไปยังโครงการอื่นที่ใช้VERSION_1_8ก็จะปรับเปลี่ยนการใช้งาน.idea/misc.xml JDK_1_8ทำซิงค์ gradle JDK_1_7จะกลับก็กลับไปใช้ หากคุณกำลังใช้VERSION_1_8งานคุณจะไม่มีปัญหานี้

มันไม่สมบูรณ์แบบ แต่ฉันพบว่ามันดีพอสำหรับตอนนี้


2
ขณะนี้ไม่ใช้หรือไม่ต้องการใช้ JDK แบบฝังตามที่แนะนำในstackoverflow.com/a/40083824/1815624 โดยใช้ตัวเลือกการไล่ระดับสีเพื่อป้องกันปัญหาการเปลี่ยนแปลง อาจต้องการทราบสิ่งนี้แม้ว่าcode.google.com/p/android/issues/detail?id=172115
CrandellWS

ฉันควรใส่สิ่งนี้ไว้ในโครงการหรือในไฟล์โมดูลหรือไม่?
rraallvv

@rraallvv โมดูล
Noel

"แก้ไข" ชนิดนี้สำหรับฉัน ฉันมีตัวเลือกเหล่านั้นในไฟล์ gradle ของฉัน ถ้าฉันเปิดสตูดิโอ (มันทำการซิงค์แบบไล่ระดับและ) มันตั้งค่า misc.xml เป็น 1_8 ถ้าฉันสร้างมันจะได้รับการตั้งค่ากลับเป็น 1_7 ถ้าฉันซิงค์การไล่ระดับเสียงมันจะกลับสู่ 1_8 และสิ่งปลูกสร้างจะไม่ตั้งกลับเป็น 1_7 อีกต่อไป การทำ gradle sync ไม่เคยตั้งไว้ที่ 1_7 สำหรับฉันมันจะอยู่เสมอ 1_8 หลังจากการซิงค์แบบ gradle ทุกครั้งที่ฉันเปิดสตูดิโอมันจะถูกตั้งค่าเป็น 1_8
David

หากคุณต้องการใช้ JDK 1.8: android {compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}}
Beatrice Lin

24

มาที่นี่จาก Google หลังจากอัปเดตเป็น Android Studio 2.2 สิ่งนี้อาจเป็นประโยชน์กับผู้อื่น

ตั้งแต่ Android Studio 2.2, JDK ได้รับการรวมกับมันแทนที่จะคุณต้องดาวน์โหลดและติดตั้งบนระบบของคุณ โครงการของฉัน JDK เริ่มเปลี่ยนเมื่อฉันอัปเดตเป็น 2.2 อาจเป็นเพราะความสับสนระหว่างสองเวอร์ชันที่มีตอนนี้ - ระบบและฝังตัว

หากคุณไปที่ไฟล์> โครงสร้างโครงการ (Mac OS) บนแท็บตำแหน่ง SDK จะมีตำแหน่ง JDK ตอนนี้มีการตั้งค่าใหม่เพื่อใช้ JDK ในตัว เมื่อฉันเปลี่ยนมาใช้มันก็แก้ปัญหาได้

ป้อนคำอธิบายรูปภาพที่นี่


7
ฉันทำสิ่งนี้ (แม้ว่าใน Win10) แต่ทันทีที่ฉันรีสตาร์ทตามที่ฉันสังเกตเห็นปัญหายังคงดำเนินต่อไป :(
CesarPim

2
วิธีนี้ใช้เพื่อแก้ไขปัญหา ในฐานะที่เป็น @CesarPim กล่าวถึงฉันเห็นว่ามันจะ resurface เมื่อสร้างการซิงค์ เรียกใช้การซิงค์ไล่ระดับแล้วล้างการเปลี่ยนแปลง โดยรวมแล้วเป็นวิธีที่สะอาดดีดีกว่าเมื่อก่อน - ขอบคุณ!
Gene Bo

5
@gnB หมายถึงอะไร กับฉันมันจะไปเรื่อย ๆ ระหว่าง 1.7 ถึง 1.8 ... ฉันไม่สามารถหาทางออกที่มั่นคงได้ คุณเป็นอย่างไร
CesarPim

3
@gnB ใช่เหมือนกันกับฉัน แต่ก็ยังทำให้ฉันรำคาญว่ามันเกิดขึ้นทุกครั้งที่ฉันเปิดตัว AS ... มันไม่ควรเกิดขึ้นเลย
CesarPim

15
ยังคงเกิดขึ้นใน Android Studio 3.0 และคำแนะนำนี้ไม่สามารถแก้ไขได้ ฉันได้เลือก "ฝังตัว JDK" แล้ว แต่ก็ยังคงเปลี่ยนจาก 1_7 เป็น 1_8 และย้อนกลับโดยไม่มีเหตุผลที่ชัดเจน
เกร็กเอนนิส

9

ดูเหมือนว่าไฟล์ควรเก็บไว้ภายใต้การควบคุมรุ่น ฉันจะเสนอให้เก็บไว้ในคอมไพล์ แต่ไม่สนใจการเปลี่ยนแปลงในท้องถิ่นทั้งหมด:

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

เมื่อเปลี่ยนสาขาอาจมีความขัดแย้งในไฟล์เหล่านี้ จากนั้นคุณสามารถใช้สคริปต์imlresetต่อไปนี้เพื่อรีเซ็ตไฟล์:

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

สร้างสคริปต์ที่คล้ายกันเพื่อละเว้นไฟล์เหล่านี้หากคุณทำบ่อยๆ


สิ่งนี้จะไม่หลีกเลี่ยงปัญหาเมื่อสลับสาขาหาก IDE เปลี่ยนไฟล์การเปลี่ยนแปลงจะต้องถูกลบออกก่อนที่คุณจะสามารถชำระเงินสาขาอื่นได้
ergosys

@ergosys ขอบคุณสำหรับความคิดเห็น เพิ่มสคริปต์ที่ฉันใช้ในกรณีเช่นนี้
Paweł Nadolski

1
การเพิกเฉยต่อไฟล์เป็นวิธีแก้ปัญหาและไม่ใช่วิธีแก้ปัญหาที่เป็นประโยชน์ มันไม่ได้แก้ไขสาเหตุมันซ่อนอาการและโดยการทำเช่นนั้นจะสร้างและปิดบังปัญหาง่าย ๆ เพื่อที่พวกเขาจะหาและแก้ไขได้ยาก
Barry Staes

@BarryStaes ขอบคุณสำหรับคำติชม ฉันไม่พบวิธีแก้ไขปัญหาที่สมบูรณ์แบบสำหรับปัญหานี้ (โซลูชันอื่นไม่ทำงาน) และอันนี้ใช้ได้สำหรับฉันและคนอื่น ๆ ไม่กี่คน โปรดทราบว่าการดำเนินการนี้ไม่ได้เพิกเฉยต่อไฟล์อย่างสมบูรณ์เพียงซ่อนความจริงที่ว่ามีการเปลี่ยนแปลง เนื่องจากไฟล์เหล่านี้สามารถเปลี่ยนแปลงได้บ่อยครั้งและแบบสุ่มจึงอนุญาตให้กรองได้เมื่อทำคำสั่ง git คุณยังสามารถส่งมอบได้ทุกเมื่อที่คุณต้องการ
Paweł Nadolski

1

ฉันแก้ไขปัญหานี้เมื่อฉันลบและหยุดการยอมรับโฟลเดอร์ .idea เพื่อควบคุมแหล่งที่มา

ปัญหาคือไฟล์เหล่านี้บางไฟล์เป็นการกำหนดค่าเฉพาะของเครื่องดังนั้นการแบ่งปันไฟล์อาจเป็นปัญหา

การลบและไฟล์ที่ละเมิดอื่น ๆ เป็นกระบวนการ git สองขั้นตอน:

1) เพิ่ม. gitignore นี้ (จากhttps://stackoverflow.com/a/32942758/869936 ):

#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) สำหรับแต่ละบรรทัดของ. gignignore ให้เรียกใช้git rm lineจากบรรทัดคำสั่ง

ตัวอย่าง:

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

เพิ่มและยอมรับการเปลี่ยนแปลง

ตอนนี้ไฟล์เหล่านี้จะถูกสร้างขึ้นเมื่อคุณเปิดโครงการ Android Studio และจะไม่ถูกเพิ่มใน git


20
ตามintellij-support.jetbrains.com/hc/en-us/articles/...คุณควรจะกระทำส่วนใหญ่ของ.ideaโฟลเดอร์เพราะพวกเขาไม่ได้เป็นเครื่องเฉพาะยกเว้นและworkspace.xml tasks.xmlที่ถูกกล่าวว่ามันไม่ได้คิดออกดีในแง่ของการควบคุมเวอร์ชันเนื่องจากปัญหาเช่นนี้ ฉันคิดว่าในที่สุดพวกเขาก็จะจัดระเบียบออก
Matt Quigley

ฉันเข้าใจว่ามีความคลาดเคลื่อน ในเวลาเดียวกันฉันไม่ได้ตระหนักถึงปัญหาใด ๆ ในทีม dev ของฉันจากการใช้. gitignore นี้ หากฉันรู้เพิ่มเติมฉันสามารถให้คำแนะนำเพิ่มเติมได้ แต่นี่คือสิ่งที่ใช้ได้ผลสำหรับเราในตอนนี้ หากปัญหานำเสนอตัวเองฉันจะเปลี่ยนคำตอบของฉัน
kraftydevil

31
ใช่เราทุกคนรู้วิธีบังคับให้คอมไพล์ละเว้นไฟล์นี้ แต่คำถามจริงคือทำไมมันเปลี่ยนจาก JDK_1_8 เป็น JDK_1_7 (และบางครั้งกลับมาอีกครั้ง)
Scott Biggs

เริ่มเกิดขึ้นกับฉันด้วย Android Studio 2.2 ฉันคิดว่าพวกเขารวม JDK ที่เริ่มต้นด้วย AS 2.2 ดังนั้นจึงเป็นไปได้ที่มันจะสับสนระหว่างระบบหนึ่งกับหนึ่งภายใน AS
RED_

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