Si vous utilisez Android studio , Java 7 langue doit être activée automatiquement sans taches. Try-with-resource nécessite le niveau d'API 19+, et des éléments NIO 2.0 sont manquants.
Si vous ne pouvez pas utiliser les fonctionnalités de Java 7, consultez la réponse de @Nuno sur la façon de modifier votre fichierbuild.gradle
.
Ce qui suit est pour l'intérêt historique seulement.
Une petite partie de Java 7 peut certainement être utilisée avec Android (note: je n'ai testé que sur 4.1).
Tout d'abord, vous ne pouvez pas utiliser ADT d'Eclipse car il est codé en dur que seuls les compilateurs Java 1.5 et 1.6 sont compatibles. Vous pouvez recompiler ADT mais je trouve qu'il n'y a pas de moyen simple de le faire en dehors de recompiler l'ensemble d'Android ensemble.
Mais vous n'avez pas besoin d'utiliser Eclipse. Par exemple, Android Studio 0.3.2 , IntelliJ IDEA CE et d'autres IDE basés sur javac prennent en charge la compilation vers Android et vous pouvez définir la conformité même jusqu'à Java 8 avec:
- Fichier → Structure du projet → Modules → (choisissez le module dans le 2ème volet) → Niveau de langue → (choisissez "7.0 - Diamants, ARM, multi-catch, etc.")
Cela n'autorise que les fonctionnalités du langage Java 7 , et vous ne pouvez guère bénéficier de quoi que ce soit puisque la moitié de l'amélioration provient également de la bibliothèque. Les fonctionnalités que vous pouvez utiliser sont celles qui ne dépendent pas de la bibliothèque:
- Opérateur diamant (
<>
)
- Commutateur de chaîne
- Prise multiple (
catch (Exc1 | Exc2 e)
)
- Souligner dans les littéraux numériques (
1_234_567
)
- Littéraux binaires (
0b1110111
)
Et ces caractéristiques ne peuvent pas être utilisés encore :
- L'
try
instruction -with-resources - car elle nécessite l'interface non existante "java.lang.AutoCloseable" (cela peut être utilisé publiquement dans 4.4+)
- L'annotation @SafeVarargs - car "java.lang.SafeVarargs" n'existe pas
... "encore" :) Il s'avère que, bien que la bibliothèque d'Android cible pour 1.6, la source Android contient des interfaces comme AutoCloseable et des interfaces traditionnelles comme Closeable hérite d'AutoCloseable (SafeVarargs est vraiment absent, cependant). Nous pourrions confirmer son existence par la réflexion. Ils sont cachés simplement parce que le Javadoc a la @hide
balise, ce qui a empêché "android.jar" de les inclure.
Il y a déjà une question existante Comment créer le SDK Android avec des API cachées et internes disponibles? sur la façon de récupérer ces méthodes. Il vous suffit de remplacer la référence "android.jar" existante de la plate-forme actuelle par notre référence personnalisée, puis de nombreuses API Java 7 deviendront disponibles (la procédure est similaire à celle d'Eclipse. Vérifiez la structure du projet → SDK.)
En plus d'AutoCloseable, (uniquement) les fonctionnalités suivantes de la bibliothèque Java 7 sont également révélées:
- Constructeurs de chaînage d'exceptions dans ConcurrentModificationException, LinkageError et AssertionError
- Les méthodes statiques .compare () pour les primitives: Boolean.compare (), Byte.compare (), Short.compare (), Character.compare (), Integer.compare (), Long.compare ().
- Devise : .getAvailableCurrency (), .getDisplayName () (mais sans .getNumericCode ())
- BitSet : .previousSetBit (), .previousClearBit (), .valueOf (), .toLongArray (), .toByteArray ()
- Collections : .emptyEnumeration (), .emptyIterator (), .emptyListIterator ()
- Fermeture automatique
- Throwable : .addSuppressed (), .getSuppressed () et le constructeur à 4 arguments
- Caractère : .compare (), .isSurrogate (), .getName (), .highSurrogate (), .lowSurrogate (), .isBmpCodePoint () (mais sans .isAlphabetic () et .isIdeographic ())
- Système: .lineSeparator () (non documenté?)
- java.lang.reflect.Modifier : .classModifiers (), .constructorModifiers (), .fieldModifiers (), .interfaceModifiers (), .methodModifiers ()
- NetworkInterface : .getIndex (), .getByIndex ()
- InetSocketAddress : .getHostString ()
- InetAddress : .getLoopbackAddress ()
- Enregistreur : .getGlobal ()
- ConcurrentLinkedDeque
- AbstractQueuedSynchronizer : .hasQueuedPredecessors ()
- DeflaterOutputStream : les 3 constructeurs avec "syncFlush".
- Deflater : .NO_FLUSH, .SYNC_FLUSH, .FULL_FLUSH, .deflate () avec 4 arguments
C'est pratiquement tout. En particulier, NIO 2.0 n'existe pas et Arrays.asList n'est toujours pas @SafeVarargs.