Thẻ ngôn ngữ của Android .idea / misc.xml tiếp tục thay đổi JDK


178

Khóa ngôn ngữ được thay đổi từ JDK_1_8 thành JDK_1_7 vì những lý do tôi không biết.

Điều gì có thể xảy ra?

Điều này có liên quan gì đến IDE của các nhà phát triển khác đang làm việc trong dự án không? Có lẽ họ có một cài đặt Android Studio khác?

Đây là những gì bật lên sau khi tôi nhận thấy các tập tin dưới sự kiểm soát nguồn đã thay đổi:

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

Đây là gitignore của tôi trong trường hợp nó quan trọng.

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

Làm thế nào để tôi tiến hành để nó chỉ ở cách này hay cách khác?


1
Tôi đã làm. Trả lời thêm.
kraftydevil

4
Tôi chỉ muốn chỉ ra rằng intellij-support.jetbrains.com/hc/en-us/articles/ mẹo là câu trả lời chính thức cho những gì nên có .gitignore, và cách giải quyết này đi ngược lại điều này. Bạn mất một số khả năng chia sẻ các thuộc tính dự án cho tất cả các nhà phát triển, chẳng hạn như cài đặt kiểm tra / lint mà chúng tôi sử dụng để ngăn chặn một số thực tiễn xấu tiêu chuẩn trước cả khi xem xét mã. Bạn chỉ có thể thêm /.idea/misc.xmlvào .gitignoretập tin để giải quyết điều này.
Matt Quigley

4
Tôi đã nhận thấy vấn đề này bản thân mình và nó thậm chí không phải sau khi một thành viên khác trong nhóm cam kết làm việc. Tôi đã làm công việc của riêng mình, thúc đẩy một cam kết, thực hiện thêm một số công việc và nhận thấy nó đã bật lại cho tôi. Đó là những gì tôi quan tâm nhiều hơn. Nếu đó là một thành viên nhóm khác thì tôi biết tại sao nó thay đổi, nhưng để thay đổi ngẫu nhiên trong quá trình phát triển địa phương cá nhân thì lại liên quan và khó hiểu. Bất kỳ cái nhìn sâu sắc về điều này?
John Shelley

3
Tôi có cùng một vấn đề, trình độ ngôn ngữ liên tục thay đổi giữa 1.7 và 1.8.
Han He

1
chủ đề liên quan đến stackoverflow.com/questions/17637179/ từ
CrandellWS

Câu trả lời:


42

Điều này đã khiến tôi phát điên trong một thời gian. Tôi đã có thể sửa nó bằng cách cài đặt rõ ràng phiên bản java trong build.gradle:

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

Lưu ý rằng nếu bạn đang sử dụng VERSION_1_7, khi bạn khởi động lạnh Android Studio hoặc chuyển sang dự án khác sử dụng VERSION_1_8, nó sẽ sửa đổi .idea/misc.xmlđể sử dụng JDK_1_8. Thực hiện đồng bộ hóa lớp sẽ hoàn nguyên nó trở lại sử dụng JDK_1_7. Nếu bạn đang sử dụng VERSION_1_8, bạn sẽ không gặp phải vấn đề này.

Nó không hoàn hảo nhưng tôi thấy điều này là đủ tốt cho bây giờ.


2
Hiện tại, không sử dụng cũng không muốn sử dụng JDK nhúng như được đề xuất trong stackoverflow.com/a/40083824/1815624 bằng cách sử dụng tùy chọn lớp sẽ ngăn chặn vấn đề thay đổi. Có thể muốn lưu ý điều này mặc dù code.google.com/p/android/issues/detail?id=172115
CrandellWS

Tôi nên đặt cái này trong dự án hoặc trong tập tin mô-đun?
rraallvv

@rraallvv mô-đun
Noel

Đây là loại "sửa chữa" nó cho tôi. Tôi có những lựa chọn trong tập tin gradle của tôi. Nếu tôi mở studio (nó thực hiện đồng bộ hóa lớp và), nó sẽ đặt misc.xml thành 1_8. Nếu tôi xây dựng thì nó sẽ được đặt trở lại 1_7. Nếu sau đó tôi đồng bộ hóa lớp, nó sẽ được đặt trở lại 1_8 và tòa nhà sẽ không còn được đặt lại thành 1_7. Thực hiện đồng bộ hóa lớp không bao giờ đặt nó thành 1_7 đối với tôi, nó luôn luôn là 1_8 sau khi đồng bộ hóa lớp. Bất cứ khi nào tôi mở studio, nó sẽ được đặt thành 1_8.
David

Nếu bạn muốn sử dụng JDK 1.8: android {compileOptions {sourceCompabilities JavaVersion.VERSION_1_8 targetCompabilities JavaVersion.VERSION_1_8}}
Beatrice Lin

24

Đến đây từ Google sau khi cập nhật lên Android Studio 2.2. Điều này có thể hữu ích cho những người khác.

Kể từ Android Studio 2.2, JDK đã được đóng gói cùng với nó, thay vì bạn phải tải xuống và cài đặt nó trên hệ thống của bạn. JDK dự án của tôi bắt đầu chuyển đổi khi tôi cập nhật lên 2.2, có thể do sự nhầm lẫn giữa hai phiên bản hiện có - hệ thống và nhúng.

Nếu bạn đi vào Tệp> Cấu trúc dự án (Mac OS), trên tab Vị trí SDK, có vị trí JDK. Bây giờ có một cài đặt mới để sử dụng JDK nhúng. Khi tôi chuyển sang nó, nó đã giải quyết vấn đề của tôi.

nhập mô tả hình ảnh ở đây


7
Tôi đã làm điều này (mặc dù trong Win10) nhưng ngay khi tôi khởi động lại, tôi nhận thấy vấn đề vẫn tiếp tục :(
CesarPim

2
Điều này hoạt động để giải quyết vấn đề. Như @CesarPim đề cập, tôi thấy nó sẽ hoạt động trở lại khi bản dựng không đồng bộ. Chạy đồng bộ hóa lớp sau đó xóa thay đổi. Nhìn chung, một giải pháp sạch đẹp, tốt hơn nhiều so với trước đây - cảm ơn!
Gene Bo

5
Bạn có ý nghĩa gì @gnB? Với tôi, nó cứ lặp đi lặp lại từ 1.7 đến 1.8 ... tôi không thể tìm ra giải pháp ổn định. Là bạn?
CesarPim

3
@gnB vâng, điều tương tự với tôi, nhưng vẫn làm phiền tôi rằng điều đó xảy ra mỗi khi tôi khởi chạy NHƯ ... điều đó không nên xảy ra
CesarPim

15
Vẫn xảy ra trong Android Studio 3.0 và đề xuất này không khắc phục được. Tôi đã chọn "JDK nhúng", nhưng nó vẫn tiếp tục thay đổi từ 1_7 thành 1_8 và không có lý do rõ ràng.
Greg Enni

9

Có vẻ như các tập tin nên được lưu trữ dưới sự kiểm soát phiên bản . Tôi sẽ đề nghị giữ nó trong git, nhưng bỏ qua tất cả các thay đổi cục bộ:

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

Khi chuyển nhánh có thể có xung đột trong các tệp này. Sau đó, bạn có thể sử dụng tập lệnh imlreset sau để đặt lại các tệp:

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

Tạo tập lệnh tương tự để bỏ qua các tệp này nếu bạn làm điều đó thường xuyên.


Điều này không tránh được các vấn đề khi chuyển nhánh, nếu IDE thay đổi tệp, các thay đổi phải được loại bỏ bằng cách nào đó trước khi bạn có thể kiểm tra một nhánh khác.
ergosys

@ergosys, cảm ơn đã bình luận. Đã thêm tập lệnh mà tôi sử dụng trong các trường hợp như vậy.
Paweł Nadolski

1
Bỏ qua các tập tin là một giải pháp chống, và thậm chí không phải là một cách giải quyết có lợi. Nó không khắc phục được nguyên nhân, nó che giấu các triệu chứng và bằng cách đó sẽ tạo ra và che khuất các vấn đề đơn giản để chúng trở nên khó tìm và khắc phục.
Barry Staes

@BarryStaes, cảm ơn đã phản hồi. Tôi không tìm thấy giải pháp hoàn hảo cho vấn đề này (các giải pháp khác không hoạt động) và giải pháp này hiệu quả với tôi và một số người khác. Lưu ý rằng điều này không hoàn toàn bỏ qua các tệp chỉ che giấu thực tế chúng đã thay đổi. Vì các tệp này có thể thay đổi thường xuyên và ngẫu nhiên, nó cho phép lọc chúng khi thực hiện các lệnh git. Bạn vẫn có thể cam kết bất cứ khi nào bạn muốn.
Paweł Nadolski

1

Tôi đã giải quyết vấn đề này khi tôi gỡ bỏ và dừng cam kết thư mục .idea để kiểm soát nguồn.

Vấn đề là một số tệp này có cấu hình máy cụ thể nên việc chia sẻ chúng có thể là một vấn đề.

Loại bỏ nó và các tập tin vi phạm khác là một quá trình git hai bước:

1) Thêm .gitignore này (từ 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) Đối với mỗi dòng của .gitignore, hãy chạy git rm linetừ dòng lệnh.

Thí dụ:

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

Thêm và cam kết thay đổi

Bây giờ các tệp này sẽ được tạo khi bạn mở dự án Android Studio và chúng sẽ không được thêm vào git.


20
Theo intellij-support.jetbrains.com/hc/en-us/articles/ Khăn bạn phải cam kết hầu hết các .ideathư mục vì chúng không dành riêng cho máy, ngoại trừ workspace.xmltasks.xml. Điều đó đang được nói, nó không được suy nghĩ kỹ về mặt kiểm soát phiên bản, vì những vấn đề như thế này. Tôi nghĩ họ cuối cùng sẽ sắp xếp mớ hỗn độn.
Matt Quigley

Tôi hiểu có sự khác biệt. Đồng thời, tôi không biết bất kỳ vấn đề nào trong nhóm nhà phát triển của mình khi sử dụng .gitignore này. Nếu tôi biết nhiều hơn tôi có thể tư vấn thêm, nhưng đây là những gì làm việc cho chúng tôi ngay bây giờ. Nếu một vấn đề xuất hiện, tôi sẽ thay đổi câu trả lời của mình.
kraftydevil

31
Vâng, tất cả chúng ta đều biết cách buộc git bỏ qua tập tin này. Nhưng câu hỏi thực sự là tại sao nó cứ thay đổi từ JDK_1_8 sang JDK_1_7 (và đôi khi quay lại lần nữa)?
Scott Biggie

Bắt đầu xảy ra với tôi với Android Studio 2.2. Tôi nghĩ rằng họ đã đóng gói JDK bắt đầu với AS 2.2, vì vậy có thể nó cứ bị lẫn lộn giữa hệ thống một và hệ thống trong AS.
RED_

3
Điều này không trả lời câu hỏi nào cả. Đó là kỳ lạ bởi vì bạn hỏi nó. Đây là cách bỏ qua vấn đề, có thể tốt cho bạn, tôi đoán, tôi muốn biết tại sao nó cứ thay đổi và làm thế nào để ngăn chặn nó làm điều đó.
David
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.