Wenn Sie Android Studio verwenden , die Java 7- Sprache automatisch ohne Patches aktiviert werden. Für das Ausprobieren von Ressourcen ist API Level 19+ erforderlich, und NIO 2.0-Inhalte fehlen.
Wenn Sie keine Java 7-Funktionen verwenden können, lesen Sie die Antwort von @Nuno zum Bearbeiten Ihrer build.gradle
.
Das Folgende ist nur für historisches Interesse.
Ein kleiner Teil von Java 7 kann sicherlich mit Android verwendet werden (Hinweis: Ich habe nur auf 4.1 getestet).
Erstens konnten Sie Eclipse's ADT nicht verwenden, da fest codiert ist, dass nur Java Compiler 1.5 und 1.6 kompatibel sind. Sie könnten ADT neu kompilieren, aber ich finde, es gibt keinen einfachen Weg, dies zu tun, außer das gesamte Android zusammen neu zu kompilieren.
Sie müssen Eclipse jedoch nicht verwenden. Zum Beispiel unterstützen Android Studio 0.3.2 , IntelliJ IDEA CE und andere Javac-basierte IDEs das Kompilieren auf Android, und Sie können die Konformität sogar auf Java 8 einstellen mit:
- Datei → Projektstruktur → Module → (wählen Sie das Modul im 2. Bereich aus) → Sprachstufe → (wählen Sie "7.0 - Diamanten, ARM, Multi-Catch usw.")
Dies erlaubt nur Java 7- Sprachfunktionen , und Sie können kaum von irgendetwas profitieren, da eine halbe Verbesserung auch von der Bibliothek kommt. Funktionen, die Sie verwenden können, sind diejenigen, die nicht von der Bibliothek abhängen:
- Diamantoperator (
<>
)
- String-Schalter
- Mehrfachfang (
catch (Exc1 | Exc2 e)
)
- Unterstreichen Sie in Zahlenliteralen (
1_234_567
)
- Binäre Literale (
0b1110111
)
Und diese Funktionen können noch nicht verwendet werden :
- Die
try
Anweisung -with-resources - da die nicht vorhandene Schnittstelle "java.lang.AutoCloseable" erforderlich ist (diese kann in 4.4+ öffentlich verwendet werden).
- Die Annotation @SafeVarargs - da "java.lang.SafeVarargs" nicht vorhanden ist
... "noch" :) Es stellt sich heraus, dass die Android-Quelle, obwohl die Bibliothek von Android auf 1.6 abzielt, Schnittstellen wie AutoCloseable enthält und herkömmliche Schnittstellen wie Closeable von AutoCloseable erben (SafeVarargs fehlt jedoch wirklich). Wir könnten seine Existenz durch Reflexion bestätigen. Sie werden einfach versteckt, weil der Javadoc das @hide
Tag hat, was dazu führte, dass die "android.jar" sie nicht enthielt.
Es gibt bereits eine Frage: Wie erstelle ich das Android SDK mit versteckten und internen APIs? wie man diese Methoden zurückbekommt. Sie müssen nur ersetzen die vorhandene "android.jar" -Referenz der aktuellen Plattform durch unsere angepasste , dann werden viele der Java 7-APIs verfügbar (die Vorgehensweise ähnelt der in Eclipse. Überprüfen Sie die Projektstruktur → SDKs.)
Zusätzlich zu AutoCloseable werden (nur) die folgenden Funktionen der Java 7- Bibliothek angezeigt :
- Konstruktoren für die Verkettung von Ausnahmen in ConcurrentModificationException, LinkageError und AssertionError
- Die statischen .compare () -Methoden für Grundelemente: Boolean.compare (), Byte.compare (), Short.compare (), Character.compare (), Integer.compare (), Long.compare ().
- Währung : .getAvailableCurrencies (), .getDisplayName () (jedoch ohne .getNumericCode ())
- BitSet : .previousSetBit (), .previousClearBit (), .valueOf (), .toLongArray (), .toByteArray ()
- Sammlungen : .emptyEnumeration (), .emptyIterator (), .emptyListIterator ()
- AutoCloseable
- Throwable : .addSuppressed (), .getSuppressed () und der Konstruktor mit 4 Argumenten
- Zeichen : .compare (), .isSurrogate (), .getName (), .highSurrogate (), .lowSurrogate (), .isBmpCodePoint () (jedoch ohne .isAlphabetic () und .isIdeographic ())
- System: .lineSeparator () (undokumentiert?)
- java.lang.reflect.Modifier : .classModifiers (), .constructorModifiers (), .fieldModifiers (), .interfaceModifiers (), .methodModifiers ()
- Netzwerkschnittstelle : .getIndex (), .getByIndex ()
- InetSocketAddress : .getHostString ()
- InetAddress : .getLoopbackAddress ()
- Logger : .getGlobal ()
- ConcurrentLinkedDeque
- AbstractQueuedSynchronizer : .hasQueuedPredecessors ()
- DeflaterOutputStream : Die 3 Konstruktoren mit "syncFlush".
- Deflater : .NO_FLUSH, .SYNC_FLUSH, .FULL_FLUSH, .deflate () mit 4 Argumenten
Das ist im Grunde alles. Insbesondere existiert NIO 2.0 nicht und Arrays.asList ist immer noch nicht @SafeVarargs.