Android 8.1 (livello API 27) introduce una serie di nuove funzioni per utenti e sviluppatori. Questo documento mette in evidenza le novità per gli sviluppatori.
Android Oreo (Go edition)
Android Go è la nostra iniziativa volta a ottimizzare l'esperienza Android per miliardi di persone che accedono online in tutto il mondo. A partire da Android 8.1, stiamo rendendo Android un'ottima piattaforma per i dispositivi di fascia base. Funzionalità in Android Oreo Le configurazioni (Go edition) includono:
- Ottimizzazioni della memoria. Miglioramento dell'utilizzo della memoria in tutta la piattaforma per garantire che le app possano essere eseguite in modo efficiente su dispositivi con massimo 1 GB di RAM.
- Opzioni di targeting flessibili. Nuovi funzionalità hardware per consentirti di scegliere come target della distribuzione delle app i dispositivi normali o con RAM ridotta tramite su Google Play.
- Google Play. Tutte le app saranno disponibili sui dispositivi con Android Oreo. (Versione Go), Google Play darà visibilità alle app specificamente ottimizzate dagli sviluppatori per offrire un'esperienza eccezionale a miliardi di persone, con l'obiettivo di creare . linee guida.
Abbiamo aggiornato l'edificio per miliardi di persone linee guida con ulteriori indicazioni su come . ottimizzare l'app per i dispositivi in esecuzione Android Oreo (Go Edition). Per la maggior parte degli sviluppatori, ottimizzare l'APK esistente o usare di Google Play Più funzionalità degli APK per scegliere come target di una versione dell'APK i dispositivi con RAM bassa è il modo migliore per prepararsi ai dispositivi con Android Oreo (Go edition). Ricorda che rendere app più leggera ed efficiente a vantaggio di tutto il pubblico, indipendentemente dal dispositivo.
API Neural Networks
L'API Neural Networks fornisce calcolo e inferenza accelerati per i computer sul dispositivo di machine learning come TensorFlow Lite, la libreria ML multipiattaforma di Google per dispositivi mobili, così come Caffe2 e altri. Visita TensorFlow Lite open source un repository completo per i download e i documenti. TensorFlow Lite funziona con l'API Neural Networks per eseguire modelli come MobileNet Inception v3, e Risposta rapida in modo efficiente sul tuo dispositivo mobile.
Aggiornamenti del framework di compilazione automatica
Android 8.1 (livello API 27) offre diversi miglioramenti alla funzionalità il framework che puoi integrare nelle tue app.
BaseAdapter
ora include il setAutofillOptions()
che ti consente di fornire rappresentazioni in formato stringa dei valori in un
dell'adattatore. È utile per lo spinner
che generano dinamicamente i valori negli adattatori. Ad esempio:
puoi usare il metodo setAutofillOptions()
per fornire una stringa
una rappresentazione dell'elenco di anni che gli utenti possono scegliere nell'ambito
data di scadenza della carta di credito. I servizi di compilazione automatica possono utilizzare la rappresentazione stringa
per compilare in modo appropriato le viste che richiedono i dati.
Inoltre, AutofillManager
include il metodo notifyViewVisibilityChanged(View, int, boolean)
che puoi chiamare per notificare al framework le modifiche alla visibilità di un
in una struttura virtuale. C'è anche un sovraccarico del metodo per
di strutture virtuali. Tuttavia, le strutture non virtuali di solito non richiedono
inviare una notifica esplicita al framework perché il metodo è già richiamato dal
View
.
Android 8.1 offre inoltre ai servizi di compilazione automatica una maggiore possibilità di personalizzare l'interfaccia utente per il salvataggio
invito aggiungendo il supporto per CustomDescription
and
Validator
in SaveInfo
.
Le descrizioni personalizzate sono utili per aiutare il servizio di compilazione automatica a chiarire cosa è
in fase di salvataggio; ad esempio, se la schermata contiene una carta di credito,
mostrare il logo della banca della carta di credito, le ultime quattro cifre della carta
e il relativo numero di scadenza. Per saperne di più, consulta il
CustomDescription
.
Validator
vengono utilizzati per evitare di visualizzare
l'interfaccia utente di salvataggio della compilazione automatica quando lo strumento
non è soddisfatta. Per ulteriori informazioni, consulta la
strumento di convalida insieme alle relative sottoclassi,
LuhnChecksumValidator e RegexValidator.
Notifiche
Android 8.1 include le seguenti modifiche alle notifiche:
- Ora le app possono emettere un suono di avviso di notifica solo una volta al secondo. Suoni di avviso che superano questo limite la frequenza non viene messa in coda e viene persa. Questa modifica non influisce su altri aspetti delle notifiche il comportamento e i messaggi di notifica vengono ancora pubblicati come previsto.
-
NotificationListenerService
eConditionProviderService
non sono supportati su RAM bassa Dispositivi Android che restituisconotrue
quandoActivityManager.isLowRamDevice()
è stato chiamato.
Aggiornamento di EditText
A partire dal livello API 27, il metodo EditText.getText()
restituisce un Editable
; in precedenza
ha restituito CharSequence
. Questa modifica è
compatibile con le versioni precedenti, poiché Editable
implementa
CharSequence
.
L'interfaccia Editable
offre preziose
funzionalità. Ad esempio, perché anche Editable
implementa l'interfaccia Spannable
, puoi applicare il markup
contenuti in un'istanza di EditText
.
Azioni di Navigazione sicura programmatica
Utilizzando il
WebView
dell'API Navigazione sicura, la tua app può
rileva quando un'istanza di WebView
tenta di navigare
a un URL che Google ha classificato come minaccia nota. Per impostazione predefinita,
WebView
mostra un interstitial che avvisa gli utenti della minaccia nota.
Questa schermata offre agli utenti la possibilità di caricare comunque l'URL o di tornare a un
pagina precedente sia sicura.
In Android 8.1 puoi definire in modo programmatico il modo in cui risponde a una minaccia nota:
- Puoi controllare se la tua app segnala minacce note a Safe Navigazione.
- Puoi impostare l'app in modo che esegua automaticamente una determinata azione, ad esempio tornando nell'area protetta, ogni volta che rileva un URL che la funzione Navigazione sicura classifica come minaccia nota.
Nota:per una protezione ottimale contro le minacce note, attendi
finché non avrai inizializzato Navigazione sicura prima di richiamare un
Metodo loadUrl()
dell'oggetto WebView
.
I seguenti snippet di codice mostrano come puoi indicare alle istanze della tua app
WebView
per tornare sempre in sicurezza dopo aver riscontrato un
minaccia nota:
<manifest> <application> ... <meta-data android:name="android.webkit.WebView.EnableSafeBrowsing" android:value="true" /> </application> </manifest>
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!"); } } }); }
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(); } }
Estrattore miniature video
Il corso MediaMetadataRetriever
ha un nuovo metodo, getScaledFrameAtTime()
, che trova
un frame vicino a una determinata posizione temporale e restituisce una bitmap con lo stesso aspetto
rapporto come il frame di origine, ma ridimensionato per adattarsi a un rettangolo di una determinata larghezza e
altezza. È utile per generare immagini in miniatura a partire da un video.
Ti consigliamo di utilizzare questo metodo anziché getFrameAtTime()
perché potrebbe sprecare memoria
perché restituisce una bitmap con la stessa risoluzione del video sorgente. Per
Ad esempio, un frame di un video 4K sarà una bitmap di 16 MB, molto più grande di quanto
un'immagine in miniatura.
API Memoria condivisa
Android 8.1 (livello API 27) introduce una nuova
SharedMemory
tramite Google Cloud CLI
o tramite l'API Compute Engine. Questo corso ti consente di creare, mappare e gestire un
SharedMemory
in esecuzione in un'istanza Compute Engine. Sei tu a impostare la protezione della memoria
su un
SharedMemory
per la lettura e/o la scrittura e, poiché il
SharedMemory
:
è Parcelable, puoi passarlo facilmente a un altro processo tramite AIDL.
La SharedMemory
L'API interagisce con
struttura ASharedMemory
nella NDK.
ASharedMemory
concede l'accesso
a un descrittore del file, che può quindi essere mappato per la lettura e la scrittura. È un ottimo
per condividere ingenti quantità
di dati tra app o tra più processi all'interno di una sola app.
API BackgroundColors
Android 8.1 (livello API 27) consente al tuo sfondo animato di fornire colori
informazioni alla UI di sistema. Per farlo, crea un WallpaperColors
da una bitmap, un drawable o dall'utilizzo di tre colori selezionati manualmente.
Puoi anche recuperare queste informazioni sul colore.
Per creare un WallpaperColors
esegui una delle seguenti operazioni:
- Per creare un
WallpaperColors
utilizzando tre colori, crea un'istanza dell'oggettoWallpaperColors
passando il colore primario, secondario e terziario. Il principale il colore non deve essere nullo. - Per creare un
WallpaperColors
da una bitmap, richiamafromBitmap()
passando la sorgente bitmap come parametro. - Per creare un
WallpaperColors
oggetto da un drawable, chiamafromDrawable()
passando l'origine drawable come parametro.
Per recuperare i dettagli del colore primario, secondario o terziario dal sfondo, richiama i seguenti metodi:
getPrimaryColor()
restituisce il colore visivamente più rappresentativo dello sfondo.getSecondaryColor()
restituisce il secondo colore più importante dello sfondo.getTertiaryColor()
restituisce il terzo colore più importante dello sfondo.
Per notificare al sistema eventuali variazioni di colore significative dello sfondo animato,
chiama notifyColorsChanged()
. Questo metodo attiva un ciclo di vita onComputeColors()
evento in cui hai l'opportunità di fornire un nuovo WallpaperColors
.
Per aggiungere un listener per le variazioni di colore, puoi chiamare il metodo addOnColorsChangedListener()
. Puoi
chiama anche il metodo getWallpaperColors()
per recuperare i colori primari di uno sfondo.
Aggiornamenti dell'impronta
Il corso FingerprintManager
ha
sono stati introdotti i seguenti codici di errore:
-
FINGERPRINT_ERROR_LOCKOUT_PERMANENT
- L'utente ha provato troppe volte per sbloccare il dispositivo con il lettore di impronte digitali. -
FINGERPRINT_ERROR_VENDOR
: una fingerprint specifica del fornitore si è verificato un errore del lettore.
Aggiornamenti sulla crittografia
Con Android 8.1 sono state apportate diverse modifiche alla crittografia:
- In Conscrypt sono stati implementati nuovi algoritmi. The Conscrypt
l'implementazione è preferenzialmente utilizzata rispetto all'attuale Castello gonfiabile
implementazione. I nuovi algoritmi includono:
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)
no funziona per gli algoritmi che utilizzano GCM. Utilizza invecegetParameterSpec(GCMParameterSpec.class)
.- È stato eseguito il refactoring di molte classi Conscrypt interne associate a TLS. Dal giorno
a volte gli sviluppatori accedono in modo riflessivo,
supportano l'utilizzo precedente, ma alcuni dettagli sono cambiati. Ad esempio, socket
in precedenza erano di tipo
OpenSSLSocketImpl
, mentre ora sono di tipoConscryptFileDescriptorSocket
oConscryptEngineSocket
, entrambi estesiOpenSSLSocketImpl
. SSLSession
metodi usati per lanciareIllegalArgumentException
quando viene passato un riferimento nullo, ora lanciaNullPointerException
.- L'RSA
KeyFactory
non consente più la generazione di chiavi da array di byte più grandi della chiave codificata. Chiamate ageneratePrivate()
egeneratePublic()
che offrono unKeySpec
in cui la struttura della chiave non riempie la l'intero buffer genererà unInvalidKeySpecException
. - Quando la lettura di un socket viene interrotta a causa della chiusura del socket, viene utilizzato Conscrypt
per restituire -1 dalla lettura. La lettura ora genera
SocketException
. - L'insieme di certificati CA radice è stato modificato, rimuovendo soprattutto numero di certificati obsoleti, ma anche la rimozione dei certificati radice WoSign e StartCom. Per ulteriori informazioni su questa decisione, consulta le post del blog sulla sicurezza, Finale rimozione dell'attendibilità nei certificati WoSign e StartCom.