Android 9 (poziom interfejsu API 28) wprowadza nowe funkcje i możliwości dla użytkowników i programistów. Ten dokument zawiera informacje o nowościach dla deweloperów.
Więcej informacji o nowych interfejsach API znajdziesz w raportów o różnicach między interfejsami API lub Dokumentacja API na Androida. Zapoznaj się też ze zmianami w zachowaniu Androida 9, aby dowiedzieć się, w jakich obszarach zmiany w systemie mogą wpłynąć na Twoje aplikacje.
Pozycjonowanie we wnętrzach z Wi-Fi RTT

Android 9 obsługuje platformę Wi-Fi zgodnie ze standardem IEEE 802.11-2016 protokołu RTT, znanego też jako Wi-Fi Round-Trip-Time (Czas błądzenia Wi-Fi), który zapewnia pozycjonowania wnętrz w aplikacjach.
Na urządzeniach z Androidem 9 z obsługą sprzętową aplikacje mogą używać
za pomocą interfejsów RTT API do pomiaru
odległość do pobliskich punktów dostępu Wi-Fi obsługujących RTT. Na urządzeniu muszą być włączone usługi lokalizacyjne i skanowanie sieci Wi-Fi (w sekcji Ustawienia > Lokalizacja), a aplikacja musi mieć uprawnienie ACCESS_FINE_LOCATION
. Aby korzystać z RTT, urządzenie nie musi łączyć się z punktami dostępu.
Ze względu na ochronę prywatności tylko telefon może określać odległość do punktu dostępu. Punkty dostępu nie mają dostępu do tych informacji.
Jeśli urządzenie mierzy odległość co najmniej 3 punktów dostępu, możesz użyć algorytm powielania w celu oszacowania pozycji urządzenia, która najlepiej do niej pasuje. pomiarów. Wynik jest zwykle dokładny do 1–2 metrów.
Dzięki tej dokładności możesz tworzyć nowe funkcje, takie jak nawigacja wewnątrz budynku oraz szczegółowe usługi oparte na lokalizacji, np. jednoznaczne sterowanie głosem (np. „Włącz to światło”) i informacje oparte na lokalizacji (np. „Czy są jakieś oferty specjalne na ten produkt?”).
Zobacz interfejs Wi-Fi RTT API używany w Android WifiRttScan w wersji demonstracyjnej.
Więcej informacji: Lokalizacja Wi-Fi: zakres RTT.
Obsługa wycięcia w ekranie

Testowanie wycięcia ekranu za pomocą emulatora
Android 9 obsługuje najnowsze ekrany o szerokim zakresie
z wycięciami w ekranach pod kątem kamer i głośników.
DisplayCutout
pozwala ustalić położenie i kształt niedziałających obszarów,
nie powinny się wyświetlać. Aby określić, czy i gdzie znajdują się te wycięte obszary, użyj metody getDisplayCutout()
.
Nowy atrybut układu okna,
layoutInDisplayCutoutMode
,
pozwala aplikacji rozmieszczać treści wokół wycięć na urządzeniu. Możesz ustawić
ten atrybut na jedną z tych wartości:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
Możesz symulować wycięcie w ekranie na dowolnym urządzeniu lub w emulatorze z Androidem 9. w następujący sposób:
- Włącz opcje programisty.
- Na ekranie Opcje programisty przewiń w dół do sekcji Rysunek. i wybierz Symuluj wyświetlacz z wycięciem.
- Wybierz rozmiar wycięcia.
Powiadomienia
Android 9 wprowadza kilka ulepszeń powiadomień, które są dostępne dla deweloperów kierujących aplikacje na interfejs API na poziomie 28 lub nowszym.

MessagingStyle z załączonym zdjęciem.

MessagingStyle z odpowiedziami i rozmowami.
Przykładowy kod, który korzysta z powiadomień, w tym funkcji Androida 9, znajdziesz tutaj Osoby Fragment.
Ulepszone przesyłanie wiadomości
Począwszy od Androida 7.0 (interfejs API na poziomie 24), możesz dodać działanie, aby odpowiedzieć na wiadomości lub wpisać inny tekst bezpośrednio z powiadomienia. Android 9 ulepsza tę funkcję, wprowadzając następujące ulepszenia:
Uproszczone wsparcie dla uczestników rozmowy: klasa
Person
służy do identyfikowania osób biorących udział w rozmowie, w tym ich awatarów i identyfikatorów URI. Wiele innych interfejsów API, np.addMessage()
, korzysta teraz z klasyPerson
zamiastCharSequence
. Zajęcia:Person
obsługuje też wzorzec projektowy konstruktora.Obsługa obrazów: Android 9 wyświetla obrazy w powiadomieniach o wiadomościach na telefonach. Za pomocą
setData()
w wiadomości, aby wyświetlić obraz. Fragment kodu poniżej pokazuje, aby utworzyć obiektPerson
i wiadomość zawierającą obraz.
Kotlin
// Create new Person. val sender = Person() .setName(name) .setUri(uri) .setIcon(null) .build() // Create image message. val message = Message("Picture", time, sender) .setData("image/", imageUri) val style = Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message)
Java
// Create new Person. Person sender = new Person() .setName(name) .setUri(uri) .setIcon(null) .build(); // Create image message. Message message = new Message("Picture", time, sender) .setData("image/", imageUri); Notification.MessagingStyle style = new Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message);
Zapisuj odpowiedzi jako wersje robocze: aplikacja może pobierać
EXTRA_REMOTE_INPUT_DRAFT
wysyłane przez system, gdy użytkownik przypadkowo zamknie powiadomienie o wiadomości. Możesz użyć tej funkcji, aby wstępnie wypełnić pola tekstowe w aplikacji, dzięki czemu użytkownicy będą mogli dokończyć swoją odpowiedź.Określanie, czy rozmowa jest rozmową grupową: za pomocą
setGroupConversation()
aby celowo określić wątek jako rozmowę grupową lub niegrupową.Ustaw działanie semantyczne dla intencji: metoda
setSemanticAction()
pozwala nadać działanie semantyczne, np. „oznacz jako przeczytane”, „usuń”, „odpowiedz” itp.Inteligentna odpowiedź: Android 9 obsługuje te same sugerowane odpowiedzi, które są dostępne w aplikacji do obsługi wiadomości. Użyj opcji
RemoteInput.setChoices()
, aby wyświetlić użytkownikowi zestaw standardowych odpowiedzi.
Ustawienia kanału, komunikaty i tryb Nie przeszkadzać
W Androidzie 8.0 wprowadzono kanały powiadomień, które umożliwiają tworzenie kanałów dostępnych dla użytkownika dla każdego typu powiadomienia, które chcesz wyświetlać. Android 9 upraszcza ustawienia kanału powiadomień dzięki tym zmianom:
Blokowanie grup kanałów: użytkownicy mogą teraz blokować całe grupy kanałów w ustawieniach powiadomień aplikacji. Możesz użyć metody
isBlocked()
, aby określić, kiedy grupa jest zablokowana i w efekcie nie wysyłaj żadnych powiadomień dla kanałów w tej grupie.Dodatkowo aplikacja może wysyłać zapytania o bieżące ustawienia grupy kanałów, korzystając z nowej metody
getNotificationChannelGroup()
.Nowe typy intencji transmisji: system Android wysyła intencje transmisji gdy zmieni się stan blokowania kanałów powiadomień i grup kanałów. Aplikacja będąca właścicielem zablokowanego kanału lub grupy może nasłuchiwać tych intencji i odpowiednio zareagować. Więcej informacji o tych działaniach i dodatkowych działaniach znajdziesz na zaktualizowanej liście stałych w dokumentacji
NotificationManager
. Informacje o reagowaniu na intencje dotyczące transmisji znajdziesz w artykule Transmisje.NotificationManager.Policy
ma 3 nowe kategorie priorytetów Nie przeszkadzać:PRIORITY_CATEGORY_ALARMS
nadaje priorytet alarmom.PRIORITY_CATEGORY_MEDIA
nadaje priorytet dźwiękom ze źródeł multimediów, takich jak multimedia i nawigacja głosowa.PRIORITY_CATEGORY_SYSTEM
nadaje priorytet dźwiękom systemowym.
NotificationManager.Policy
zawiera też 7 nowych stałych wartości trybu Nie przeszkadzać, których możesz użyć do wyciszenia wizualnych przerw:SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
zapobiega uruchamianiu przez powiadomienie aktywności pełnoekranowej.SUPPRESSED_EFFECT_LIGHTS
blokuje diody powiadomień.SUPPRESSED_EFFECT_PEEK
zapobiega temu, aby powiadomienia były widoczne przez chwilę („podgląd”).SUPPRESSED_EFFECT_STATUS_BAR
zapobiega wyświetlaniu powiadomień na pasku stanu na urządzeniach, które obsługują paski stanu.SUPPRESSED_EFFECT_BADGE
blokuje odznaki na urządzeniach, które obsługują odznaki. Więcej informacji znajdziesz w artykule Modyfikowanie plakietki powiadomienia.SUPPRESSED_EFFECT_AMBIENT
blokuje powiadomienia na urządzeniach obsługujących wygaszacze z powiadomieniami.SUPPRESSED_EFFECT_NOTIFICATION_LIST
zapobiega wyświetlaniu powiadomień w widoku listy na urządzeniach obsługujących ten widok (np. w obszarze powiadomień lub na ekranie blokady).
Obsługa wielu kamer i aktualizacje dotyczące ich działania
Na urządzeniach z Androidem 9 możesz uzyskać dostęp do strumieni z co najmniej 2 fizycznych aparatów. Na urządzeniach z dwoma aparatami przednimi lub tylnymi możesz tworzyć innowacyjne funkcje, których nie można uzyskać za pomocą pojedynczego aparatu, takie jak płynne przybliżanie, efekt bokeh i stereoskopia. Interfejs API umożliwia też wywoływanie transmisji z kamery, która automatycznie przełącza się między co najmniej 2 kamerami.
Inne ulepszenia w kamerze to dodatkowe parametry sesji, które pomagają zmniejszyć opóźnienia podczas początkowego przechwytywania, oraz udostępnianie powierzchni, które pozwala klientom kamery obsługiwać różne przypadki użycia bez konieczności zatrzymywania i rozpoczynania strumieniowego przesyłania kamery. Dodaliśmy też interfejsy API do obsługi flasha na wyświetlaczu oraz dostęp do oznacznień czasu OIS na potrzeby stabilizacji obrazu i efektów specjalnych na poziomie aplikacji.
W Androidzie 9 wielo aparatów
Interfejs API
obsługuje kamery monochromatyczne na urządzeniach
FULL
lub
LIMITED
.
Dane wyjściowe monochromatyczne są uzyskiwane za pomocą formatu YUV_420_888
z wartością Y jako szarości, U (Cb) jako 128 i V (Cr) jako 128.
Android 9 umożliwia też obsługę zewnętrznych aparatów USB/UVC na obsługiwanych urządzeniach.
ImageDecoder do elementów rysowalnych i map bitowych
Android 9 wprowadza klasę ImageDecoder
, która zapewnia nowoczesne podejście do dekodowania obrazów. Użyj tej klasy zamiast interfejsów API BitmapFactory
i BitmapFactory.Options
.
ImageDecoder
umożliwia utworzenie Drawable
lub Bitmap
z bufora bajtów, pliku lub identyfikatora URI. Aby zdekodować obraz, najpierw wywołaj
createSource()
ze źródłem zakodowanego obrazu. Następnie zadzwoń
decodeDrawable()
lub decodeBitmap()
przez zaliczenie ImageDecoder.Source
aby utworzyć obiekt Drawable
lub Bitmap
. Aby zmienić domyślne ustawienia, prześlij wartość OnHeaderDecodedListener
do decodeDrawable()
lub decodeBitmap()
. ImageDecoder
wywołuje onHeaderDecoded()
z domyślną szerokością i wysokością obrazu, gdy są znane.
Jeśli zakodowany obraz jest animowanym GIF-em lub plikiem WebP, funkcja decodeDrawable()
zwraca obiekt Drawable
będący instancją klasy AnimatedImageDrawable
.
Właściwości obrazu można ustawić na różne sposoby:
- Aby przeskalować zdekodowany obraz do określonego rozmiaru, przekaż wymiary docelowe do
setTargetSize()
Możesz też skalować obrazy, używając rozmiaru próbki. Przekaż wielkość próbki bezpośrednio do:setTargetSampleSize()
- Aby przyciąć obraz w zakresie powiększonego obrazu, wywołaj funkcję
setCrop()
. - Aby utworzyć zmienną bitową, przekaż obiekt
true
dosetMutableRequired()
ImageDecoder
umożliwia też dodawanie do obrazu niestandardowych i skomplikowanych efektów
takich jak zaokrąglone rogi,
w postaci kół. Używaj
setPostProcessor()
z instancją
PostProcessor
do wykonywania dowolnych poleceń rysowania.
Animacja
Android 9 wprowadza klasę AnimatedImageDrawable
do rysowania i wyświetlania animowanych obrazów GIF i WebP.
AnimatedImageDrawable
działa podobnie do AnimatedVectorDrawable
, ponieważ wątki renderowania sterują animacjami AnimatedImageDrawable
.
Do dekodowania wątku renderowania służy też wątek roboczy, dzięki czemu dekodowanie nie zakłóca innych operacji na wątku renderowania. Ta implementacja umożliwia
wyświetlanie w aplikacji animowanego obrazu bez zarządzania jej aktualizacjami lub
ingerencję w inne zdarzenia w wątku interfejsu aplikacji.
AnimatedImageDrawable
można zdekodować za pomocą instancji
ImageDecoder
Poniżej
fragment kodu pokazuje, jak za pomocą parametru ImageDecoder
zdekodować
AnimatedImageDrawable
:
Kotlin
@Throws(IOException::class) private fun decodeImage() { val decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(resources, R.drawable.my_drawable)) // Prior to start(), the first frame is displayed. (decodedAnimation as? AnimatedImageDrawable)?.start() }
Java
private void decodeImage() throws IOException { Drawable decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(getResources(), R.drawable.my_drawable)); if (decodedAnimation instanceof AnimatedImageDrawable) { // Prior to start(), the first frame is displayed. ((AnimatedImageDrawable) decodedAnimation).start(); } }
ImageDecoder
ma kilka metod, które umożliwiają dalszą modyfikację obrazu.
Na przykład możesz użyć atrybutu
setPostProcessor()
zmienić wygląd zdjęcia, na przykład zastosować okrągłą maskę lub
lub zaokrąglonych rogów.
Wideo HDR VP9, kompresja obrazów HEIF i interfejsy Media API
Android 9 ma wbudowaną obsługę formatu High Dynamic Range (HDR) VP9 Profile 2, Dzięki temu możesz dostarczać użytkownikom filmy z obsługą HDR, z YouTube, Filmów Play, oraz z innych źródeł na urządzeniach obsługujących HDR.
Android 9 obsługuje też kodowanie obrazów za pomocą formatu pliku obrazu o wysokiej efektywności (HEIF lub HEIC), który zapewnia lepszą kompresję oraz zmniejsza zużycie miejsca na dane i danych sieciowych. Przykłady nieruchomych obrazów HEIF są obsługiwane w
MediaMuxer
i MediaExtractor
zajęcia. Dzięki obsłudze platformy na urządzeniach z Androidem 9 możesz łatwo wysyłać
używać obrazów HEIF z serwera backendu. Gdy upewnisz się, że atrybuty
aplikacja jest zgodna z tym formatem danych do udostępniania i wyświetlania, wypróbuj HEIF
jako format zapisu
obrazów w aplikacji. możesz przekonwertować plik JPEG na heic;
przy użyciu ImageDecoder
lub
BitmapFactory
(która uzyskuje
bitmapy z pliku JPEG). Następnie możesz użyć
HeifWriter
, aby zapisać HEIF
nieruchome obrazy z buforów bajtowych YUV oraz przypadki
Surface
lub
Bitmap
.
Dane o mediach są też dostępne w klasach AudioTrack
, AudioRecord
i MediaDrm
.
Android 9 wprowadza metody
Klasa MediaDRM
do pobierania danych, HDCP
poziom bezpieczeństwa, liczbę sesji i większą kontrolę nad
poziomymi zabezpieczeń i zabezpieczeniami. Szczegółowe informacje znajdziesz w raporcie różnic między wersjami interfejsu API.
W Androidzie 9 interfejs AAudio obsługuje kilka dodatkowych atrybutów AAudioStream, w tym użycie, typ treści i wstępny zestaw ustawień wejścia. Za pomocą tych atrybutów możesz tworzyć strumienie,
do obsługi VoIP lub kamery. Możesz też ustawić identyfikator sesji, aby powiązać strumień AAudio z submiksem, który może zawierać efekty. Użyj
AudioEffect
API do sterowania
efekty.
Android 9 wprowadza interfejs API AudioEffect
do przetwarzania dynamiki.
Dzięki tym lekcjom możesz tworzyć efekty dźwiękowe na kanale, w tym:
korekcję, kompresję wielozakresową i ogranicznik – na wielu etapach. Liczba pasm i aktywnych etapów jest konfigurowalna, a większość parametrów można kontrolować w czasie rzeczywistym.
Poufność kosztów danych w harmonogramie zadań
Od Androida 9 JobScheduler
może wykorzystać sygnały stanu sieci dostarczane przez operatorów do poprawy obsługi
zadań związanych z siecią.
Zadania mogą deklarować szacowany rozmiar danych, pobieranie wstępnie sygnału i szczegółowe wymagania dotyczące sieci. JobScheduler
zarządza pracą zgodnie z
stan sieci. Jeśli na przykład sieć sygnalizuje, że jest przeciążona,
JobScheduler
może odłożyć na później duże żądania sieciowe. W sieci bez limitu danych JobScheduler
może uruchamiać zadania wstępnego pobierania, aby poprawić wrażenia użytkownika, np. poprzez wstępne pobieranie nagłówków.
Podczas dodawania zadań pamiętaj, aby w odpowiednich przypadkach użyć tagów setEstimatedNetworkBytes()
, setPrefetch()
i setRequiredNetwork()
, aby ułatwić JobScheduler
prawidłowe wykonywanie pracy. Gdy zadanie jest wykonywane,
pamiętaj, aby użyć obiektu Network
zwrócone przez
JobParameters.getNetwork()
W przeciwnym razie domyślnie skorzystasz z domyślnej sieci urządzenia,
może nie spełniać Twoich wymagań, co spowoduje niezamierzone użycie danych.
Neural Networks API 1.1
W Androidzie 8.1 (poziom interfejsu API 27) wprowadzono interfejs API sieci neuronowych, aby przyspieszyć działanie systemów uczących się na urządzeniach z Androidem. Android 9 rozszerza i ulepsza interfejs API, dodając obsługę 9 nowych operacji:
- Działania matematyczne związane z elementami:
- Operacje na tablicach:
Znany problem: Po zdaniu testu
ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
tensorów do potęgi
ANEURALNETWORKS_PAD
jest dostępna w Androidzie 9 i nowszych,
dane wyjściowe z NNAPI mogą nie być zgodne z danymi wyjściowymi maszyny wyższego poziomu
struktury nauczania, takie jak
TensorFlow Lite – Zamiast tego prześlij tylkoANEURALNETWORKS_TENSOR_FLOAT32
do czasu rozwiązania problemu.
Interfejs API wprowadza też nową funkcję ANeuralNetworksModel_relaxComputationFloat32toFloat16()
, która pozwala określić, czy obliczenia ANEURALNETWORKS_TENSOR_FLOAT32
mają być wykonywane z zakresem i dokładnością tak niską jak w przypadku formatu IEEE 754 16-bitowego zmiennoprzecinkowego.
Platforma autouzupełniania
Android 9 wprowadza wiele ulepszeń, które usługi autouzupełniania mogą zaimplementować, aby jeszcze bardziej ulepszyć wrażenia użytkowników podczas wypełniania formularzy. Aby dowiedzieć się więcej o korzystaniu z funkcji autouzupełniania w aplikacji, przeczytaj Przewodnik po platformie autouzupełniania.
Ulepszenia zabezpieczeń
Android 9 wprowadza szereg funkcji zabezpieczeń, które podsumowują te sekcje:
Zabezpieczone potwierdzenie w Androidzie
Obsługiwane urządzenia z Androidem w wersji 9 lub nowszej umożliwiają korzystanie z potwierdzenia chronionego przez Androida. Podczas korzystania z tego procesu aplikacja wyświetla użytkownikowi prośbę o zatwierdzenie krótkiej informacji. To oświadczenie umożliwia aplikacji potwierdzenie, że użytkownik chce ukończyć poufne transakcje, takie jak dokonywanie płatności.
Jeśli użytkownik zaakceptuje oświadczenie, Keystore Androida otrzyma i zapisze podpis kryptograficzny chroniony kodem uwierzytelniania wiadomości za pomocą wartości hash (HMAC). Gdy Android Keystore potwierdzi ważność wiadomości, aplikacja może użyć klucza wygenerowanego z trustedConfirmationRequired
w środowisku zaufanego wykonywania (TEE), aby podpisać wiadomość zaakceptowaną przez użytkownika.
wskazuje z dużą pewnością, że użytkownik widział
oświadczenia i użytkownik się na nie zaakceptował.
Uwaga: Bezpieczne potwierdzenie na Androidzie nie udostępnia bezpiecznego kanału informacyjnego użytkownika. Aplikacja nie może zapewniać żadnych gwarancji poufności wykraczających poza te, które oferuje platforma Android. W szczególności nie używaj tego procesu do wyświetlania informacji poufnych, których nie wyświetlasz zwykle na urządzeniu użytkownika.
Wskazówki dotyczące dodawania obsługi potwierdzenia w Androidzie znajdziesz tutaj: Ochrona Androida Potwierdzenie Google.
Okno uwierzytelniania biometrycznego
W Androidzie 9 system wyświetla w imieniu aplikacji okno uwierzytelniania biometrycznego. Dzięki tej funkcji okno ma ujednolicony wygląd i umiejscowienie, co daje użytkownikom większą pewność, że uwierzytelniają się za pomocą zaufanej funkcji sprawdzania danych biometrycznych.
Jeśli Twoja aplikacja używaFingerprintManager
do wyświetlania użytkownikom okna uwierzytelniania odciskiem palca, zamiast tego użyjBiometricPrompt
. Do wyświetlania uwierzytelniania BiometricPrompt
używa systemu
. Zmienia się również sposób działania, aby dostosować się do typu biometrii
wybrane przez użytkownika.
Moduł zabezpieczeń sprzętowych
Obsługiwane urządzenia z Androidem 9 lub nowszym mogą mają StrongBox Keymaster, czyli implementację interfejsu HAL Keymaster, znajduje się w sprzętowym module zabezpieczeń. Moduł obejmuje:
- własny procesor;
- Bezpieczne miejsce na dane.
- Prawdziwy generator liczb losowych.
- dodatkowe mechanizmy zapobiegające modyfikowaniu pakietów i nieautoryzowanemu instalowaniu aplikacji;
Podczas sprawdzania kluczy przechowywanych w StrongBox Keymaster systemie system potwierdza jego integralność w Trusted Execution Environment (TEE).
Więcej informacji o używaniu Strongbox Keymaster znajdziesz w artykule Sprzętowy moduł zabezpieczeń.
Bezpieczne importowanie klucza do magazynu kluczy
Android 9 zapewnia dodatkową ochronę kluczy odszyfrowywania dzięki możliwości bezpiecznego importowania zaszyfrowanych kluczy do Keystore za pomocą formatu klucza ASN.1. Następnie Keymaster odszyfrowuje klucze w Keystore, dzięki czemu ich zawartość nigdy nie pojawia się w postaci zwykłego tekstu w pamięci hosta urządzenia.
Dowiedz się więcej o importowaniu zaszyfrowanych kluczy bezpieczeństwa.
Schemat podpisu pliku APK z rotacją klucza
Android 9 obsługuje schemat podpisu plików APK w wersji 3. W ramach tego schematu można dołączyć rekord dowodu rotacji w bloku podpisywania w przypadku każdego certyfikatu podpisywania. Ta funkcja umożliwia podpisywanie aplikacji nowym podpisywaniem certyfikat, łącząc poprzednie certyfikaty podpisywania pliku APK z certyfikatem który został podpisany.
Dowiedz się więcej o tym, jak wykonywać rotację kluczy za pomocą apksigner
.
Opcja zezwalania na odszyfrowywanie klucza tylko na odblokowanych urządzeniach
Android 9 wprowadza flagę unlockedDeviceRequired
. Ta opcja określa, czy Keystore wymaga odblokowania ekranu, zanim zezwoli na odszyfrowanie danych w transmisji lub zapisanych za pomocą określonego klucza. Te typy kluczy są odpowiednie do szyfrowania danych poufnych, które mają być przechowywane na dysku, takich jak dane medyczne lub dane firmowe. Flaga zapewnia użytkownikom większe bezpieczeństwo, ponieważ w przypadku zgubienia lub kradzieży telefonu dane nie mogą zostać odszyfrowane, gdy urządzenie jest zablokowane.
Aby klucz nie został odszyfrowany, gdy urządzenie jest zablokowane, włącz flagę
przekazując true
do funkcji setUnlockedDeviceRequired()
. Po wykonaniu tej czynności i zablokowaniu ekranu
próba odszyfrowania lub podpisania danych przy użyciu tego klucza zakończy się niepowodzeniem. Zablokowane urządzenie wymaga:
kod PIN, hasło, odcisk palca lub inny zaufany czynnik
dostęp.
Obsługa starszych wersji szyfrowania
Urządzenia z Androidem 9 dostarczane z systemem Keymaster 4 obsługują dane potrójne Encryption Algorithm, czyli Triple DES, Jeśli Twoja aplikacja współpracuje z systemami starszymi, które wymagają szyfrowania Triple DES, użyj tego typu szyfrowania podczas szyfrowania poufnych danych logowania.
Więcej informacji o zwiększaniu bezpieczeństwa aplikacji znajdziesz w artykule Bezpieczeństwo na Androidzie dla programistów.
Wycofanie WPS
Bezpieczna konfiguracja Wi-Fi (WPS) została wycofana ze względów bezpieczeństwa.
Kopie zapasowe Androida
Android 9 wprowadza nowe funkcje i opcje dla programistów związane z tworzeniem i przywracaniem kopii zapasowych. Szczegółowe informacje o tych zmianach znajdziesz w dalszej części tego artykułu. sekcji.
Kopie zapasowe szyfrowane po stronie klienta
Android 9 umożliwia szyfrowanie kopii zapasowych Androida z użyciem zabezpieczenia po stronie klienta. Ta funkcja jest włączona automatycznie, gdy: są spełnione warunki:
- Użytkownik włączył funkcję tworzenie kopii zapasowych na Androidzie 9 lub wyższą.
- Użytkownik ustawił blokadę ekranu na urządzeniu, która wymaga odblokowania za pomocą kodu PIN, wzoru lub hasła.
Gdy te zabezpieczenia są włączone, kod PIN, wzór lub hasło urządzenia jest jest wymagane do przywrócenia danych z kopii zapasowych utworzonych przez urządzenie użytkownika. Więcej informacji o technologii, na której opiera się ta funkcja, znajdziesz w dokumentacji Google Cloud Key Vault Service.
Określ warunki urządzenia wymagane do utworzenia kopii zapasowej
Jeśli dane aplikacji zawierają poufne informacje lub ustawienia, Android 9 pozwala zdefiniować urządzenie , w których przypadku gdy dane aplikacji są uwzględniane w kopii zapasowej użytkownika, np. gdy dane po stronie klienta włączone jest szyfrowanie lub jest przeprowadzany lokalny transfer między urządzeniami.
Więcej informacji o tworzeniu kopii zapasowych danych na urządzeniach z Androidem znajdziesz w artykule Omówienie tworzenia kopii zapasowych danych.
Ułatwienia dostępu
Android 9 wprowadza ulepszenia ułatwień dostępu które ułatwiają udostępnianie użytkownikom do aplikacji.
Semantyka nawigacji
Atrybuty dodane w Androidzie 9 ułatwiają określanie, usługi ułatwień dostępu, zwłaszcza czytniki ekranu, przechodzą z jednej części do innego ekranu. Te atrybuty mogą pomóc użytkownikom z wadą wzroku szybko poruszać się po tekście w interfejsie aplikacji i umożliwiać dokonanie wyboru.
Na przykład w aplikacji do zakupów czytnik ekranu może pomóc użytkownikom przejść bezpośrednio z jednej kategorii ofert do następnej bez konieczności odczytywania wszystkich elementów w danej kategorii przed przejściem do następnej.
Tytuły panelu ułatwień dostępu
W Androidzie 8.1 (poziom interfejsu API 27) i starszych usługa ułatwień dostępu nie zawsze może określić, kiedy została zaktualizowana konkretna część ekranu, np. gdy aktywność zastąpiła jeden fragment innym. Panele składają się z logicznie pogrupowanych, wizualnie powiązanych elementów interfejsu, które zwykle tworzą fragment.
W Androidzie 9 możesz określać tytuły paneli ułatwień dostępu, a także pojedynczo łatwe do zidentyfikowania tytuły. Jeśli panel ma tytuł dotyczący ułatwień dostępu, usługi ułatwień dostępu otrzymują bardziej szczegółowe informacje, gdy panel się zmienia. Ta funkcja umożliwia usługom dostarczanie użytkownikowi bardziej szczegółowych informacji o zmianach w interfejsie.
Aby podać tytuł panelu, użyj
android:accessibilityPaneTitle
. Możesz też zaktualizować tytuł panelu interfejsu, który jest zastępowany w czasie wykonywania za pomocą elementu setAccessibilityPaneTitle()
.
Możesz na przykład podać tytuł obszaru treści witryny,
Fragment
.
Nawigacja na podstawie nagłówka
Jeśli aplikacja wyświetla treści tekstowe zawierające nagłówki logiczne, ustaw atrybut android:accessibilityHeading
na true
w przypadku wystąpień atrybutu View
, które reprezentują te nagłówki. Dodając te nagłówki, umożliwiasz usługom ułatwień dostępu pomaganie użytkownikom w przechodzenie bezpośrednio z jednego nagłówka do drugiego. Każda usługa ułatwień dostępu może używać tej funkcji, aby ułatwić użytkownikom nawigację po interfejsie.
Wyświetlanie i nawigacja po grupie
Czytniki ekranu tradycyjnie używają
android:focusable
do
określić, kiedy powinni przeczytać
ViewGroup
lub zbiór
View
obiektów jako pojedynczą jednostkę. Dzięki temu
użytkownicy mogli zrozumieć, że wyświetlenia są ze sobą logicznie powiązane.
W Androidzie 8.1 i starszych musisz oznaczyć każdy obiekt View
w ramach ViewGroup
jako obiekt, który nie może być zaznaczony, a sam obiekt ViewGroup
jako obiekt, który może być zaznaczony. Ten
rozmieszczenie sprawiło, że niektóre wystąpienia obiektu View
zostały oznaczone jako możliwe do zaznaczenia w taki sposób,
korzystanie z nawigacji za pomocą klawiatury stało się niewygodne.
Od Androida 9 możesz używać atrybutu android:screenReaderFocusable
zamiast atrybutu android:focusable
w sytuacjach, gdy nadanie obiektowi View
właściwości focusable powoduje niepożądane konsekwencje. Czytniki ekranu
przenieś zaznaczenie na wszystkie elementy, które ustawiły android:screenReaderFocusable
lub android:focusable
do true
.
Działania wygodne
W Androidzie 9 można jeszcze wygodniej wykonywać działania w imieniu użytkowników:
- Interakcja z etykietkami
- Nowe funkcje ułatwień dostępu dają Ci dostęp do:
etykietek w interfejsie aplikacji. Używaj
getTooltipText()
aby odczytać tekst etykietki, i użyjACTION_SHOW_TOOLTIP
iACTION_HIDE_TOOLTIP
aby instruować instancjeView
, aby wyświetlały lub ich etykietki. - Dodane działania globalne
- Android 9 wprowadza obsługę 2 dodatkowych działań w aplikacji
AccessibilityService
. zajęcia. Twoja usługa może pomagać użytkownikom w blokowaniu urządzeń i robieniu zrzutów ekranu, odpowiednio za pomocą działańGLOBAL_ACTION_LOCK_SCREEN
iGLOBAL_ACTION_TAKE_SCREENSHOT
.
Szczegóły zmiany okna
Android 9 ułatwia śledzenie zmian w oknach aplikacji, gdy aplikacja tworzy wiele okien jednocześnie. Gdy wystąpi zdarzenie TYPE_WINDOWS_CHANGED
, użyj interfejsu API getWindowChanges()
, aby określić, jak zmieniły się okna. Podczas aktualizacji w trybie wielu okien każde
generuje własny zestaw zdarzeń.
Metoda getSource()
zwraca widok okna skojarzony z każdym zdarzeniem.
Jeśli aplikacja ma zdefiniowane tytuły panelu ułatwień dostępu dla obiektów View
, usługa może rozpoznać, kiedy interfejs użytkownika aplikacji został zaktualizowany. Gdy wystąpi zdarzenie TYPE_WINDOW_STATE_CHANGED
, użyj typów zwracanych przez getContentChangeTypes()
, aby określić, jak zmieniło się okno. Platforma może na przykład
wykrywa, czy panel ma nowy tytuł lub czy panel zniknął.
Obrót
Aby wyeliminować przypadkowe obracanie, dodaliśmy tryb, który blokuje bieżącą orientację nawet wtedy, gdy pozycja urządzenia się zmienia. Użytkownicy mogą aktywować rotację ręcznie, klikając przycisk na pasku systemowym.
W większości przypadków wpływ na zgodność aplikacji jest minimalny. Jeśli jednak aplikacja ma niestandardowe obrót lub używa nietypowej orientacji ekranu; mogą pojawić się problemy, które wcześniej nie były zauważone, ustawienie rotacji użytkowników zawsze było ustawione pionowo. Zachęcamy do sprawdzenia zachowania obracania w przypadku wszystkich kluczowych czynności w aplikacji i upewnienia się, że wszystkie ustawienia orientacji ekranu nadal zapewniają optymalne wrażenia.
Więcej informacji znajdziesz w artykule o związanych zmianach w zachowaniu.

Nowy tryb obracania umożliwia użytkownikom ręczne uruchamianie obracania za pomocą przycisku na pasku systemowym.
Tekst
Android 9 wprowadza te funkcje związane z tekstem platforma:
Wyliczony tekst: klasa
PrecomputedText
poprawia wydajność renderowania tekstu, umożliwiając wcześniejsze obliczenie i zapisanie w pamięci podręcznej wymaganych informacji. Umożliwia też aplikacji wykonywanie układu tekstu poza wątkiem głównym.Magnifier: klasa
Magnifier
to widżet platformowy, który udostępnia interfejs API Magnifier, zapewniając spójne działanie funkcji powiększania we wszystkich aplikacjach.Inteligentne łączenie: Android 9 ulepsza klasę
TextClassifier
, która wykorzystuje systemy uczące się do rozpoznawania niektórych encji w wybranym tekście i proponowania działań. Na przykładTextClassifier
może umożliwić aplikacji wykrycie, że użytkownik wybrał numer telefonu. Aplikacja może wtedy zasugerować, że użytkownik dzwoni za pomocą tego numeru. Funkcje wTextClassifier
zastępują funkcjonalność klasyLinkify
.Układ tekstu: kilka metod i atrybutów ułatwiających implementację projektu interfejsu użytkownika. Szczegółowe informacje znajdziesz w dokumentacji referencyjnej dotyczącej
TextView
Wcześniejsza konwersja plików DEX w ART
Na urządzeniach z Androidem 9 lub nowszym środowisko wykonawcze Androida Kompilator (ART) wyprzedzający dalszą optymalizację skompresowanego pliku wykonywalnego Dalvik plików DEX, konwertując pliki DEX w pakiecie aplikacji na kompaktową reprezentacją. Ta zmiana umożliwia szybsze uruchamianie aplikacji i korzystanie z niej mniej miejsca na dysku i pamięci RAM.
To ulepszenie dotyczy zwłaszcza urządzeń niskiej klasy z wolniejszym wejściem/wyjściem dysku Szybkość działania.
Śledzenie systemu na urządzeniu
Android 9 pozwala zapisywać ślady systemu z urządzenia, a następnie udostępnij swojemu zespołowi programistów raport o tych nagraniach. Ten raport obsługują wiele formatów, w tym HTML.
Dzięki zbieraniu tych zrzutów możesz rejestrować dane dotyczące czasu związanego z procesami i wątkami aplikacji oraz wyświetlać inne typy stanów urządzenia o znaczeniu globalnym.
Aby dowiedzieć się więcej o tym narzędziu, przeczytaj sekcję Wykonywanie na urządzeniu .