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 2015年

4
intellij-support.jetbrains.com/hc/en-us/articles/…はの内容に対する公式の回答.gitignoreであり、この回避策はこれに反することを指摘しておきます。コードレビューを行う前に、標準的な不正行為を防止するために使用する検査/ lint設定など、プロジェクトのプロパティをすべての開発者と共有する能力が失われます。これを解決する/.idea/misc.xmlには、.gitignoreファイルに追加するだけです。
Matt Quigley、2015年

4
私自身もこの問題に気づきましたが、別のチームメンバーが作業を行った後でさえありませんでした。私は自分の仕事をし、コミットをプッシュし、さらにいくつかの仕事をして、再びスイッチが入ったことに気付きました。それが私にもっと関係があります。別のチームメンバーである場合は、なぜ変更されるのかはわかりますが、個人のローカル開発中にランダムに変更することは懸念と混乱を招きます。これに対する洞察はありますか?
ジョンシェリー2016

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_7、Android StudioをコールドローンチするかVERSION_1_8、を使用する別のプロジェクトに切り替えると、使用するように変更さ.idea/misc.xmlれますJDK_1_8。Gradle同期を実行すると、使用に戻りJDK_1_7ます。を使用している場合VERSION_1_8、この問題は発生しません。

完璧ではありませんが、今のところこれで十分です。


2
現在、stackoverflow.com / a / 40083824/1815624で推奨されているように、gradleオプションを使用すると変更の問題が回避されるため、埋め込みJDKを使用したり使用したりしないでください。けれども、この点に注意してくださいすることがありますcode.google.com/p/android/issues/detail?id=172115
CrandellWS

これをプロジェクトまたはモジュールファイルに配置する必要がありますか?
rraallvv 2017

@rraallvvモジュール
Noel

この種の私はそれを「修正」します。私のgradleファイルにそれらのオプションがあります。studioを開くと(gradle syncを実行します)、misc.xmlを1_8に設定します。ビルドすると、1_7に戻ります。その後、gradleを同期すると、1_8に戻り、ビルドで1_7に戻りません。Gradleの同期を行うことは決してそれは常にGradleの同期後1_8で、私のため1_7にそれを設定していません。スタジオを開くたびに、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がバンドルされているため、システムにダウンロードしてインストールする必要はありません。プロジェクトJDKは、2.2に更新したときに切り替えを開始しました。おそらく、現在利用可能な2つのバージョン(システムと埋め込み)が混同されているためです。

[ファイル]> [プロジェクト構造](Mac OS)に移動すると、[SDKの場所]タブにJDKの場所があります。組み込みJDKを使用するための新しい設定があります。切り替えたところ、問題は解決しました。

ここに画像の説明を入力してください


7
私はこれを行いましたが(Win10では)、ASを再起動するとすぐに問題が続くことに気付きました:(
CesarPim

2
これは問題を解決するために機能します。@CesarPimが言及しているように、ビルドが同期していないときに再表示されます。その後、gradle syncを実行すると、変更がクリアされます。全体的に、以前よりもはるかに優れたすてきなクリーンソリューション-ありがとうございます!
Gene Bo

5
@gnBはどういう意味ですか?私は1.7と1.8の間を行き来しています...安定した解決策を見つけることができませんでした。あなたでしたか?
CesarPim 2017年

3
@gnBはい、私と同じですが、ASを起動するたびに発生することはまだ気になります...発生してはなりません
CesarPim

15
Android Studio 3.0でもまだ発生しており、この提案では修正されませんでした。私はすでに「組み込みJDK」を選択していますが、明らかな理由もなく、1_7から1_8に変わり、元に戻ります。
グレッグエニス2017

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 2017

@ergosys、コメントありがとうございます。そのような場合に使用するスクリプトを追加しました。
パヴェルNadolski

1
ファイルを無視することは対抗策であり、有益な回避策すらありません。原因を改善するのではなく、症状を隠します。そうすることで、単純な問題が作成されて見えなくなり、問題を見つけて修正することが難しくなります。
バリーステイズ2018年

@BarryStaes、フィードバックをありがとう。私はこの問題の完璧な解決策を見つけられませんでした(他の解決策は機能しませんでした)、これは私と他のほとんどの人々のために機能しません。これは、変更されたという事実を隠すだけでファイルを完全に無視しているわけではないことに注意してください。これらのファイルはしばしばランダムに変更される可能性があるため、gitコマンドを実行するときにそれらをフィルターに掛けることができます。いつでも好きなときにコミットできます。
パヴェルNadolski

1

.ideaフォルダーを削除してソース管理にコミットするのをやめたときに、この問題を解決しました。

問題は、これらのファイルの一部がマシン固有の構成であるため、それらの共有が問題になる可能性があることです。

それと他の問題のあるファイルを削除することは、2つのステップの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.xmlありtasks.xmlます。そうは言っても、このような問題があるため、バージョン管理に関してはあまりよく考えられていません。私は彼らが最終的に混乱を整理すると思います。
Matt Quigley、2015年

不一致があることを理解しています。同時に、この.gitignoreの使用による開発チームの問題を認識していません。私がもっと知っていれば、私はさらに助言することができますが、これは現在私たちのために働いているものです。問題が発生した場合は、回答を変更します。
kraftydevil 2015年

31
はい、私たちは皆、gitにこのファイルを無視させる方法を知っています。しかし、本当の問題は、なぜそれがJDK_1_8からJDK_1_7に変化し続けるの(そしてときどき再び戻るのか)です。
Scott Biggs

Android Studio 2.2で私に起こり始めました。AS 2.2以降のJDKがバンドルされていると思います。そのため、システムとAS内のシステムとの間で混乱を続ける可能性があります。
RED_ 2016年

3
これは質問にまったく答えません。あなたがそれを尋ねたので、それは奇妙です。これは、問題を無視する方法です。おそらく問題ないと思います。なぜ変化し続けるのか、それを止める方法を知りたいのですが。
デビッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.