Funkcje i interfejsy API Androida 8.1

Android 8.1 (poziom API 27) wprowadza różne nowe funkcje i możliwości dla użytkowników oraz deweloperów. W tym dokumencie opisujemy nowości dla deweloperów.

Android Oreo (wersja Go)

Android Go to nasza inicjatywa, która ma na celu optymalizację wygody korzystania z Androida miliardy ludzi na całym świecie korzystają z internetu. Począwszy od Androida 8.1, zmieniamy Androida w świetną platformę dla podstawowych urządzeń. Funkcje Androida Oreo Konfiguracja (wersja Go) obejmuje:

  • Optymalizacje pamięci. Zwiększyliśmy wykorzystanie pamięci na całej platformie, aby zapewnić że aplikacje mogą działać sprawnie na urządzeniach z maksymalnie 1 GB pamięci RAM.
  • Elastyczne opcje kierowania. Nowość funkcja sprzętowa , które pozwalają kierować aplikacje na normalne lub mało pamięci RAM Google Play.
  • Google Play. Wszystkie aplikacje będą dostępne na urządzeniach z Androidem Oreo. (wersja Go), Google Play będzie wyświetlać widoczność aplikacji zoptymalizowanych przez deweloperów. i dostarczają miliardom ludzi doskonałych wrażeń wytycznych.

Zaktualizowaliśmy budynek dla miliardów użytkowników z dodatkowymi wskazówkami, zoptymalizować aplikację pod kątem urządzeń działających na urządzeniach Android Oreo (wersja Go). W przypadku większości programistów optymalizacja istniejącego pliku APK lub korzystanie w Google Play funkcję wielu plików APK, by kierować wersję APK na urządzenia z małą ilością pamięci RAM. to najlepszy sposób na przygotowanie się na urządzenia z Androidem Oreo (wersja Go). Pamiętaj, że przygotowanie aplikacja lżejsze i wydajniejsze, są korzystne dla wszystkich odbiorców, niezależnie od urządzenia.

Neural Networks API

Interfejs Neural Networks API zapewnia szybsze obliczenia i wnioskowanie w przypadku maszyn na urządzeniu platformy edukacyjne, takie jak TensorFlow Lite – wieloplatformowa biblioteka ML Google do aplikacji mobilnych: Caffe2 i inne. Odwiedź TensorFlow Lite oprogramowanie open source w repozytorium z pobranymi plikami i dokumentami. TensorFlow Lite współpracuje z interfejsem Neural Networks API, aby uruchamiać modele takie jak MobileNets, Inception v3, i Inteligentna odpowiedź na urządzeniu mobilnym.

Aktualizacje platformy autouzupełniania

Android 8.1 (poziom interfejsu API 27) oferuje kilka ulepszeń autouzupełniania Struktura, którą możesz zastosować w swoich aplikacjach.

BaseAdapter klasa zawiera teraz setAutofillOptions() , która umożliwia podanie ciągu znaków jako reprezentacji wartości w funkcji przejściówkę. Jest to przydatne w przypadku elementu spinner które dynamicznie generują wartości w swoich adapterach. Przykład: możesz użyć metody setAutofillOptions(), aby podać ciąg znaków reprezentująca listę lat, którą użytkownicy mogą wybrać w ramach datę ważności karty kredytowej. Usługi autouzupełniania mogą używać reprezentacji ciągu znaków do prawidłowego wypełniania widoków, które wymagają tych danych.

Dodatkowo AutofillManager klasa zawiera metodę notifyViewVisibilityChanged(View, int, boolean). który można wywołać, aby powiadomić organizację o zmianach w widoczności w wirtualnej strukturze. Przeciążenie tej metody wymaga też za pomocą wirtualnych struktur. Jednak obiekty niewirtualne zwykle nie wymagają bezpośrednio powiadomić platformę, ponieważ metoda jest już wywołana przez View zajęcia.

Android 8.1 daje Usługom autouzupełniania większe możliwości dostosowywania interfejsu zapisywania afordancja przez dodanie obsługi funkcji CustomDescription and Validator w ciągu SaveInfo.

Niestandardowe opisy są przydatne, gdy usługa autouzupełniania może wyjaśnić, czym jest zapisywanie danych; Na przykład jeśli ekran zawiera kartę kredytową, wyświetlać logo banku karty kredytowej, ostatnie 4 cyfry numeru karty; i jego numerem ważności. Więcej informacji: CustomDescription zajęcia.

Validator są używane, aby uniknąć wyświetlania UI zapisywania autouzupełniania, gdy Walidator nie jest spełniony. Aby dowiedzieć się więcej, przeczytaj klasa walidatora wraz z jej podklasami, LuhnChecksumValidator i RegexValidator.

Powiadomienia

W Androidzie 8.1 wprowadziliśmy te zmiany w powiadomieniach:

  • Teraz aplikacja może odtwarzać alert powiadomienia tylko raz na sekundę. Dźwięki alertu, które przekraczają tę wartość które nie są umieszczane w kolejce i tracone. Ta zmiana nie ma wpływu na inne aspekty powiadomień zachowanie i powiadomienia będą nadal publikowane zgodnie z oczekiwaniami.
  • NotificationListenerService i Urządzenia ConditionProviderService nie są obsługiwane w przypadku małej ilości pamięci RAM Urządzenia z Androidem, które zwracają wartość true, gdy: Funkcja ActivityManager.isLowRamDevice() jest wywoływana.

Aktualizacja EditText

Począwszy od poziomu interfejsu API 27, metoda EditText.getText() zwraca Editable; poprzednio zwraca wartość CharSequence. Ta zmiana jest zgodna wstecznie, zgodnie z implementacją Editable CharSequence

Interfejs Editable zawiera przydatne informacje dodatkowe funkcji. Na przykład, ponieważ Editable również implementuje interfejs Spannable, możesz zastosować znaczniki treści w instancji EditText.

Działania zautomatyzowanego bezpiecznego przeglądania

Za pomocą funkcji WebView interfejsu API Bezpiecznego przeglądania, aplikacja może wykrywaj, kiedy instancja WebView próbuje nawigować prowadzi do adresu URL, który został sklasyfikowany przez Google jako znane zagrożenie. Domyślnie atrybut WebView wyświetla reklamę pełnoekranową, która ostrzega użytkowników o znanym zagrożeniu. Użytkownicy mogą na nim załadować URL mimo to lub wrócić do jest bezpieczna.

W Androidzie 8.1 możesz automatycznie określić sposób reaguje na znane zagrożenie:

  • Możesz określić, czy aplikacja będzie zgłaszać znane zagrożenia bezpieczeństwa Przeglądanie.
  • Aplikacja może automatycznie wykonywać określone działanie, np. powrót do zabezpieczeń – za każdym razem, gdy natrafi na adres URL, który Bezpieczne przeglądanie jest klasyfikowane jako znane zagrożenie.

Uwaga: aby uzyskać optymalną ochronę przed znanymi zagrożeniami, poczekaj dopóki nie zainicjujesz funkcji Bezpieczne przeglądanie, a potem wywołasz Metoda loadUrl() obiektu WebView.

Poniższe fragmenty kodu pokazują, jak możesz przekazać instrukcje instancji aplikacji WebView, aby zawsze wrócić do zabezpieczeń po napotkaniu znane zagrożenie:

AndroidManifest.xml

<manifest>
    <application>
        ...
        <meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
                   android:value="true" />
    </application>
</manifest>

MojaWebActivity.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();
    }
}

Wyodrębnianie miniatur filmu

Klasa MediaMetadataRetriever ma nową metodę (getScaledFrameAtTime()), która znajduje klatka w pobliżu określonej pozycji w czasie i zwraca bitmapę o tym samym aspekcie jak w ramce źródłowej, lecz przeskalowane w celu dopasowania do prostokąta o danej szerokości wysokość. Przydaje się to do generowania miniatur na podstawie filmów.

Zalecamy używanie tej metody zamiast metody getFrameAtTime(), ponieważ może ona marnować pamięć ponieważ zwraca bitmapę o tej samej rozdzielczości co film źródłowy. Dla: Na przykład klatka z filmu 4K to mapa bitowa o rozmiarze 16 MB, znacznie większa od obrazu. obrazu miniatury.

Interfejs API pamięci współdzielonej

Android 8.1 (poziom API 27) wprowadza SharedMemory API. Te zajęcia pozwalają tworzyć i mapować anonimowe konta oraz nimi zarządzać SharedMemory instancji. Ty ustawiasz ochronę pamięci w SharedMemory obiektu do odczytu lub zapisu, a SharedMemory jest obiektem Parcelable, można go łatwo przekazać do innego procesu za pomocą AIDL.

SharedMemory Interfejs API współdziała z Obiekt ASharedMemory w NDK. ASharedMemory przyznaje dostęp do deskryptora pliku, który można zmapować na odczyt i zapis. To świetnie sposób na udostępnianie dużych ilości danych między aplikacjami lub między wieloma procesami w jednej aplikacji.

Interfejs TapColors API

Android 8.1 (poziom interfejsu API 27) umożliwia dostosowywanie kolorów animowanej tapety do interfejsu systemowego. Aby to zrobić, utwórz WallpaperColors z bitmapy, obiektu rysowalnego lub za pomocą trzech ręcznie wybranych kolorów. Możesz także pobrać informacje o tym kolorze.

Aby utworzyć: WallpaperColors wykonaj jedną z tych czynności:

  • Aby utworzyć: WallpaperColors używając 3 kolorów, utwórz instancję WallpaperColors. klasy, przekazując kolor podstawowy, dodatkowy i trzeciorzędny. Podstawowy color nie może mieć wartości null.
  • Aby utworzyć: WallpaperColors z bitmapy, wywołaj fromBitmap() przez przekazanie źródła mapy bitowej jako parametru.
  • Aby utworzyć: WallpaperColors obiekt rysowalny należy wywołać funkcję fromDrawable() przez przekazanie źródła możliwego do rysowania jako parametru.

Aby pobrać szczegóły koloru podstawowego, dodatkowego lub trzeciorzędnego z funkcji tapety, wywołaj te metody:

Aby powiadomić system o wszelkich istotnych zmianach kolorów animowanej tapety, Zadzwoń na notifyColorsChanged() . Ta metoda aktywuje cykl życia onComputeColors() wydarzenie, w ramach którego możesz podać nowe WallpaperColors obiektu.

Aby dodać odbiornik zmian kolorów, możesz wywołać metodę addOnColorsChangedListener(). Dostępne opcje wywołaj też metodę getWallpaperColors() aby pobrać podstawowe kolory tapety.

Aktualizacje odcisku palca

Zajęcia FingerprintManager mają wprowadzono następujące kody błędów:

  • FINGERPRINT_ERROR_LOCKOUT_PERMANENT – użytkownik próbował zbyt wiele razy, aby odblokować urządzenie za pomocą czytnika linii papilarnych.
  • FINGERPRINT_ERROR_VENDOR – odcisk cyfrowy specyficzny dla dostawcy wystąpił błąd czytnika.

Nowości związane z kryptografią

W Androidzie 8.1 wprowadzono szereg zmian związanych z szyfrowaniem:

  • W aplikacji Conscrypt zostały zaimplementowane nowe algorytmy. Conscrypt preferowana jest implementacja, a nie istniejący Bouncy Castle. implementacji. Nowe algorytmy:
    • 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) nie działa w algorytmach korzystających z GCM. Zamiast tego użyj getParameterSpec(GCMParameterSpec.class)
  • Wiele wewnętrznych klas Conscrypt powiązanych z TLS zostało refaktoryzowanych. Od czasami dostęp do tych podkładek jest luźna, ale zostały one obsługują wcześniejsze przypadki użycia, ale niektóre szczegóły się zmieniły. Na przykład gniazda były typu OpenSSLSocketImpl, ale teraz są tego typu ConscryptFileDescriptorSocket lub ConscryptEngineSocket, które obejmują OpenSSLSocketImpl
  • SSLSession metod używanych do rzucania IllegalArgumentException po przekazaniu pustego odwołania rzut NullPointerException.
  • RSA KeyFactory nie umożliwia już generowania kluczy z tablic bajtów, które są większe niż zakodowany klucz. Połączenia z generatePrivate() i generatePublic(), które zapewniają KeySpec, gdzie struktura klucza nie wypełnia dla całego bufora otrzymasz InvalidKeySpecException.
  • Gdy odczyt gniazda zostanie przerwany przez zamknięcie gniazda, użyto protokołu Conscrypt. w celu zwrócenia -1 na podstawie odczytu. Odczyt wskazuje teraz SocketException
  • Zestaw certyfikatów głównych CA został zmieniony – głównie usunięto dużą liczbę nieaktualnych certyfikatów, a także usunąć certyfikaty główne dla WoSign i StartCom. Więcej informacji na temat tej decyzji znajdziesz na stronie post na blogu o bezpieczeństwie, Koniec usunięcie zaufania do certyfikatów WoSign i StartCom.