web-dev-qa-db-fra.com

Le tag languageLevel de Android .idea / misc.xml ne cesse de changer de JDK

La clé languageLevel passe de JDK_1_8 à JDK_1_7 pour des raisons que je ne connais pas.

Que pourrait-il se passer?

Cela a-t-il quelque chose à voir avec le IDE des autres développeurs travaillant sur le projet? Peut-être ont-ils un autre Android Studio)?

Voici ce qui apparaît après avoir constaté que les fichiers sous contrôle de code source ont changé:

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

Ceci est mon gitignore au cas où cela compte.

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

Comment puis-je procéder pour que cela reste dans un sens ou dans l'autre?

172
kraftydevil

Cela me rendait fou pendant un moment. J'ai pu résoudre ce problème en définissant explicitement la version Java dans mon build.gradle:

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

Notez que si vous utilisez VERSION_1_7, lors du lancement à froid Android Studio ou basculer vers un autre projet utilisant VERSION_1_8, cela modifiera .idea/misc.xml utiliser JDK_1_8. Effectuer une synchronisation graduelle le rétablira en utilisant JDK_1_7. Si vous utilisez VERSION_1_8, vous n'aurez pas ce problème.

Ce n'est pas parfait, mais j'ai trouvé que c'était assez bon pour l'instant.

38
Noel

Nous sommes venus ici de Google après la mise à jour vers Android Studio 2.2. Cela pourrait être utile aux autres.

Depuis Android Studio 2.2, le kit JDK est fourni avec celui-ci, mais vous devez le télécharger et l'installer sur votre système. Mon projet JDK a commencé à basculer lorsque j'ai mis à jour vers la version 2.2, probablement à cause du confusion entre les deux versions disponibles maintenant - système et intégré.

Si vous allez dans Fichier> Structure du projet (Mac OS), sous l’onglet Emplacement du SDK, vous trouverez l’emplacement du JDK. Il y a maintenant un nouveau paramètre pour utiliser le JDK intégré. Une fois que je suis passé à cela, cela a résolu mon problème.

enter image description here

24
RED_

Il semble que le fichier devrait être stocké sous contrôle de version . Je proposerais de le garder dans git, mais d'ignorer tous les changements locaux:

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

Lors du changement de branche, il peut y avoir un conflit dans ces fichiers. Ensuite, vous pouvez utiliser le script suivant imlreset pour réinitialiser les fichiers:

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

Créez un script similaire pour ignorer ces fichiers si vous le faites souvent.

8
Paweł Nadolski

J'ai résolu ce problème lorsque j'ai supprimé et arrêté de valider le dossier .idea dans le contrôle de source.

Le problème est que certains de ces fichiers sont des configurations spécifiques à la machine. Par conséquent, leur partage pourrait poser problème.

Le supprimer et les autres fichiers incriminés était un processus git en deux étapes:

1) Ajoutez ce .gitignore (de 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) Pour chaque ligne du .gitignore, lancez git rm line à partir de la ligne de commande.

Exemple:

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

Ajouter et valider les modifications

Maintenant, ces fichiers seront générés lorsque vous ouvrirez le projet Android Studio) et ils ne seront pas ajoutés à git.

2
kraftydevil