Skip to content

Most visited

Recently visited

navigation

Menggunakan Fitur Bahasa Java 8

Android Studio 3.0 dan yang lebih baru mendukung semua fitur bahasa Java 7 dan subset fitur bahasa Java 8 yang berbeda tiap versi platform. Halaman ini menjelaskan fitur bahasa Java 8 yang bisa Anda digunakan, cara mengonfigurasi dengan tepat project Anda untuk digunakan, dan masalah yang diketahui yang mungkin Anda temukan.

Catatan: Bila men-develop aplikasi untuk Android, menggunakan fitur bahasa Java 8 adalah opsional. Anda dapat menyimpan sumber project dan nilai kompatibilitas target yang ditetapkan untuk Java 7, tapi Anda tetap harus mengompilasi menggunakan JDK 8.

Android Studio menyediakan dukungan bawaan untuk menggunakan fitur bahasa Java 8 dan library pihak ketiga tertentu yang menggunakannya. Seperti yang ditampilkan dalam gambar 1, toolchain default mengimplementasikan fitur bahasa baru dengan melakukan transformasi bytecode, yang disebut desugar, pada keluaran compiler javac. Jack tidak lagi didukung, dan Anda terlebih dahulu harus menonaktifkan Jack untuk menggunakan dukungan Java 8 yang dimasukkan ke dalam toolchain default.

Gambar 1. Dukungan fitur bahasa Java 8 menggunakan transformasi bytecode desugar.

Untuk mulai menggunakan fitur bahasa Java 8 yang didukung, update Android plugin ke 3.0.0 (atau yang lebih tinggi). Setelah itu, untuk setiap modul yang menggunakan fitur bahasa Java 8 (baik dalam kode sumbernya maupun melalui dependensi), tambahkan yang berikut ini ke file build.gradle:

android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

Catatan: Jika Android Studio mendeteksi bahwa project Anda menggunakan Jack, Retrolambda, atau DexGuard, IDE akan menggunakan dukungan Java 8 yang disediakan oleh alat itu sebagai gantinya. Akan tetapi, pertimbangkan yang bermigrasi ke toolchain default.

Fitur Bahasa Java 8 yang Didukung dan API

Tidak semua fitur bahasa Java 8 didukung Android Studio, namun semakin banyak yang ditambahkan dalam rilis IDE mendatang. Bergantung pada minSdkVersion yang Anda gunakan, fitur dan API tertentu kini tersedia, seperti yang dijelaskan dalam tabel di bawah ini.

Fitur Bahasa Java 8 Kompatibel minSdkVersion
Ekspresi Lambda Apa saja. Akan tetapi, serialisasi lambda hanya didukung bila semua nilai yang direkam oleh lambda dapat diserialkan.
Referensi Metode Apa saja.
Anotasi Jenis Apa saja. Akan tetapi, informasi anotasi jenis tersedia pada waktu kompilasi, namun tidak pada waktu proses. Selain itu, platform ini mendukung TYPE di API level 24 dan yang lebih rendah, namun bukan ElementType.TYPE_USE atau ElementType.TYPE_PARAMETER.
Metode-metode antarmuka default dan statik Apa saja.
Anotasi berulang Apa saja.
API Bahasa Java 8 Kompatibel minSdkVersion
java.lang.annotation.Repeatable API level 24 atau yang lebih tinggi.
AnnotatedElement.getAnnotationsByType(Class) API level 24 atau yang lebih tinggi.
java.util.stream API level 24 atau yang lebih tinggi.
java.lang.FunctionalInterface API level 24 atau yang lebih tinggi.
java.lang.reflect.Method.isDefault() API level 24 atau yang lebih tinggi.
java.util.function API level 24 atau yang lebih tinggi.

Selain fitur bahasa Java 8 dan API di atas, Android Studio 3.0 dan yang lebih baru memperluas dukungan untuk try-dengan sumber daya pada semua API level Android.

Desugar saat ini tidak mendukung MethodHandle.invoke atau MethodHandle.invokeExact. Jika kode sumber Anda atau salah satu dependensi modul Anda menggunakan salah satu metode ini, Anda perlu menetapkan minSdkVersion 26 atau yang lebih tinggi. Jika tidak, Anda akan mendapatkan error berikut:

Dex: Error converting bytecode to dex:
Cause: signature-polymorphic method called without --min-sdk-version >= 26

Dalam beberapa kasus, modul Anda mungkin tidak menggunakan metode invoke atau invokeExact bahkan bila metode itu disertakan dalam dependensi library. Jadi, tetaplah menggunakan library itu bersama minSdkVersion 25 atau yang lebih rendah, mengaktifkan penciutan kode untuk menghapus metode yang tidak terpakai. Jika tidak berhasil, pertimbangkan menggunakan library alternatif yang tidak menggunakan metode yang tidak didukung.

Migrasi ke toolchain default

Jika Android Studio mendeteksi bahwa project Anda menggunakan Jack, Retrolambda, atau DexGuard, IDE akan menggunakan dukungan Java 8 yang disediakan oleh alat itu sebagai gantinya. Akan tetapi, dibandingkan dengan toolchain default, alat itu tidak memiliki beberapa fungsionalitas dan dukungan. Jadi ikuti petunjuk di bagian ini untuk migrasi ke toolchain default Android Studio.

Migrasi dari Jack

Toolchain Jack tidak digunakan lagi, sejak pengumuman ini. Jika project Anda bergantung pada Jack, Anda harus bermigrasi untuk menggunakan dukungan Java 8 yang dimasukkan ke dalam toolchain default Android Studio. Penggunaan toolchain default juga menyertakan dukungan untuk library pihak ketiga yang menggunakan fitur bahasa Java 8, Instant Run, dan alat yang bergantung pada file .class antara.

Untuk menonaktifkan Jack dan beralih ke toolchain default, hapus saja blok jackOptions dari file build.gradle modul Anda:

android {
    ...
    defaultConfig {
        ...
        // Remove this block.
        jackOptions {
            enabled true
            ...
        }
    }

    // Keep the following configuration in order to target Java 8.
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

Migrasi dari Retrolambda

Dibandingkan dengan toolchain default Android Studio, Retrolambda tidak memiliki dukungan untuk library pihak ketiga yang menggunakan fitur bahasa Java 8. Untuk bermigrasi ke toolchain default, hapus dependensi Retrolambda dari file build.gradle tingkat project:

buildscript {
  ...
   dependencies {
      // Remove the following dependency.
      classpath 'me.tatarka:gradle-retrolambda:<version_number>'
   }
}

Dan hapus plugin Retrolambda serta blok retrolambda dari setiap file build.gradle modul:

// Remove the following plugin.
apply plugin: 'me.tatarka.retrolambda'
...
// Remove this block after migrating useful configurations.
retrolambda {
    ...
    // If you have arguments for the Java VM you want to keep,
    // move them to your project's gradle.properties file.
    jvmArgs '-Xmx2048m'
}

Menonaktifkan Dukungan untuk Fitur Bahasa Java 8

Jika Anda mengalami masalah yang berkaitan dengan dukungan untuk fitur bahasa Java 8, Anda bisa menonaktifkannya dengan menambahkan yang berikut ini ke file gradle.properties Anda:

android.enableDesugar=false

Untuk membantu kami meningkatkan dukungan untuk Java 8, harap laporkan bug.

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Ikuti Google Developers di WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience. (Dec 2017 Android Platform & Tools Survey)