Android 8.1 (level API 27) memperkenalkan berbagai fitur dan kemampuan baru bagi pengguna dan developer. Dokumen ini merangkum apa saja yang baru untuk developer.
Android Oreo (Go edition)
Android Go adalah inisiatif kami untuk mengoptimalkan pengalaman Android bagi miliaran orang yang baru terhubung ke internet di seluruh dunia. Mulai Android 8.1, kami menjadikan Android sebagai platform yang hebat untuk perangkat entry-level. Fitur dalam konfigurasi Android Oreo (edisi Go) mencakup:
- Pengoptimalan memori. Penggunaan memori yang ditingkatkan di seluruh platform untuk memastikan bahwa aplikasi dapat berjalan secara efisien di perangkat dengan RAM 1 GB atau kurang.
- Opsi penargetan yang fleksibel. Konstanta fitur hardware baru untuk memungkinkan Anda menargetkan distribusi aplikasi ke perangkat dengan RAM normal atau rendah melalui Google Play.
- Google Play.Meskipun semua aplikasi akan tersedia di perangkat yang menjalankan Android Oreo (edisi Go), Google Play akan memberikan visibilitas pada aplikasi yang dioptimalkan secara khusus oleh developer untuk memberikan pengalaman yang luar biasa bagi miliaran orang dengan panduan membangun untuk miliaran orang .
Kami telah memperbarui pedoman membangun untuk miliaran pengguna dengan panduan tambahan tentang cara mengoptimalkan aplikasi Anda untuk perangkat yang menjalankan Android Oreo (edisi Go). Bagi sebagian besar developer, mengoptimalkan APK yang ada atau menggunakan fitur Beberapa APK Google Play untuk menargetkan versi APK ke perangkat dengan RAM rendah adalah cara terbaik untuk bersiap menghadapi perangkat yang menjalankan Android Oreo (edisi Go). Ingatlah bahwa membuat aplikasi Anda lebih ringan dan lebih efisien akan memberikan manfaat bagi seluruh audiens Anda, terlepas dari perangkat yang digunakan.
Neural Networks API
Neural Networks API menyediakan komputasi dan inferensi yang dipercepat untuk framework machine learning di perangkat seperti TensorFlow Lite—library ML lintas platform Google untuk perangkat seluler—serta Caffe2 dan lainnya. Buka repo open source TensorFlow Lite untuk mendownload dan melihat dokumentasi. TensorFlow Lite bekerja dengan Neural Networks API untuk menjalankan model seperti MobileNets, Inception v3, dan Smart Reply secara efisien di perangkat seluler Anda.
Update framework IsiOtomatis
Android 8.1 (level API 27) memberikan beberapa peningkatan pada Framework Isi Otomatis yang dapat Anda gabungkan ke dalam aplikasi Anda.
Class BaseAdapter
kini menyertakan metode setAutofillOptions(), yang memungkinkan Anda memberikan representasi string dari nilai dalam
adapter. Hal ini berguna untuk kontrol spinner yang menghasilkan nilai secara dinamis di adaptornya. Misalnya,
Anda dapat menggunakan metode setAutofillOptions() untuk memberikan representasi string
dari daftar tahun yang dapat dipilih pengguna sebagai bagian dari
tanggal habis masa berlaku kartu kredit. Layanan isi otomatis dapat menggunakan representasi string
untuk mengisi tampilan yang memerlukan data dengan tepat.
Selain itu, class AutofillManager
mencakup metode notifyViewVisibilityChanged(View, int, boolean)
yang dapat Anda panggil untuk memberi tahu framework tentang perubahan visibilitas
tampilan dalam struktur virtual. Ada juga kelebihan beban metode untuk struktur non-virtual. Namun, struktur non-virtual biasanya tidak mengharuskan Anda untuk
memberi tahu framework secara eksplisit karena metode ini sudah dipanggil oleh class
View.
Android 8.1 juga memberikan kemampuan yang lebih besar bagi Layanan Isi Otomatis untuk menyesuaikan daya tarik UI penyimpanan dengan menambahkan dukungan untuk CustomDescription
and Validator
dalam SaveInfo.
Deskripsi kustom berguna untuk membantu layanan isi otomatis mengklarifikasi apa yang
disimpan; misalnya, saat layar berisi kartu kredit, layar dapat
menampilkan logo bank kartu kredit, empat digit terakhir nomor kartu kredit
dan nomor masa berlakunya. Untuk mempelajari lebih lanjut, lihat class
CustomDescription.
Objek
Validator
digunakan untuk menghindari tampilan UI simpan isi otomatis saat kondisi
Validator tidak terpenuhi. Untuk mempelajari lebih lanjut, lihat class
Validator beserta sub-class-nya,
LuhnChecksumValidator dan RegexValidator.
Notifikasi
Android 8.1 mencakup perubahan notifikasi berikut:
- Aplikasi saat ini hanya dapat membuat suara peringatan notifikasi sekali per detik. Suara pemberitahuan yang melebihi kecepatan ini tidak diantrekan dan akan hilang. Perubahan ini tidak memengaruhi aspek lain dari perilaku notifikasi dan pesan notifikasi tetap diposting seperti yang diharapkan.
-
NotificationListenerServicedanConditionProviderServicetidak didukung di perangkat berbasis Android dengan RAM rendah yang menampilkantruesaatActivityManager.isLowRamDevice()dipanggil.
Update EditText
Mulai dari level API 27, metode EditText.getText() menampilkan Editable; sebelumnya
metode ini menampilkan CharSequence. Perubahan ini kompatibel mundur, karena Editable mengimplementasikan CharSequence.
Antarmuka Editable menyediakan fungsi tambahan yang berharga. Misalnya, karena Editable juga menerapkan antarmuka Spannable, Anda dapat menerapkan markup ke konten dalam instance EditText.
Tindakan Safe Browsing terprogram
Dengan menggunakan
WebView penerapan Safe Browsing API, aplikasi Anda dapat
mendeteksi saat instance WebView mencoba membuka
URL yang telah diklasifikasikan oleh Google sebagai ancaman yang diketahui. Secara default, WebView menampilkan interstisial yang memperingatkan pengguna tentang ancaman yang diketahui.
Layar ini memberi pengguna opsi untuk tetap memuat URL atau kembali ke
halaman sebelumnya yang aman.
Di Android 8.1, Anda dapat menentukan secara terprogram cara aplikasi Anda merespons ancaman yang diketahui:
- Anda dapat mengontrol apakah aplikasi Anda melaporkan ancaman yang diketahui ke Safe Browsing atau tidak.
- Aplikasi Anda dapat otomatis melakukan tindakan tertentu—seperti kembali ke kondisi aman—setiap kali aplikasi tersebut menemukan URL yang diklasifikasikan oleh Safe Browsing sebagai ancaman yang diketahui.
Catatan: Untuk perlindungan optimal terhadap ancaman yang diketahui, tunggu hingga Anda menginisialisasi Safe Browsing sebelum memanggil metode loadUrl() objek WebView.
Cuplikan kode berikut menunjukkan cara Anda dapat menginstruksikan instance
WebView aplikasi Anda untuk selalu kembali ke kondisi aman setelah menemukan
ancaman yang diketahui:
AndroidManifest.xml
<manifest>
<application>
...
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
</application>
</manifest>MyWebActivity.java
Kotlin
private var superSafeWebView: WebView? = null private var safeBrowsingIsInitialized: Boolean = false // ... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) superSafeWebView = WebView(this).apply { webViewClient = MyWebViewClient() safeBrowsingIsInitialized = false startSafeBrowsing(this@SafeBrowsingActivity, { success -> safeBrowsingIsInitialized = true if (!success) { Log.e("MY_APP_TAG", "Unable to initialize Safe Browsing!") } }) } }
Java
private WebView superSafeWebView; private boolean safeBrowsingIsInitialized; // ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); superSafeWebView = new WebView(this); superSafeWebView.setWebViewClient(new MyWebViewClient()); safeBrowsingIsInitialized = false; superSafeWebView.startSafeBrowsing(this, new ValueCallback<Boolean>() { @Override public void onReceiveValue(Boolean success) { safeBrowsingIsInitialized = true; if (!success) { Log.e("MY_APP_TAG", "Unable to initialize Safe Browsing!"); } } }); }
MyWebViewClient.java
Kotlin
class MyWebViewClient : WebViewClient() { // Automatically go "back to safety" when attempting to load a website that // Safe Browsing has identified as a known threat. An instance of WebView // calls this method only after Safe Browsing is initialized, so there's no // conditional logic needed here. override fun onSafeBrowsingHit( view: WebView, request: WebResourceRequest, threatType: Int, callback: SafeBrowsingResponse ) { // The "true" argument indicates that your app reports incidents like // this one to Safe Browsing. callback.backToSafety(true) Toast.makeText(view.context, "Unsafe web page blocked.", Toast.LENGTH_LONG).show() } }
Java
public class MyWebViewClient extends WebViewClient { // Automatically go "back to safety" when attempting to load a website that // Safe Browsing has identified as a known threat. An instance of WebView // calls this method only after Safe Browsing is initialized, so there's no // conditional logic needed here. @Override public void onSafeBrowsingHit(WebView view, WebResourceRequest request, int threatType, SafeBrowsingResponse callback) { // The "true" argument indicates that your app reports incidents like // this one to Safe Browsing. callback.backToSafety(true); Toast.makeText(view.getContext(), "Unsafe web page blocked.", Toast.LENGTH_LONG).show(); } }
Ekstraktor thumbnail video
Class MediaMetadataRetriever memiliki metode baru, getScaledFrameAtTime(), yang menemukan
frame di dekat posisi waktu tertentu dan menampilkan bitmap dengan rasio aspek yang sama
dengan frame sumber, tetapi diskalakan agar sesuai dengan persegi panjang dengan lebar dan
tinggi tertentu. Hal ini berguna untuk membuat gambar thumbnail dari video.
Sebaiknya gunakan metode ini daripada getFrameAtTime() yang dapat membuang-buang memori karena menampilkan bitmap dengan resolusi yang sama seperti video sumber. Misalnya, frame dari video 4K akan menjadi bitmap 16 MB, jauh lebih besar daripada yang Anda butuhkan untuk gambar thumbnail.
Shared memory API
Android 8.1 (API level 27) memperkenalkan API
SharedMemory
baru. Dengan class ini, Anda dapat membuat, memetakan, dan mengelola instance
SharedMemory
anonim. Anda menetapkan perlindungan memori
pada
objek SharedMemory
untuk membaca dan/atau menulis, dan, karena
objek SharedMemory
dapat di-Parcel, Anda dapat dengan mudah meneruskannya ke proses lain melalui AIDL.
API SharedMemory beroperasi dengan fasilitas ASharedMemory di NDK.
ASharedMemory memberikan akses
ke deskriptor file, yang kemudian dapat dipetakan untuk dibaca dan ditulis. Cara ini adalah cara yang bagus untuk membagikan data dalam jumlah besar antar-aplikasi atau antar-beberapa proses dalam satu aplikasi.
WallpaperColors API
Android 8.1 (level API 27) memungkinkan wallpaper animasi Anda memberikan informasi warna ke UI sistem. Anda melakukannya dengan membuat objek WallpaperColors
dari bitmap, drawable, atau dengan menggunakan tiga warna yang dipilih secara manual.
Anda juga dapat mengambil informasi warna ini.
Untuk membuat objek WallpaperColors, lakukan salah satu hal berikut:
- Untuk membuat objek
WallpaperColorsdengan menggunakan tiga warna, buat instance classWallpaperColorsdengan meneruskan warna primer, sekunder, dan tersier. Warna primer tidak boleh null. - Untuk membuat objek
WallpaperColorsdari bitmap, panggil metodefromBitmap()dengan meneruskan sumber bitmap sebagai parameter. - Untuk membuat objek
WallpaperColorsdari drawable, panggil metodefromDrawable()dengan meneruskan sumber drawable sebagai parameter.
Untuk mengambil detail warna primer, sekunder, atau tersier dari wallpaper, panggil metode berikut:
getPrimaryColor()menampilkan warna wallpaper yang paling representatif secara visual.getSecondaryColor()menampilkan warna kedua yang paling dominan dari wallpaper.- Metode
getTertiaryColor()menampilkan warna ketiga yang paling dominan dari wallpaper.
Untuk memberi tahu sistem tentang perubahan warna signifikan dalam wallpaper animasi Anda, panggil metode notifyColorsChanged(). Metode ini memicu peristiwa siklus proses onComputeColors()
tempat Anda memiliki kesempatan untuk memberikan objek WallpaperColors
baru.
Untuk menambahkan pemroses perubahan warna, Anda dapat memanggil metode addOnColorsChangedListener(). Anda juga dapat memanggil metode getWallpaperColors() untuk mengambil warna primer wallpaper.
Pembaruan sidik jari
Class FingerprintManager telah
memperkenalkan kode error berikut:
-
FINGERPRINT_ERROR_LOCKOUT_PERMANENT– Pengguna telah mencoba terlalu sering untuk membuka kunci perangkatnya menggunakan pembaca sidik jari. -
FINGERPRINT_ERROR_VENDOR– Terjadi error pembaca sidik jari khusus vendor.
Pembaruan kriptografi
Sejumlah perubahan kriptografi telah dilakukan dengan Android 8.1:
- Algoritme baru telah diimplementasikan di Conscrypt. Implementasi Conscrypt
lebih disukai daripada implementasi Bouncy Castle
yang ada. Algoritma baru mencakup:
AlgorithmParameters:GCMKeyGenerator:AESKeyGenerator:DESEDEKeyGenerator:HMACMD5KeyGenerator:HMACSHA1KeyGenerator:HMACSHA224KeyGenerator:HMACSHA256KeyGenerator:HMACSHA384KeyGenerator:HMACSHA512SecretKeyFactory:DESEDESignature:NONEWITHECDSA
Cipher.getParameters().getParameterSpec(IvParameterSpec.class)tidak lagi berfungsi untuk algoritma yang menggunakan GCM. Sebagai gantinya, gunakangetParameterSpec(GCMParameterSpec.class).- Banyak class Conscrypt internal yang terkait dengan TLS telah difaktorkan ulang. Karena developer terkadang mengaksesnya secara reflektif, shim tetap ada untuk mendukung penggunaan sebelumnya, tetapi beberapa detail telah berubah. Misalnya, soket sebelumnya berjenis
OpenSSLSocketImpl, tetapi sekarang berjenisConscryptFileDescriptorSocketatauConscryptEngineSocket, yang keduanya memperluasOpenSSLSocketImpl. - Metode
SSLSessionyang digunakan untuk memunculkanIllegalArgumentExceptionsaat meneruskan referensi null, kini memunculkanNullPointerException. - RSA
KeyFactorytidak lagi mengizinkan pembuatan kunci dari array byte yang lebih besar dari kunci yang dienkode. Panggilan kegeneratePrivate()dangeneratePublic()yang menyediakanKeySpecdengan struktur kunci yang tidak mengisi seluruh buffer akan menghasilkanInvalidKeySpecException. - Saat pembacaan soket terganggu karena soket ditutup, Conscrypt akan menampilkan -1 dari pembacaan. Baca sekarang akan menampilkan
SocketException. - Kumpulan sertifikat CA root telah diubah, sebagian besar menghapus sejumlah besar sertifikat yang sudah tidak berlaku, tetapi juga menghapus sertifikat root untuk WoSign dan StartCom. Untuk mengetahui informasi selengkapnya tentang keputusan ini, lihat postingan Blog Keamanan Google, Penghapusan akhir kepercayaan di Sertifikat WoSign dan StartCom.