Android 8.1 (API level 27) memperkenalkan berbagai fitur dan kemampuan baru bagi pengguna dan developer. Dokumen ini menjelaskan hal-hal yang baru untuk developer.
Android Oreo (edisi Go)
Android Go adalah inisiatif kami untuk mengoptimalkan pengalaman Android bagi miliaran orang yang akan online di seluruh dunia. Dimulai dengan Android 8.1, kami menjadikan Android sebagai platform yang hebat bagi perangkat level pemula. Fitur dalam konfigurasi Android Oreo (edisi Go) meliputi:
- Pengoptimalan memori. Meningkatkan penggunaan memori di seluruh platform untuk memastikan aplikasi dapat berjalan secara efisien pada perangkat dengan RAM 1 GB atau lebih rendah.
- Opsi penargetan yang fleksibel. Konstanta fitur hardware yang baru untuk memungkinkan Anda menargetkan distribusi aplikasi ke perangkat normal atau dengan RAM rendah melalui Google Play.
- Google Play.Meskipun semua aplikasi akan tersedia di perangkat Android Oreo (edisi Go), Google Play akan memberikan visibilitas pada aplikasi yang secara khusus dioptimalkan oleh developer untuk memberikan pengalaman yang sangat baik bagi miliaran orang dengan pedoman membuat aplikasi bagi miliaran orang.
Kami telah memperbarui pedoman membuat aplikasi bagi miliaran orang dengan panduan tambahan tentang cara mengoptimalkan aplikasi Anda untuk perangkat yang menjalankan Android Oreo (edisi Go). Bagi sebagian besar developer, mengoptimalkan APK yang sudah ada atau menggunakan fitur Multi APK Google Play untuk menargetkan versi APK bagi perangkat dengan RAM rendah adalah cara terbaik untuk menyiapkan perangkat yang menjalankan Android Oreo (edisi Go). Ingatlah bahwa membuat aplikasi Anda lebih ringan dan lebih efisien akan menguntungkan semua audiens, apa pun perangkatnya.
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 seluler, serta Caffe2, dan lainnya. Kunjungi repo open source TensorFlow Lite untuk mendownload dan melihat dokumen. TensorFlow Lite dapat digunakan bersama 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 (API level 27) memberikan beberapa peningkatan pada Framework IsiOtomatis yang dapat Anda masukkan ke dalam aplikasi.
Class BaseAdapter
kini menyertakan metode setAutofillOptions()
, yang memungkinkan Anda memberikan representasi string dari nilai-nilai dalam adaptor. Hal ini berguna untuk kontrol spinner yang secara dinamis menghasilkan nilai dalam adaptor mereka. Misalnya, Anda dapat menggunakan metode setAutofillOptions()
untuk merepresentasikan string dari daftar tahun yang dapat dipilih pengguna sebagai bagian dari tanggal habis masa berlaku kartu kredit. Layanan IsiOtomatis dapat menggunakan representasi string untuk mengisi tampilan yang memerlukan data dengan tepat.
Selain itu, class AutofillManager
menyertakan metode notifyViewVisibilityChanged(View, int, boolean)
yang dapat Anda panggil untuk memberi tahu framework tentang perubahan dalam visibilitas tampilan di struktur virtual. Selain itu, juga terdapat kelebihan metode untuk struktur non-virtual. Namun, struktur non-virtual biasanya tidak mengharuskan Anda memberitahukan framework secara eksplisit karena metode tersebut telah dipanggil dengan class View
.
Android 8.1 juga memberikan Layanan IsiOtomatis dengan lebih banyak kemampuan untuk menyesuaikan UI yang disimpan sesuai keinginan dengan menambahkan dukungan untuk CustomDescription
and
Validator
dalam SaveInfo
.
Deskripsi kustom berguna untuk membantu layanan IsiOtomatis mengklarifikasi sesuatu yang sedang disimpan; misalnya, ketika layar berisi kartu kredit, layar dapat menampilkan logo bank kartu kredit, empat digit terakhir nomor kartu kredit, dan tanggal habis masa berlakunya. Untuk mempelajari lebih lanjut, lihat class
CustomDescription
.
Objek
Validator
digunakan agar tidak menampilkan UI penyimpanan IsiOtomatis saat kondisi Validator tidak terpenuhi. Untuk mempelajari lebih lanjut, lihat class Validator bersama subclassnya, LuhnChecksumValidator dan RegexValidator.
Notifikasi
Android 8.1 mencakup perubahan notifikasi berikut:
- Aplikasi saat ini hanya dapat membuat suara peringatan notifikasi sekali per detik. Suara notifikasi yang melebihi tingkat ini tidak diantrekan dan akan hilang. Perubahan ini tidak memengaruhi aspek perilaku notifikasi lainnya dan pesan notifikasi masih dikirim seperti yang diharapkan.
-
NotificationListenerService
danConditionProviderService
tidak didukung di perangkat yang didukung Android dengan RAM rendah yang menampilkantrue
ketikaActivityManager.isLowRamDevice()
dipanggil.
Update EditText
Dimulai dari API level 27, metode EditText.getText()
akan menampilkan Editable
; sebelumnya menampilkan CharSequence
. Perubahan ini kompatibel dengan versi yang lama karena Editable
mengimplementasikan CharSequence
.
Antarmuka Editable
memberikan fungsi tambahan yang amat penting. Misalnya, karena Editable
juga mengimplementasikan antarmuka Spannable
, Anda dapat menerapkan markup ke konten dalam instance EditText
.
Tindakan Safe Browsing terprogram
Dengan implementasi WebView
pada Safe Browsing API, aplikasi Anda dapat mendeteksi ketika instance WebView
mencoba menuju ke URL yang diklasifikasikan Google sebagai ancaman yang diketahui. Secara default, WebView
menunjukkan interstitial yang memperingatkan pengguna tentang ancaman yang diketahui.
Layar ini memberikan opsi kepada pengguna untuk tetap memuat URL atau kembali ke halaman sebelumnya yang aman.
Di Android 8.1, Anda dapat menentukan secara terprogram cara aplikasi merespons ancaman yang diketahui:
- Anda dapat mengontrol apakah aplikasi akan melaporkan ancaman yang diketahui ke Safe Browsing.
- Anda dapat mengatur agar aplikasi secara otomatis melakukan tindakan tertentu, misalnya kembali ke halaman yang aman, setiap kali menemukan URL yang diklasifikasikan sebagai ancaman yang diketahui.
Catatan: Untuk perlindungan optimal terhadap ancaman yang diketahui, tunggu hingga Anda memulai Safe Browsing sebelum mengaktifkan metode loadUrl()
objek WebView
.
Cuplikan kode berikut menunjukkan bagaimana Anda dapat menginstruksikan instance WebView
aplikasi untuk selalu kembali ke halaman aman setelah menjumpai 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 bingkai di dekat posisi waktu tertentu dan menampilkan bitmap dengan rasio tinggi lebar yang sama dengan bingkai sumber, tetapi diskalakan agar sesuai dengan persegi panjang dengan lebar dan tinggi yang telah ditentukan. Hal ini berguna untuk membuat gambar thumbnail dari video.
Kami merekomendasikan Anda untuk menggunakan metode ini daripada getFrameAtTime()
yang dapat membuang-buang memori karena menampilkan bitmap dengan resolusi yang sama dengan video sumber. Misalnya, bingkai dari video 4K akan menjadi bitmap 16 MB, jauh lebih besar daripada yang Anda perlukan untuk gambar thumbnail.
Shared memory API
Android 8.1 (API level 27) memperkenalkan SharedMemory
API baru. Class ini memungkinkan Anda membuat, memetakan, dan mengelola instance SharedMemory
anonim. Anda dapat menyetel perlindungan memori pada objek SharedMemory
untuk membaca dan/atau menulis, dan, karena objek SharedMemory
bersifat Parcelable, Anda dapat dengan mudah meneruskannya ke proses lain melalui AIDL.
SharedMemory
API dengan fasilitas ASharedMemory
di NDK. ASharedMemory
memberikan akses ke deskripsi file, yang kemudian dapat dipetakan untuk membaca dan menulis. Ini adalah cara yang bagus untuk membagikan data dalam jumlah besar di antara aplikasi atau beberapa proses dalam satu aplikasi.
WallpaperColors API
Android 8.1 (API level 27) memungkinkan wallpaper animasi memberikan informasi warna ke UI sistem. Anda dapat melakukan ini dengan membuat objek WallpaperColors
dari bitmap, resource yang dapat digambar, atau menggunakan tiga warna yang dipilih secara manual.
Anda juga dapat mengambil informasi warna ini.
Untuk membuat objek WallpaperColors
, lakukan salah satu cara berikut:
- Untuk membuat objek
WallpaperColors
menggunakan tiga warna, buat instance dari classWallpaperColors
dengan meneruskan warna primer, sekunder, dan tersier. Warna primer tidak boleh null. - Untuk membuat objek
WallpaperColors
dari bitmap, panggil metodefromBitmap()
dengan meneruskan sumber bitmap sebagai parameter. - Untuk membuat objek
WallpaperColors
dari resource yang dapat digambar, panggil metodefromDrawable()
dengan meneruskan sumber yang dapat digambar sebagai parameter.
Untuk mengambil detail warna primer, sekunder, atau tersier dari wallpaper, panggil metode berikut:
getPrimaryColor()
akan menampilkan warna wallpaper yang paling representatif secara visual.getSecondaryColor()
akan menampilkan warna wallpaper terbaik kedua.- Metode
getTertiaryColor()
akan menampilkan warna wallpaper terbaik ketiga.
Untuk memberi tahu sistem tentang perubahan signifikan pada warna dalam wallpaper animasi Anda, panggil metode notifyColorsChanged()
. Metode ini memicu peristiwa siklus aktif onComputeColors()
ketika Anda memiliki kesempatan untuk menyediakan objek WallpaperColors
yang baru.
Untuk menambahkan pemroses bagi perubahan warna, Anda dapat memanggil metode addOnColorsChangedListener()
. Anda juga dapat memanggil metode getWallpaperColors()
untuk mengambil warna primer wallpaper.
Pembaruan sidik jari
Class FingerprintManager
telah memasukkan kode error berikut:
-
FINGERPRINT_ERROR_LOCKOUT_PERMANENT
– Pengguna telah melakukan terlalu banyak percobaan untuk membuka kunci perangkat menggunakan pembaca sidik jari. -
FINGERPRINT_ERROR_VENDOR
– Terjadi error pada pembaca sidik jari spesifik vendor.
Pembaruan kriptografi
Sejumlah perubahan kriptografi telah dilakukan dengan Android 8.1:
- Algoritme baru telah diimplementasikan di Conscrypt. Implementasi Conscrypt lebih dipilih untuk digunakan daripada implementasi Bouncy Castle. Algoritme baru mencakup:
AlgorithmParameters:GCM
KeyGenerator:AES
KeyGenerator:DESEDE
KeyGenerator:HMACMD5
KeyGenerator:HMACSHA1
KeyGenerator:HMACSHA224
KeyGenerator:HMACSHA256
KeyGenerator:HMACSHA384
KeyGenerator:HMACSHA512
SecretKeyFactory:DESEDE
Signature:NONEWITHECDSA
Cipher.getParameters().getParameterSpec(IvParameterSpec.class)
tidak lagi berfungsi bagi algoritme yang menggunakan GCM. Sebaliknya, gunakangetParameterSpec(GCMParameterSpec.class)
.- Banyak class Conscrypt internal yang terkait dengan TLS telah difaktorkan ulang. Karena developer terkadang mengaksesnya secara reflektif, shims telah ditinggalkan untuk mendukung penggunaan sebelumnya, tetapi beberapa detail telah berubah. Misalnya, soket sebelumnya berjenis
OpenSSLSocketImpl
, tetapi kini berjenisConscryptFileDescriptorSocket
atauConscryptEngineSocket
, yang mana keduanya memperpanjangOpenSSLSocketImpl
. - Metode
SSLSession
digunakan untuk menampilkanIllegalArgumentException
ketika meneruskan referensi null, metode tersebut kini menampilkanNullPointerException
. - RSA
KeyFactory
tidak lagi mengizinkan pembuatan kunci dari array byte yang lebih besar dari kunci yang dienkodekan. Panggilan kegeneratePrivate()
dangeneratePublic()
yang memberikanKeySpec
dengan struktur kunci yang tidak mengisi seluruh buffer akan menghasilkanInvalidKeySpecException
. - Ketika pembacaan soket terganggu oleh soket yang ditutup, Conscrypt akan digunakan untuk menampilkan -1 dari pembacaan. Pembacaan sekarang akan menampilkan
SocketException
. - Rangkaian sertifikat CA root telah diubah, sebagian besar perubahannya adalah menghapus sertifikat yang usang, serta menghapus sertifikat root untuk WoSign dan StartCom. Untuk informasi lebih lanjut tentang keputusan ini, lihat postingan Blog Keamanan Google, Penghapusan akhir kepercayaan dalam Sertifikat WoSign dan StartCom.