Android .idea / misc.xml का लैंग्वेजवेल टैग JDKs को बदलता रहता है


178

LanguageLevel कुंजी JDK_1_8 से JDK_1_7 के कारण बदल जाती है जिन कारणों से मुझे जानकारी नहीं है।

क्या चल रहा होगा?

क्या इस परियोजना पर काम कर रहे अन्य डेवलपर्स के आईडीई के साथ कुछ करना है? शायद उनके पास एक और एंड्रॉइड स्टूडियो सेटिंग है?

स्रोत नियंत्रण के तहत फ़ाइलों को नोटिस करने के बाद मैं यहाँ क्या पॉप अप कर रहा हूँ:

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

यह मेरा जीतिग्नोर है जब यह मायने रखता है।

.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फ़ाइल में जोड़ सकते हैं ।
मैट क्विगले

4
मैंने स्वयं इस मुद्दे पर ध्यान दिया है और यह तब भी नहीं हुआ जब एक अलग टीम के सदस्य ने काम किया था। मैंने अपना काम किया, एक कमिट को आगे बढ़ाया, कुछ और काम किए और नोटिस किया कि यह मुझ पर फिर से आ गया है। यही बात मुझे और चिंतित करती है। यदि इसका एक अलग टीम का सदस्य है, तो मुझे पता है कि इसका परिवर्तन क्यों हो रहा है, लेकिन व्यक्तिगत स्थानीय विकास के दौरान बेतरतीब ढंग से परिवर्तन करना संबंधित और भ्रामक है। इस में कोई अंतर्दृष्टि?
जॉन शेली

3
मुझे एक ही समस्या है, भाषा का स्तर 1.7 और 1.8 के बीच बदलता रहता है।
हान वह

जवाबों:


42

यह मुझे थोड़ी देर के लिए पागल कर रहा था। मैं अपने में जावा संस्करण को स्पष्ट रूप से सेट करके इसे ठीक करने में सक्षम था build.gradle:

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

ध्यान दें कि यदि आप उपयोग कर रहे हैं VERSION_1_7 , तो जब आप एंड्रॉइड स्टूडियो को लॉन्च करते हैं या उपयोग करने वाले किसी अन्य प्रोजेक्ट पर स्विच करते हैं VERSION_1_8, तो यह .idea/misc.xmlउपयोग करने के लिए संशोधित होगा JDK_1_8। एक सिंक सिंकिंग करने से यह वापस उपयोग में आ जाएगा JDK_1_7। यदि आप उपयोग कर रहे हैं VERSION_1_8, तो आपके पास यह समस्या नहीं होगी।

यह सही नहीं है, लेकिन मैंने पाया कि यह अभी के लिए पर्याप्त है।


2
वर्तमान में, उपयोग न करें और न ही एम्बेड JDK का उपयोग करना चाहते हैं जैसा कि stackoverflow.com/a/40083824/1815624 में वर्गीकृत विकल्प का उपयोग करके बदलते मुद्दे को रोकता है। यह नोट करना चाह सकते हैं, हालांकि code.google.com/p/android/issues/detail?id=172115
CrandellWS

क्या मुझे इसे प्रोजेक्ट में या मॉड्यूल फ़ाइल में रखना चाहिए?
rrallvv

@ श्राल्वव मॉड्यूल
नोएल

इस तरह का "मेरे लिए" इसे ठीक करता है। मेरे पास मेरी फ़ाइल में वे विकल्प हैं। अगर मैं स्टूडियो खोलता हूं (यह एक सिंक सिंक करता है और), यह misc.xml को 1_8 पर सेट करता है। यदि मैं निर्माण करता हूं, तो यह 1_7 पर वापस सेट हो जाएगा। यदि मैं तब सिंक सिंक करता हूं, तो यह 1_8 पर वापस सेट हो जाएगा और बिल्डिंग अब इसे 1_7 पर सेट नहीं करेगी। डूइंग सिंक सिंक कभी नहींसिंकिंग मेरे लिए इसे 1_7 पर सेट करता है, हमेशा एक सिंक सिंक के बाद यह 1_8 होता है। जब भी मैं स्टूडियो खोलता हूं, यह 1_8 पर सेट हो जाता है।
डेविड

यदि आप JDK 1.8 का उपयोग करना चाहते हैं: android {compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}}
Beatrice Lin

24

Android Studio 2.2 में अपडेट करने के बाद Google से यहां आया। यह दूसरों के लिए मददगार हो सकता है।

Android Studio 2.2 के बाद से, JDK को आपके सिस्टम पर डाउनलोड और इंस्टॉल करने के बजाय, इसके साथ बंडल किया गया है। जब मैंने 2.2 को अद्यतन किया, तो संभवतः मेरी परियोजना JDK ने स्विच करना शुरू कर दिया, संभवतः अब उपलब्ध दो संस्करणों के बीच भ्रम के कारण - सिस्टम और एम्बेडेड।

यदि आप SDK लोकेशन टैब पर File> Project Structure (Mac OS) में जाते हैं, तो JDK लोकेशन है। एम्बेडेड JDK का उपयोग करने के लिए अब एक नई सेटिंग है। एक बार जब मैंने इसे स्विच किया, तो इसने मेरी समस्या हल कर दी।

यहां छवि विवरण दर्ज करें


7
मैंने ऐसा किया (हालांकि Win10 में) लेकिन जैसे ही मैंने दोबारा शुरू किया मैंने देखा कि यह मुद्दा जारी है :(
CesarPim

2
यह समस्या को हल करने के लिए काम करता है। जैसा कि @CesarPim का उल्लेख है, मुझे लगता है कि यह पुनर्जीवन करता है जब बिल्ड सिंक से बाहर होता है। रनिंग सिंक सिंक तब परिवर्तन को साफ़ करता है। कुल मिलाकर एक अच्छा साफ समाधान, पहले से बहुत बेहतर था - धन्यवाद!
जीन बो

5
आपका क्या मतलब है @gnB? मेरे साथ यह 1.7 और 1.8 के बीच आगे-पीछे होता रहता है ... मैं एक स्थिर समाधान खोजने में सक्षम नहीं था। क्या तुम?
सीजरपैम

3
@gnB हां, मेरे साथ भी ऐसा ही है, लेकिन यह मुझे परेशान करता है कि ऐसा हर बार होता है जब मैं लॉन्च करता हूं ... ऐसा नहीं होना चाहिए
CesarPim

15
अभी भी एंड्रॉइड स्टूडियो 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                                                                   
!

यदि आप अक्सर ऐसा करते हैं तो इन फ़ाइलों को अनदेखा करने के लिए समान स्क्रिप्ट बनाएं।


शाखाओं को स्विच करते समय यह मुद्दों से नहीं बचता है, अगर आईडीई फ़ाइल को बदलता है, तो किसी अन्य शाखा को चेकआउट करने से पहले परिवर्तनों को किसी तरह हटा दिया जाना चाहिए।
ergosys

@ergosys, टिप्पणी के लिए धन्यवाद। जोड़ी गई स्क्रिप्ट जो मैं ऐसे मामलों में उपयोग करता हूं।
पावेल नाडोलस्की

1
फ़ाइल को नजरअंदाज करना एक विरोधी समाधान है, और एक लाभकारी समाधान भी नहीं है। यह कारण का उपाय नहीं करता है, यह नियामकों को छिपाता है, और ऐसा करने से सरल समस्याओं को बनाता है और अस्पष्ट करता है ताकि वे खोजने और ठीक करने के लिए कठिन हो जाएं।
बैरी स्टास

@BarryStaes, प्रतिक्रिया के लिए धन्यवाद। मुझे इस मुद्दे के लिए सही समाधान नहीं मिला (अन्य समाधान काम नहीं किया) और यह एक मेरे और कुछ अन्य लोगों के लिए काम करता है। ध्यान दें कि यह केवल उन तथ्यों को पूरी तरह से अनदेखा नहीं कर रहा है जो उन्होंने बदल दिए हैं। चूँकि ये फाइलें अक्सर और बेतरतीब ढंग से बदल सकती हैं, इसलिए यह git कमांड करते समय उन्हें फ़िल्टर करने की अनुमति देता है। आप जब चाहें तब भी उन्हें प्रतिबद्ध कर सकते हैं।
पावेल नाडोलस्की

1

जब मैंने हटाया और स्रोत नियंत्रण के लिए .idea फ़ोल्डर को बंद करने पर मैंने इस समस्या को हल किया।

समस्या यह है कि इन फ़ाइलों में से कुछ मशीन विशिष्ट कॉन्फ़िगरेशन हैं इसलिए उन्हें साझा करना एक मुद्दा हो सकता है।

इसे हटाने और अन्य अपमानजनक फाइलें एक दो कदम प्रक्रिया थी:

1) इसे जोड़ें। .ignignore ( 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) .gitignore की प्रत्येक लाइन के लिए, 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। यह कहा जा रहा है, यह संस्करण नियंत्रण के मामले में बहुत अच्छी तरह से सोचा नहीं है, क्योंकि इन जैसी समस्याओं के कारण। मुझे लगता है कि वे अंततः गंदगी को सुलझा लेंगे।
मैट क्विग्ले

मैं समझता हूं कि विसंगतियां हैं। इसी समय, मैं अपनी देव टीम पर किसी भी मुद्दे के बारे में नहीं जानता हूँ। अगर मुझे अधिक पता होता तो मैं आगे सलाह दे सकता था, लेकिन यह अभी हमारे लिए काम कर रहा है। यदि कोई समस्या स्वयं प्रस्तुत करती है तो मैं अपना उत्तर बदल दूंगा।
क्राफ्टीदेविल

31
हां, हम सभी जानते हैं कि इस फ़ाइल को अनदेखा करने के लिए कैसे मजबूर किया जाए। लेकिन असली सवाल यह है कि यह JDK_1_8 से JDK_1_7 (और कभी-कभी फिर से वापस) क्यों बदलता रहता है?
स्कॉट बिग्स

एंड्रॉइड स्टूडियो 2.2 के साथ मेरे साथ शुरू हुआ। मुझे लगता है कि उन्होंने जेडीके को एएस 2.2 के साथ शुरू किया था, इसलिए यह संभव है कि यह सिस्टम एक और एएस के भीतर एक के बीच भ्रमित हो रहा है।
RED_

3
इस सवाल का जवाब बिल्कुल नहीं है। जो अजीब है क्योंकि आपने इसे पूछा था। यह समस्या को अनदेखा करने का तरीका है, जो आपके लिए ठीक हो सकता है मुझे लगता है, मैं यह जानना चाहूंगा कि यह क्यों बदलता रहता है और ऐसा करने से कैसे रोकना है।
डेविड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.