Android 8.1 (niveau d'API 27) introduit plusieurs pour les utilisateurs et les développeurs. Ce document présente les nouveautés pour les développeurs.
Android Oreo (édition Go)
<ph type="x-smartling-placeholder"></ph> Android Go est notre initiative visant à optimiser l'expérience Android pour des milliards de personnes qui se connectent à Internet dans le monde. À partir d'Android 8.1, nous faisons d'Android une excellente plate-forme pour les appareils d'entrée de gamme. Fonctionnalités d'Android Oreo (édition Go) incluent:
- Optimisations de la mémoire. Une meilleure utilisation de la mémoire sur la plate-forme que les applications peuvent fonctionner efficacement sur des appareils avec 1 Go de RAM ou moins.
- Options de ciblage flexibles : Nouveau fonctionnalité matérielle constantes pour cibler la distribution de vos applications sur des appareils à mémoire RAM normale ou faible Google Play.
- Google Play. Toutes les applications seront toutefois disponibles sur les appareils équipés d'Android Oreo. (édition Go), Google Play donnera de la visibilité aux applications spécifiquement optimisées par les développeurs offrir une expérience optimale à des milliards de personnes grâce à la construction pour des milliards <ph type="x-smartling-placeholder"></ph> consignes.
Nous avons mis à jour le bâtiment pour des milliards d'utilisateurs <ph type="x-smartling-placeholder"></ph> Consignes ainsi que des informations supplémentaires sur la façon de <ph type="x-smartling-placeholder"></ph> optimiser votre application pour les appareils en cours d'exécution Android Oreo (édition Go) Pour la plupart des développeurs, optimiser leur APK existant ou utiliser de Google Play Fonctionnalité d'APK multiples pour cibler une version de votre APK sur les appareils à faible RAM est le meilleur moyen de se préparer aux appareils équipés d'Android Oreo (édition Go). N'oubliez pas qu'il est important application plus légère et plus efficace profite à l'ensemble de votre audience, quel que soit l'appareil utilisé.
API Neural Networks
L'API Neural Networks fournit des calculs et des inférences accélérés pour les machines sur l'appareil. de machine learning tels que TensorFlow Lite, la bibliothèque de ML multiplate-forme de Google pour mobile, ainsi que Caffe2 et d’autres. Consulter le guide TensorFlow Lite Open Source pour les téléchargements et la documentation. TensorFlow Lite fonctionne avec l'API Neural Networks pour exécuter des modèles MobileNets Inception v3, et la fonctionnalité Réponse suggérée sur votre appareil mobile.
Mises à jour de Autofill Framework
Android 8.1 (niveau d'API 27) offre plusieurs améliorations de la saisie automatique Framework que vous pouvez intégrer dans vos applications.
BaseAdapter
La classe inclut désormais setAutofillOptions()
, qui vous permet de fournir des représentations sous forme de chaîne des valeurs d'une
adaptateur secteur. Ceci est utile pour spinner.
qui génèrent dynamiquement les valeurs dans leurs adaptateurs. Par exemple :
vous pouvez utiliser la méthode setAutofillOptions()
pour fournir une chaîne
représentation de la liste des années que les utilisateurs peuvent choisir dans le cadre d'une
la date d'expiration de la carte de crédit. Les services de saisie automatique peuvent utiliser la représentation sous forme de chaîne
pour remplir de manière appropriée
les vues qui ont besoin des données.
De plus, le AutofillManager
La classe inclut la méthode notifyViewVisibilityChanged(View, int, boolean)
.
que vous pouvez appeler pour avertir le framework des changements dans la visibilité
dans une structure virtuelle. La méthode est également surchargée
des structures virtuelles. Cependant, les structures non virtuelles ne vous obligent généralement pas à
notifier explicitement le framework, car la méthode est déjà appelée par
View
.
Android 8.1 permet également aux services de saisie automatique de personnaliser davantage l'UI d'enregistrement.
affordance en ajoutant la prise en charge de CustomDescription
and
Validator
.
dans un délai de SaveInfo
.
Les descriptions personnalisées aident le service de saisie automatique à clarifier
en cours d'enregistrement ; Par exemple, lorsque l'écran contient
une carte de crédit, il pourrait
le logo de la banque et les quatre derniers chiffres de la carte de crédit ;
et son numéro d'expiration. Pour en savoir plus, consultez le
CustomDescription
.
Validator
sont utilisés pour éviter d'afficher l'UI de sauvegarde de saisie automatique lorsque l'outil de validation
condition n'est pas remplie. Pour en savoir plus, consultez les
Validator ainsi que ses sous-classes,
LuhnChecksumValidator et RegexValidator.
Notifications
Android 8.1 apporte les modifications suivantes aux notifications:
- Les applications ne peuvent désormais émettre une alerte de notification qu'une fois par seconde. Sons d'alerte dépassant cette ne sont pas mis en file d’attente et sont perdus. Cette modification n'a aucune incidence sur les autres aspects des notifications et les messages de notification continuent à s'afficher normalement.
-
NotificationListenerService
etConditionProviderService
ne sont pas pris en charge avec une mémoire RAM faible Les appareils Android qui renvoienttrue
lorsqueActivityManager.isLowRamDevice()
est appelé.
Mise à jour d'EditText
À partir du niveau d'API 27, la méthode EditText.getText()
renvoie un Editable
. précédemment
il a renvoyé un résultat CharSequence
. Cette modification est
rétrocompatible, puisque Editable
implémente
CharSequence
L'interface Editable
offre des fonctionnalités supplémentaires
de Google Cloud. Par exemple, comme Editable
implémente l'interface Spannable
, vous pouvez appliquer un balisage
contenu dans une instance de EditText
.
Actions de navigation sécurisée programmatique
En utilisant le
WebView
de l'API Safe Browsing, votre application peut
détecter quand une instance de WebView
tente de naviguer
à une URL que Google a classée
comme menace connue. Par défaut,
WebView
affiche un interstitiel qui avertit les utilisateurs de la menace connue.
Cet écran permet aux utilisateurs de charger quand même l'URL ou de revenir
page précédente sans risque.
Sous Android 8.1, vous pouvez définir de manière programmatique la façon dont vos l'application à une menace connue:
- Vous pouvez contrôler si votre application signale les menaces connues à Safe Navigation.
- Vous pouvez faire en sorte que votre application effectue automatiquement une action particulière, comme à la sécurité. Chaque fois qu'il tombe sur une URL vers laquelle la navigation sécurisée est classé comme une menace connue.
Remarque:Pour une protection optimale contre les menaces connues, attendez
tant que vous n'avez pas initialisé la navigation sécurisée avant d'appeler une
la méthode loadUrl()
de l'objet WebView
.
Les extraits de code suivants montrent comment indiquer aux instances de votre application
WebView
pour toujours revenir en sécurité après avoir rencontré un
menace connue:
<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(); } }
Extracteur de miniatures de vidéos
La classe MediaMetadataRetriever
dispose d'une nouvelle méthode, getScaledFrameAtTime()
, qui trouve
une image à proximité d'une position temporelle donnée et renvoie un bitmap ayant le même aspect
comme le cadre source, mais mis à l'échelle pour s'adapter à un rectangle de largeur et
hauteur. Cela s'avère utile pour générer des miniatures à partir d'une vidéo.
Nous vous recommandons d'utiliser cette méthode plutôt que getFrameAtTime()
, qui peut gaspiller de la mémoire
car il renvoie un bitmap ayant la même résolution que la vidéo source. Pour
Par exemple, l'image d'une vidéo 4K correspond à un bitmap de 16 Mo, soit beaucoup plus
une image miniature.
API de mémoire partagée
Android 8.1 (niveau d'API 27) introduit une nouvelle
SharedMemory
API. Cette classe vous permet de créer, de mapper et de gérer
SharedMemory
Compute Engine. Vous définissez la protection de la mémoire
sur un
SharedMemory
pour la lecture et/ou l'écriture.
SharedMemory
est Parcelable, vous pouvez facilement le transmettre à un autre processus via AIDL.
SharedMemory
L'API interagit avec
ASharedMemory
dans le NDK.
ASharedMemory
autorise l'accès
à un descripteur de fichier, qui peut ensuite
être mappé en lecture et en écriture. C'est une
de partager de
grandes quantités
entre des applications ou entre plusieurs processus au sein d'une même application.
API Fond d'écranColors
Android 8.1 (niveau d'API 27) permet d'afficher des couleurs sur votre fond d'écran animé
à l'UI du système. Pour ce faire, créez un WallpaperColors
à partir d'un bitmap, d'un drawable ou en utilisant trois couleurs sélectionnées manuellement.
Vous pouvez également récupérer ces informations de couleur.
Pour créer un WallpaperColors
, effectuez l'une des opérations suivantes:
- Pour créer un
WallpaperColors
à l'aide de trois couleurs, créez une instance deWallpaperColors
en transmettant la couleur primaire, secondaire et tertiaire. L'instance principale color ne doit pas avoir une valeur nulle. - Pour créer un
WallpaperColors
à partir d'un bitmap, appelez la méthodefromBitmap()
en transmettant la source bitmap comme paramètre. - Pour créer un
WallpaperColors
à partir d'un drawable, appelez la méthodefromDrawable()
en transmettant la source du drawable en tant que paramètre.
Pour récupérer les détails de la couleur primaire, secondaire ou tertiaire de la fond d'écran, appelez les méthodes suivantes:
getPrimaryColor()
renvoie la couleur la plus représentative du fond d'écran.getSecondaryColor()
renvoie la deuxième couleur la plus éminente du fond d'écran.getTertiaryColor()
renvoie la troisième couleur la plus éminente du fond d'écran.
Pour avertir le système de tout changement de couleur significatif sur votre fond d'écran animé, procédez comme suit :
appeler notifyColorsChanged()
. Cette méthode déclenche un cycle de vie d'une onComputeColors()
événement au cours duquel vous avez la possibilité de proposer un nouveau WallpaperColors
.
Pour ajouter un écouteur pour les changements de couleur, vous pouvez appeler la méthode addOnColorsChangedListener()
. Vous pouvez
appeler également la méthode getWallpaperColors()
pour récupérer les couleurs primaires d'un fond d'écran.
Mises à jour des empreintes digitales
La classe FingerprintManager
comporte
introduit les codes d'erreur suivants:
-
FINGERPRINT_ERROR_LOCKOUT_PERMANENT
: l'utilisateur a essayé pour déverrouiller son appareil à l’aide du lecteur d’empreinte digitale. -
FINGERPRINT_ERROR_VENDOR
: empreinte propre au fournisseur erreur de lecteur.
Mises à jour concernant la cryptographie
Un certain nombre de modifications apportées à la cryptographie ont été apportées avec Android 8.1:
- De nouveaux algorithmes ont été implémentés dans Conscrypt. Conscrypt
est de préférence utilisée pour la mise en œuvre
la mise en œuvre. Les nouveaux algorithmes incluent:
<ph type="x-smartling-placeholder">
- </ph>
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)
non fonctionne plus longtemps pour les algorithmes qui utilisent GCM. Utilisez plutôtgetParameterSpec(GCMParameterSpec.class)
- De nombreuses classes Conscrypt internes associées à TLS ont été refactorisées. Depuis
développeurs y accèdent parfois de manière réfléchie, les shims ont été laissés en place pour
prend en charge une utilisation antérieure, mais certains détails ont changé. Par exemple, les sockets
qui étaient auparavant de type
OpenSSLSocketImpl
, mais désormais de typeConscryptFileDescriptorSocket
ouConscryptEngineSocket
, qui étendentOpenSSLSocketImpl
- Méthodes
SSLSession
utilisées pour générerIllegalArgumentException
lorsqu'une référence nulle est transmise, envoyezNullPointerException
. - Le
KeyFactory
RSA ne permet plus de générer de clés à partir de tableaux d'octets plus grands que la clé encodée. Appels versgeneratePrivate()
etgeneratePublic()
qui fournissentKeySpec
, où la structure de clé ne remplit pas l'intégralité du tampon génère uneInvalidKeySpecException
. - Lorsqu'une lecture de socket est interrompue par la fermeture du socket, Conscrypt utilise
pour renvoyer -1 pour la lecture. La lecture génère maintenant
SocketException
- L’ensemble des certificats CA racine a été modifié, principalement en supprimant un le nombre de certificats obsolètes, mais aussi en supprimant les certificats racine WoSign et StartCom. Pour plus d'informations sur cette décision, consultez le Article de blog sur la sécurité, Fin Suppression de la confiance envers les certificats WoSign et StartCom.