Android .idea / misc.xml의 languageLevel 태그는 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이 문제를 해결하기 위해 파일.
매트 퀴 글리

4
이 문제를 직접 확인했으며 다른 팀 구성원이 작업을 수행 한 후에도 문제가되지 않았습니다. 나는 내 일을하고, 커밋을했고, 더 많은 일을했고, 그것이 다시 나를 켰다는 것을 알았습니다. 그것이 저에게 더 큰 관심사입니다. 다른 팀원이라면 왜 그 변화가 있었는지, 그러나 개인적인 지역 개발 중에 무작위로 변화하는 이유는 혼란스럽고 혼란 스럽습니다. 이것에 대한 통찰력이 있습니까?
John Shelley

3
같은 문제가 있는데 언어 수준이 1.7과 1.8 사이에서 계속 변경됩니다.
Han He

답변:


42

이것은 잠시 동안 나를 미치게했다. 내 Java 버전을 명시 적으로 설정하여 문제를 해결할 수있었습니다 build.gradle.

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

를 사용중인 경우 VERSION_1_7Android Studio를 콜드로 시작하거나 사용하는 다른 프로젝트로 전환 하면 사용하도록 VERSION_1_8수정 .idea/misc.xml됩니다 JDK_1_8. gradle sync를 수행하면을 다시 사용으로 되돌립니다 JDK_1_7. 를 사용하는 VERSION_1_8경우이 문제가 발생하지 않습니다.

완벽하지는 않지만 지금은 이것으로 충분하다는 것을 알았습니다.


2
현재 gradle 옵션을 사용하여 stackoverflow.com/a/40083824/1815624 에서 제안한대로 포함 JDK를 사용하거나 사용하지 않으려 는 경우 변경 문제가 방지됩니다. 이주의 할 수도 있지만 code.google.com/p/android/issues/detail?id=172115
CrandellWS

이것을 프로젝트 또는 모듈 파일에 넣어야합니까?
rraallvv

@rraallvv 모듈
Noel

이런 종류의 나를 위해 "고정". 내 gradle 파일에 해당 옵션이 있습니다. 스튜디오를 열면 (그라들 동기화를 수행하고) misc.xml을 1_8로 설정합니다. 내가 빌드하면 1_7으로 다시 설정됩니다. 그런 다음 gradle을 동기화하면 1_8로 다시 설정되고 건물은 더 이상 1_7로 다시 설정하지 않습니다. gradle sync를 수행하면 결코 1_7로 설정 되지 않으며 gradle sync 후 항상 1_8입니다. 스튜디오를 열 때마다 1_8로 설정됩니다.
David

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가 시스템에 다운로드하여 설치하는 대신 JDK와 함께 번들로 제공되었습니다. 내 프로젝트 JDK는 2.2로 업데이트했을 때 전환을 시작했습니다. 현재 시스템과 임베디드의 두 버전이 혼동되어 있기 때문일 수 있습니다.

파일> 프로젝트 구조 (Mac OS)로 이동하면 SDK 위치 탭에 JDK 위치가 있습니다. 임베디드 JDK를 사용하기위한 새로운 설정이 있습니다. 일단 전환하면 문제가 해결되었습니다.

여기에 이미지 설명을 입력하십시오


7
나는 이것을 (Win10에도 불구하고)했지만 AS를 다시 시작하자마자 문제가 계속되는 것을 알았습니다 :(
CesarPim

2
이 문제를 해결하기 위해 작동합니다. @CesarPim이 언급했듯이 빌드가 동기화되지 않으면 다시 나타납니다. gradle sync를 실행하면 변경 사항이 지워집니다. 전반적으로 이전보다 훨씬 좋은 깔끔한 솔루션-감사합니다!
진 보

5
@gnB은 무슨 뜻인가요? 나와 함께 1.7과 1.8 사이에서 계속왔다 갔다합니다 ... 안정적인 솔루션을 찾을 수 없었습니다. 당신은?
CesarPim

3
@gnB 네 저와 같은,하지만 여전히 그런 일은하지 말아야 ... 그것은 내가 AS를 시작 매번 일어나는 날 귀찮게
CesarPim

15
Android Studio 3.0에서 계속 발생하지만이 제안으로 해결되지 않았습니다. 나는 이미 "임베디드 JDK"를 선택했지만 여전히 명백한 이유없이 1_7에서 1_8로 계속 변경됩니다.
Greg Ennis

9

파일 을 버전 관리하에 저장해야합니다 . 나는 그것을 git로 유지하라고 제안하지만 모든 로컬 변경 사항은 무시하십시오.

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) .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.xmltasks.xml. 즉, 버전 제어 측면에서는 이와 같은 문제로 인해 잘 생각되지 않습니다. 나는 그들이 결국 혼란을 정리할 것이라고 생각한다.
매트 Quigley

불일치가 있음을 이해합니다. 동시에, 나는 개발자 팀 이이 .gitignore를 사용하는 데 어떤 문제가 있는지 알지 못합니다. 더 많이 알면 더 조언을 해줄 수 있지만 이것이 현재 우리에게 효과가 있습니다. 문제가 발생하면 답변을 변경하겠습니다.
kraftydevil

31
예, 우리는 git 이이 파일을 무시하도록 강제하는 방법을 알고 있습니다. 그러나 실제 질문은 JDK_1_8에서 JDK_1_7로 (그리고 때로는 다시 돌아 오는) 계속 바뀌는가입니다.
Scott Biggs

Android Studio 2.2에서 시작되었습니다. AS 2.2부터 JDK를 번들로 제공했기 때문에 시스템 하나와 AS 내의 시스템 사이에서 계속 혼란 스러울 수 있습니다.
RED_

3
이 질문에 전혀 대답하지 않습니다. 당신이 요청했기 때문에 어느 것이 이상합니다. 이것은 문제를 무시하는 방법입니다. 제 생각에 문제가 계속되는 이유와 그 일을 멈추는 방법을 알고 싶습니다.
David
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.