2015-10-01 4 views
125

Der Schlüssel sprachebene wird aus Gründen, die mir nicht bekannt sind, von JDK_1_8 in JDK_1_7 geändert.Android.idea/misc.xmls LanguageLevel-Tag ändert sich ständig JDKs

Was könnte passieren?

Hat das etwas mit der IDE anderer Entwickler zu tun, die an dem Projekt arbeiten? Vielleicht haben sie eine andere Android Studio-Einstellung?

Hier ist, was sich öffnet, nachdem ich Dateien unter Quellcodeverwaltung feststellen geändert haben:

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

Das ist mein gitignore in Fall ist es von Bedeutung ist.

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

Wie gehe ich vor, damit es nur auf die eine oder andere Weise bleibt?

+1

Ich habe das gleiche Problem. –

+0

Dies könnte Ihnen helfen: http://stackoverflow.com/questions/32941733/android-studio-sdk-location-changes-for-same-project-using-mac-osx-and-window/32942758#32942758 – kraftydevil

+0

Haben Sie einen Workaround finden oder herausfinden, warum es das Sprachniveau ändert? – Falydoor

Antwort

3

Ich löste dieses Problem, als ich entfernte und hörte auf, den .idea-Ordner zur Quellcodeverwaltung zu übergeben.

Das Problem ist, dass einige dieser Dateien maschinenspezifische Konfigurationen sind, so dass die Freigabe ein Problem darstellen kann.

es und andere zu beleidigen Dateien war ein zweistufiger Prozess git ausbauen:

1) Dieses .gitignore (von 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) Für jede Zeile des .gitignore, laufen git rm line über die Befehlszeile.

Beispiel:

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

Hinzufügen und verpflichten die Änderungen

Nun werden diese Dateien erzeugt werden, wenn Sie das Android-Studio-Projekt öffnen und sie werden nicht hinzugefügt werden, um git.

+16

Nach https://intellij-support.jetbrains.com/hc/en-us/articles/206827587-How-to- manage-projects-unter-Version-Control-Systeme, die die meisten '.idea'-Ordner übernehmen sollen, weil sie _maschinenspezifisch sind, außer' workspace.xml' und 'tasks.xml'. Allerdings ist es in Sachen Versionskontrolle nicht sehr gut durchdacht, wegen Problemen wie diesen. Ich nehme an, sie werden das Durcheinander schließlich beseitigen. –

+0

Ich verstehe, dass es Diskrepanzen gibt. Zur gleichen Zeit sind mir keine Probleme meines Entwicklerteams bekannt, dieses .gitignore zu verwenden. Wenn ich mehr wüsste, könnte ich weiter beraten, aber das ist, was gerade für uns funktioniert. Wenn sich ein Problem ergibt, ändere ich meine Antwort. – kraftydevil

+20

Ja, wir alle wissen, wie man Git zwingt, diese Datei zu ignorieren. Aber die eigentliche Frage ist: Warum ändert sich das von JDK_1_8 zu JDK_1_7 (und manchmal wieder zurück)? –

7

Es scheint die Datei should be stored under version control. Ich würde vorschlagen, es in git zu halten, aber alle lokalen Änderungen ignorieren:

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

Wenn Zweige dort Schalt könnte sein, Konflikt in diesen Dateien. Dann könnten Sie folgende imlreset Skript verwenden, um die Dateien zurücksetzen:

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

erstellen ähnliches Skript für das Ignorieren Sie diese Dateien, wenn Sie es oft tun.

+0

Dies vermeidet nicht Probleme beim Umschalten von Zweigen, wenn die IDE die ändert Datei müssen die Änderungen irgendwie entfernt werden, bevor Sie einen anderen Zweig auschecken können. – ergosys

+0

@ergosys, danke für den Kommentar. Skript hinzugefügt, das ich in solchen Fällen benutze. –

22

kam hier von Google nach der Aktualisierung auf AS 2.2. Dies könnte für andere hilfreich sein.

Seit Android Studio 2.2 ist das JDK mit ihm gebündelt. Anstatt es herunterladen zu müssen, installieren Sie es auf Ihrem System. Mein Projekt JDK hat mit dem Wechsel begonnen, als ich auf 2.2 aktualisiert habe, möglicherweise aufgrund der Verwirrung zwischen den beiden Versionen, die jetzt verfügbar sind. System und eingebettet.

Wenn Sie in Datei> Projektstruktur (Mac OS) gehen, befindet sich auf der Registerkarte SDK-Position der JDK-Speicherort. Es gibt jetzt eine neue Einstellung, um das eingebettete JDK zu verwenden, sobald ich darauf umgestiegen bin, hat es mein Problem gelöst.

enter image description here

+5

Ich tat dies (obwohl in Win10) aber sobald ich neu gestartet AS bemerkte ich das Problem weiter :( – CesarPim

+2

Dies funktioniert, um das Problem zu beheben. Wie @CesarPim erwähnt, sehe ich es wieder auftaucht, wenn der Build nicht synchron ist Gradle Sync löscht dann den Wechsel. Insgesamt eine schöne saubere Lösung, viel besser als vorher - danke! – gnB

+2

Was meinst du mit @gnB? Bei mir geht es zwischen 1,7 und 1,8 hin und her ... ich war nicht Finden Sie eine stabile Lösung. Sind Sie? – CesarPim

16

Das war mir Nüsse für eine während der Fahrt. Ich war in der Lage, es zu beheben, indem Sie explizit die Java-Version in meinem build.gradle Einstellung:

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

Beachten Sie, dass wenn Sie mit VERSION_1_7, wenn Sie kalt Android Studio starten oder in ein anderes Projekt wechseln, die VERSION_1_8 verwendet, wird es ändern .idea/misc.xml zu verwenden JDK_1_8. Wenn Sie eine Gradle-Synchronisierung durchführen, wird wieder JDK_1_7 verwendet. Wenn Sie VERSION_1_8 verwenden, haben Sie dieses Problem nicht.

Es ist nicht perfekt, aber ich fand das für jetzt gut genug.

+1

Derzeit verwenden Sie das eingebettete JDK nicht und möchten es auch nicht verwenden, wie in http://stackoverflow.com/a/40083824/1815624 empfohlen. Die Verwendung der Gradle-Option verhindert das Änderungsproblem. Möchte dies jedoch notieren https://code.google.com/p/android/issues/detail?id=172115 – CrandellWS

+0

Sollte ich dies in das Projekt oder in die Moduldatei einfügen? – rraallvv

+0

@rraallvv das Modul – Noel

Verwandte Themen