Bahasa .idea / misc.xml's tag Tingkat Bahasa terus mengubah JDK

178

Kunci languageLevel diubah dari JDK_1_8 menjadi JDK_1_7 karena alasan yang saya tidak tahu.

Apa yang mungkin terjadi?

Apakah ini ada hubungannya dengan IDE pengembang lain yang mengerjakan proyek? Mungkin mereka memiliki pengaturan Android Studio lain?

Inilah yang muncul setelah saya perhatikan file di bawah kendali sumber telah berubah:

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

Ini adalah gitignore saya jika itu penting.

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

Bagaimana saya melanjutkan sehingga tetap saja satu atau lain cara?

kraftydevil
sumber
1
Aku melakukannya. Jawaban ditambahkan.
kraftydevil
4
Saya hanya ingin menunjukkan bahwa intellij-support.jetbrains.com/hc/en-us/articles/… adalah jawaban resmi untuk apa yang seharusnya ada .gitignore, dan solusi ini bertentangan dengan ini. Anda kehilangan beberapa kemampuan untuk membagikan properti proyek ke semua pengembang, seperti pengaturan inspeksi / serat yang kami gunakan untuk mencegah beberapa praktik buruk standar bahkan sebelum sampai ke tinjauan kode. Anda bisa menambahkan /.idea/misc.xmlke .gitignorefile untuk menyelesaikan ini.
Matt Quigley
4
Saya telah memperhatikan masalah ini sendiri dan bahkan setelah anggota tim yang berbeda melakukan pekerjaan. Saya melakukan pekerjaan saya sendiri, mendorong sebuah komitmen, melakukan beberapa pekerjaan lagi dan memperhatikan bahwa itu telah menghidupkan saya lagi. Itulah yang lebih membuatku prihatin. Jika ini adalah anggota tim yang berbeda maka saya tahu mengapa itu berubah, tetapi untuk berubah secara acak selama pengembangan lokal pribadi mengkhawatirkan dan membingungkan. Adakah wawasan tentang hal ini?
John Shelley
3
Saya memiliki masalah yang sama, level bahasa terus berubah antara 1.7 dan 1.8.
Han He
1
topik yang terkait dengan stackoverflow.com/questions/17637179/…
CrandellWS

Jawaban:

42

Ini membuatku gila untuk sementara waktu. Saya dapat memperbaikinya dengan secara eksplisit mengatur versi java di build.gradle:

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

Perhatikan bahwa jika Anda menggunakan VERSION_1_7, ketika Anda meluncurkan Android Studio atau beralih ke proyek lain yang digunakan VERSION_1_8, itu akan dimodifikasi .idea/misc.xmluntuk digunakan JDK_1_8. Melakukan sinkronisasi bertahap akan mengembalikannya ke penggunaan JDK_1_7. Jika Anda menggunakan VERSION_1_8, Anda tidak akan memiliki masalah ini.

Itu tidak sempurna tetapi saya menemukan ini cukup baik untuk saat ini.

Noel
sumber
2
Saat ini, jangan gunakan atau ingin menggunakan JDK embed seperti yang disarankan di stackoverflow.com/a/40083824/1815624 menggunakan opsi gradle tidak mencegah perubahan masalah. Mungkin ingin mencatat ini code.google.com/p/android/issues/detail?id=172115
CrandellWS
Haruskah saya meletakkan ini di proyek atau di file modul?
rraallvv
@rraallvv modul
Noel
Jenis "perbaikan" ini untuk saya. Saya memiliki opsi-opsi itu di file gradle saya. Jika saya membuka studio (itu melakukan sinkronisasi gradle dan), itu menetapkan misc.xml ke 1_8. Jika saya membangun kemudian, itu akan kembali ke 1_7. Jika saya menyinkronkan gradle, maka akan diatur kembali ke 1_8 dan bangunan tidak akan lagi mengaturnya kembali ke 1_7. Melakukan sinkronisasi gradle tidak pernah mengaturnya menjadi 1_7 untuk saya, itu selalu 1_8 setelah sinkronisasi gradle. Setiap kali saya membuka studio, pengaturannya menjadi 1_8.
David
Jika Anda ingin menggunakan JDK 1.8: android {compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}}
Beatrice Lin
24

Datang ke sini dari Google setelah memperbarui ke Android Studio 2.2. Ini mungkin bermanfaat bagi orang lain.

Sejak Android Studio 2.2, JDK telah dibundel dengannya, alih-alih Anda harus mengunduh dan menginstalnya di sistem Anda. Proyek saya JDK mulai beralih ketika saya memperbarui ke 2.2, mungkin karena kebingungan antara dua versi yang tersedia sekarang - sistem dan tertanam.

Jika Anda masuk ke File> Struktur Proyek (Mac OS), pada tab Lokasi SDK, ada lokasi JDK. Sekarang ada pengaturan baru untuk menggunakan JDK tertanam. Setelah saya beralih, itu memecahkan masalah saya.

masukkan deskripsi gambar di sini

MERAH_
sumber
7
Saya melakukan ini (meskipun di Win10) tetapi segera setelah saya restart AS saya melihat masalah berlanjut :(
CesarPim
2
Ini berfungsi untuk menyelesaikan masalah. Seperti @CesarPim menyebutkan, saya melihatnya muncul kembali ketika build tidak sinkron. Menjalankan sinkronisasi gradle kemudian mengosongkan perubahan. Secara keseluruhan, solusi bersih yang bagus, jauh lebih baik daripada sebelumnya - terima kasih!
Gene Bo
5
Apa maksudmu @gnB? Dengan saya itu terus bolak-balik antara 1,7 dan 1,8 ... saya tidak dapat menemukan solusi yang stabil. Apakah kamu?
CesarPim
3
@gnB ya, sama dengan saya, tetapi masih mengganggu saya bahwa hal itu terjadi setiap kali saya meluncurkan AS ... itu seharusnya tidak terjadi
CesarPim
15
Masih terjadi di Android Studio 3.0, dan saran ini tidak memperbaikinya. Saya sudah memilih "tertanam JDK", namun masih terus berubah dari 1_7 ke 1_8 dan kembali tanpa alasan yang jelas.
Greg Ennis
9

Tampaknya file tersebut harus disimpan di bawah kontrol versi . Saya akan mengusulkan untuk menyimpannya di git, tetapi abaikan semua perubahan lokal:

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

Saat berpindah cabang mungkin ada konflik dalam file-file ini. Kemudian Anda dapat menggunakan skrip imlreset berikut untuk mengatur ulang file:

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

Buat skrip serupa untuk mengabaikan file-file ini jika Anda sering melakukannya.

Paweł Nadolski
sumber
Ini tidak menghindari masalah ketika berpindah cabang, jika IDE mengubah file, perubahan harus dihapus entah bagaimana sebelum Anda dapat checkout cabang yang berbeda.
ergosys
@ergosys, terima kasih atas komentarnya. Skrip ditambahkan yang saya gunakan dalam kasus seperti itu.
Paweł Nadolski
1
Mengabaikan file adalah solusi anti, dan bahkan bukan solusi yang menguntungkan. Itu tidak menyembuhkan penyebabnya, ia menyembunyikan gejala-gejalanya, dan dengan melakukan itu menciptakan dan mengaburkan masalah-masalah sederhana sehingga mereka menjadi sulit ditemukan dan diperbaiki.
Barry Staes
@BarryStaes, terima kasih atas umpan baliknya. Saya tidak menemukan solusi yang sempurna untuk masalah ini (solusi lain tidak berfungsi) dan ini bekerja untuk saya dan beberapa orang lainnya. Perhatikan bahwa ini tidak sepenuhnya mengabaikan file hanya menyembunyikan fakta bahwa mereka telah berubah. Karena file-file ini dapat sering dan secara acak mengubahnya memungkinkan untuk memfilternya ketika melakukan perintah git. Anda masih dapat mengkomitnya kapan pun Anda mau.
Paweł Nadolski
1

Saya memecahkan masalah ini ketika saya menghapus dan berhenti melakukan folder .idea ke kontrol sumber.

Masalahnya adalah bahwa sebagian dari file-file ini adalah konfigurasi khusus mesin sehingga membagikannya dapat menjadi masalah.

Menghapusnya dan file menyinggung lainnya adalah proses git dua langkah:

1) Tambahkan .gitignore ini (dari 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) Untuk setiap baris .gitignore, jalankan git rm linedari baris perintah.

Contoh:

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

Tambahkan dan komit perubahan

Sekarang file-file ini akan dihasilkan ketika Anda membuka proyek Android Studio dan mereka tidak akan ditambahkan ke git.

kraftydevil
sumber
20
Menurut intellij-support.jetbrains.com/hc/en-us/articles/... Anda seharusnya melakukan sebagian besar .ideafolder karena tidak spesifik mesin, kecuali untuk workspace.xmldan tasks.xml. Yang sedang berkata, itu tidak terlalu dipikirkan dalam hal kontrol versi, karena masalah seperti ini. Saya pikir mereka akhirnya akan menyelesaikan kekacauan ini.
Matt Quigley
Saya mengerti ada perbedaan. Pada saat yang sama, saya tidak mengetahui adanya masalah pada tim dev saya dari menggunakan .gitignore ini. Jika saya tahu lebih banyak, saya bisa memberi saran lebih lanjut, tetapi inilah yang bekerja untuk kita sekarang. Jika masalah muncul dengan sendirinya, saya akan mengubah jawaban saya.
kraftydevil
31
Ya, kita semua tahu cara memaksa git untuk mengabaikan file ini. Tetapi pertanyaan sebenarnya adalah mengapa terus berubah dari JDK_1_8 ke JDK_1_7 (dan terkadang kembali lagi)?
Scott Biggs
Mulai terjadi pada saya dengan Android Studio 2.2. Saya pikir mereka menggabungkan JDK dimulai dengan AS 2.2, jadi ada kemungkinan bahwa itu terus menjadi bingung antara sistem satu dan yang ada di dalam AS.
RED_
3
Ini sama sekali tidak menjawab pertanyaan. Yang aneh karena Anda menanyakannya. Ini adalah cara untuk mengabaikan masalah, yang mungkin baik untuk Anda, saya rasa, saya ingin tahu mengapa itu terus berubah dan bagaimana menghentikannya melakukan itu.
David