Android 9 (poziom API 28) wprowadza nowe, przydatne funkcje użytkowników i deweloperów. W tym dokumencie opisujemy nowości 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. Nie zapomnij też sprawdzić Zmiany w działaniu Androida 9 do nauki o obszarach, w których zmiany na platformie mogą wpłynąć na Twoje aplikacje.
Pozycjonowanie we wnętrzach z Wi-Fi RTT
![Nowe interfejsy API RTT obsługują pozycjonowanie w pomieszczeniach w Twoich aplikacjach.](https://developer.android.google.cn/static/images/about/versions/pie/rtt-nav.png?authuser=19&hl=pl)
Android 9 obsługuje platformę Wi-Fi zgodnie ze standardem IEEE 802.11-2016 protokołu RTT (Wi-Fi Round-Trip-Time, RTT), który pozwala wykorzystać 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. Urządzenie musi mieć
włączone usługi lokalizacyjne i skanowanie Wi-Fi (w polu
Ustawienia > lokalizacji), a aplikacja musi mieć
ACCESS_FINE_LOCATION
.
uprawnienia. Aby korzystać z RTT, urządzenie nie musi łączyć się z punktami dostępu.
Ze względu na ochronę prywatności tylko telefon jest w stanie określić odległość
punkt dostępu; punkty dostępu nie mają 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 z zakresu 1–2 metrów.
Dzięki takiej dokładności możesz tworzyć nowe funkcje, takie jak nawigacja w budynku i szczegółowe usługi oparte na lokalizacji, np. jednoznaczne sterowanie głosem (na przykład „Włącz to światło”) i informacji opartych na lokalizacji (np. „Czy są dostępne 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
![Ekran opcji programisty z różnymi rozmiarami wycięć](https://developer.android.google.cn/static/images/about/versions/pie/emulator-devoptions-cutout_2x.png?authuser=19&hl=pl)
Testowanie wycięcia w ekranie 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ć istnienie i miejsce docelowe
tych wycięć, użyj funkcji
getDisplayCutout()
.
nowy atrybut układu okna,
layoutInDisplayCutoutMode
umożliwia rozmieszczenie treści wokół wycięć w 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ń. Wszystkie z nich dostępne dla programistów kierujących reklamy na interfejs API na poziomie 28 lub wyższym.
![Powiadomienia o wiadomościach](https://developer.android.google.cn/static/images/about/versions/pie/p-messaging.jpg?authuser=19&hl=pl)
MessagingStyle z załączonym zdjęciem.
![Powiadomienie o wiadomości](https://developer.android.google.cn/static/images/about/versions/pie/p-replies.jpg?authuser=19&hl=pl)
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 w wersji 7.0 (poziom interfejsu API 24) można dodać działanie, aby odpowiedzieć wiadomości lub wpisywać tekst bezpośrednio z poziomu powiadomienia. Android 9 ulepsza tę funkcję, wprowadzając następujące ulepszenia:
Uproszczona obsługa uczestników rozmowy:
Person
jest używany do identyfikowania osób zaangażowanych w rozmowę, w tym awatary i identyfikatory URI. Wiele innych interfejsów API, takich jakaddMessage()
teraz użyj 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łanych przez system, gdy użytkownik przypadkowo zamknie powiadomienie o wiadomości. Możesz użyć tego dodatku, aby wstępnie wypełnić pola tekstowe w aplikacji, dokończyć jego 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:
setSemanticAction()
pozwala nadać działaniu semantyczne znaczenie, jako „oznacz jako przeczytane”, „usuń”, „odpowiedz”, i tak dalej.SmartReply: Android 9 obsługuje te same sugerowane odpowiedzi, które są dostępne komunikator Używaj
RemoteInput.setChoices()
udostępniając użytkownikowi tablicę standardowych odpowiedzi.
Ustawienia kanału, komunikaty i tryb Nie przeszkadzać
Wprowadzono kanały powiadomień w Androidzie 8.0, który pozwala utworzyć . Android 9 upraszcza ustawienia kanału powiadomień, wprowadzając te zmiany:
Blokowanie grup kanałów: użytkownicy mogą teraz blokować całe grupy kanałów w ustawieniach powiadomień dotyczących aplikacji. Za pomocą
isBlocked()
pozwala określić, kiedy grupa jest blokowana i w efekcie nie wysyłać żadnych i powiadomienia z kanałów należących do tej grupy.Aplikacja może też wysyłać zapytania o aktualne ustawienia grupy kanałów za pomocą nowy
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ć. Aby uzyskać więcej informacji na temat tych działań i dodatków, znajdziesz na zaktualizowanej liście stałych w
NotificationManager
odwołania. Informacje o reagowaniu na intencje transmisji znajdziesz tutaj: Komunikaty.NotificationManager.Policy
ma 3 nowe kategorie priorytetowe 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
ma też 7 nowych stałych narzędzia, za pomocą którego można wyłączyć powiadomienia wizualne:SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
zapobiega uruchamianiu powiadomień w trybie pełnoekranowym.SUPPRESSED_EFFECT_LIGHTS
blokuje diody powiadomień.SUPPRESSED_EFFECT_PEEK
zapobiega na chwilę prześlizgnięciu się powiadomień przez „podgląd” („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 plakietki na urządzeniach, które obsługują takie plakietki. Więcej informacji: Modyfikowanie plakietki powiadomieniaSUPPRESSED_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 korzystać ze strumieni jednocześnie z co najmniej dwóch fizycznych . Na urządzeniach z podwójnym przednim lub podwójnym tylnym aparatem można tworzyć innowacyjnych funkcji, których brak w połączeniu z jednym aparatem, takich jak zoom, bokeh i obraz stereo. Interfejs API umożliwia też wywoływanie transmisji z kamery, która automatycznie przełącza się między co najmniej 2 kamerami.
Inne ulepszenia dotyczące aparatu to m.in. dodatkowa sesja które pomagają ograniczyć opóźnienia w pierwszej kolejności, oraz umożliwiają udostępnianie, klienty aparatów obsługują różne przypadki użycia bez konieczności zatrzymywania i uruchamiania obraz z kamery. Dodaliśmy również interfejsy API do obsługi środowiska Flash pomocy i dostęp do OIS sygnatury czasowe 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
.
Wyjście monochromatyczne jest generowane za pomocą
YUV_420_888
w formacie Y jako skali szarości, U (Cb) jako 128, a V (Cr) jako 128.
Android 9 umożliwia też obsługę zewnętrznych urządzeń USB/UVC kamery włączone obsługiwanych urządzeniach.
ImageDecoder do elementów rysowalnych i map bitowych
Android 9 wprowadza
ImageDecoder
, co zapewnia zmodernizowane podejście do dekodowania obrazów. Użyj tych zajęć
zamiast BitmapFactory
i BitmapFactory.Options
API.
ImageDecoder
umożliwia utworzenie
Drawable
lub
Bitmap
z bufora bajtów, pliku
lub identyfikator 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ć
ustawienia domyślne, przekaż OnHeaderDecodedListener
do
decodeDrawable()
lub decodeBitmap()
. ImageDecoder
połączenia
onHeaderDecoded()
.
domyślną szerokością i wysokością obrazu, jeśli są one znane.
Jeśli zakodowany obraz jest animowanym plikiem GIF lub WebP, decodeDrawable()
zwraca
Drawable
, który jest instancją
AnimatedImageDrawable
.
zajęcia.
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 próbki. Przekaż wielkość próbki bezpośrednio do:setTargetSampleSize()
- Aby przyciąć obraz w zakresie skalowanego obrazu, wywołaj
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
AnimatedImageDrawable
klasy do rysowania i wyświetlania animowanych obrazów GIF i WebP.
AnimatedImageDrawable
działa podobnie jak
AnimatedVectorDrawable
.
w tym, że wątek renderowania napędza animacje obiektu AnimatedImageDrawable
.
Wątek renderowania również używa do dekodowania wątku roboczego, dzięki czemu dekodowanie nie skutkuje
zakłócania innych operacji w 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
udostępnia kilka metod umożliwiających dalsze modyfikowanie 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 z wykorzystaniem obrazów o wysokiej wydajności
Format pliku (HEIF)
lub HEIC), co zwiększa kompresję oraz zmniejsza ilość miejsca na dane i danych sieciowych
i ich wykorzystaniu. 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 multimediach są też dostępne w
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. Zobacz różnice w interfejsie API
.
W Androidzie 9 interfejs AAudio API dodaje
obsługa kilku dodatkowych atrybutów AAudioStream, w tym użycia, treści,
typ i gotowe wejście. Za pomocą tych atrybutów możesz tworzyć strumienie,
do obsługi VoIP lub kamery. Identyfikator sesji możesz też ustawić jako
powiązanie strumienia AAudio z submiksem, który może zawierać efekty. Użyj
AudioEffect
API do sterowania
efekty.
Android 9 wprowadza
Interfejs API AudioEffect
dla
przetwarzanie dynamiki.
Dzięki tym lekcjom możesz tworzyć efekty dźwiękowe na kanale, w tym:
korekcję, kompresję wielozakresową i ogranicznik – na wielu etapach.
liczbę pasm i etapów aktywnych można skonfigurować, a większość parametrów można
i kontrolowane 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ą zadeklarować szacowany rozmiar danych, sygnalizować wstępne pobieranie i określać
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 opóźniać duże żądania sieciowe. Gdy na
w sieci bez pomiaru, JobScheduler
może uruchamiać zadania pobierania z wyprzedzeniem,
poprawić wrażenia użytkowników, np. przez wstępne pobieranie nagłówków.
Przy dodawaniu zadań używaj narzędzia setEstimatedNetworkBytes()
,
setPrefetch()
,
i setRequiredNetwork()
gdy jest to wskazane, aby pomóc
JobScheduler
wykonuje pracę prawidłowo. 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
Wprowadzono Neural Networks API. w Androidzie 8.1 (poziom interfejsu API 27) i przyspieszyć uczenie maszynowe na urządzeniu na urządzeniu z Androidem. Android 9 rozszerza i ulepsza interfejs API, dodając obsługę 9 nowych operacji:
- Działania matematyczne związane z elementami:
- Operacje tablicowe:
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 – Ty
powinna zamiast tego przekazywać tylko
ANEURALNETWORKS_TENSOR_FLOAT32
aż do rozwiązania problemu.
Dodatkowo interfejs API wprowadza nową funkcję,
ANeuralNetworksModel_relaxComputationFloat32toFloat16()
który pozwala określić, czy obliczać
ANEURALNETWORKS_TENSOR_FLOAT32
z zakresem i precyzją równą 16-bitowej zmiennoprzecinkowemu IEEE 754
.
Platforma autouzupełniania
Android 9 wprowadza wiele ulepszeń dotyczących autouzupełniania usługi, które można wdrożyć, aby jeszcze bardziej zwiększyć wygodę użytkowników podczas wypełniania formularza formularzami. 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
Na obsługiwanych urządzeniach z Androidem 9 lub nowszym możliwość korzystania z zabezpieczonego potwierdzenia w Androidzie. 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 instrukcję, magazyn kluczy Androida otrzyma i zapisze
podpis kryptograficzny chroniony za pomocą mechanizmu uwierzytelniania wiadomości przy użyciu haszowania klucza.
(HMAC). Gdy magazyn kluczy Androida potwierdzi poprawność wiadomości, aplikacja
może użyć klucza wygenerowanego z usługi trustedConfirmationRequired
w
środowiska wykonawczego (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 przyjąć żadnych gwarancje poufności wykraczające poza te zapewniane przez platformę Android. W nie należy używać tego procesu do wyświetlania poufnych informacji, nie były zazwyczaj wyświetlane na urządzeniu użytkownika.
Wskazówki dotyczące dodawania obsługi potwierdzenia w Androidzie znajdziesz tutaj: Ochrona Androida Potwierdzenie Google.
Okno ujednoliconego uwierzytelniania biometrycznego
W Androidzie 9 system wyświetla okna uwierzytelniania biometrycznego w imieniu Twojej aplikacji. Ta funkcja zapewnia ustandaryzowany wygląd, styl i umiejscowienie co daje użytkownikom większą pewność, że zgadzają się zaufanego narzędzia do sprawdzania danych biometrycznych.
Jeśli aplikacja używa
FingerprintManager
aby wyświetlić użytkownikom okno uwierzytelniania odciskiem palca, przełącz się na używanie
BiometricPrompt
. 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.
Sprzętowy moduł zabezpieczeń
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:
- Ma własny procesor.
- Bezpieczne miejsce na dane.
- Prawdziwy generator liczb losowych.
- Dodatkowe mechanizmy zapobiegające manipulacjom i nieautoryzowanym instalowaniu pakietów aplikacji.
Podczas sprawdzania kluczy przechowywanych w StrongBox Keymaster systemie system potwierdza jego integralność w Trusted Execution Environment (TEE).
Aby dowiedzieć się więcej o korzystaniu z narzędzia Strongbox Keymaster, zobacz artykuł na temat zabezpieczeń sprzętu Moduł.
Bezpieczne importowanie kluczy do magazynu kluczy
Android 9 zapewnia dodatkowe zabezpieczenie odszyfrowywania kluczy przez dodanie aby bezpiecznie importować zaszyfrowane klucze do magazynu kluczy za pomocą Format klucza z kodowaniem ASN.1. Następnie Keymaster odszyfruje klucze w Magazyn kluczy, dzięki czemu zawartość kluczy nigdy nie jest wyświetlana jako zwykły tekst 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. Ten schemat ma opcję do umieszczenia w bloku podpisywania dokumentu potwierdzenia rotacji za każdym razem, certyfikat. Ta funkcja umożliwia podpisywanie aplikacji nowym podpisywaniem certyfikat, łącząc poprzednie certyfikaty podpisywania pliku APK z certyfikatem który został podpisany.
Więcej informacji o wykonywaniu rotacji kluczy za pomocą
apksigner
Opcja zezwalania na odszyfrowywanie klucza tylko na odblokowanych urządzeniach
W Androidzie 9 wprowadzono flagę unlockedDeviceRequired
. Ta opcja określa,
czy magazyn kluczy wymaga odblokowania ekranu przed zezwoleniem;
odszyfrowywanie jakichkolwiek trwających lub zapisanych danych przy użyciu określonego klucza; Typy te
kluczy dobrze nadaje się do szyfrowania danych wrażliwych i przechowywanych na dysku, takich jak
danych dotyczących zdrowia
lub firmowych danych. Ta flaga daje użytkownikom większą pewność, że
w przypadku utraty telefonu nie można odszyfrować danych, gdy urządzenie jest zablokowane
lub skradzione.
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 aplikacja współpracuje ze starszą wersją systemów wymagających potrójnego DES, użyj tego rodzaju szyfrowania danych logowania.
Więcej informacji o tym, jak zwiększyć bezpieczeństwo aplikacji, znajdziesz w artykule Bezpieczeństwo na Androidzie Programistów.
Wycofanie WPS
Ze względów bezpieczeństwa wycofaliśmy WPS (Wi-Fi Protected Setup).
Kopie zapasowe Androida
Android 9 dodaje nowe funkcje i opcje dla deweloperów związane w celu utworzenia i przywrócenia kopii zapasowej. Szczegółowe informacje o tych zmianach znajdziesz w dalszej części tego artykułu. sekcji.
Kopie zapasowe szyfrowania po stronie klienta
W Androidzie 9 dodano obsługę szyfrowania kopii zapasowych Androida za pomocą 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 skonfigurował ekran zablokować na swoim urządzeniu które wymaga kodu PIN, wzoru lub hasła do odblokowania.
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. Aby się uczyć więcej informacji o technologii kryjącej się za tę funkcję znajdziesz w artykule Google Cloud Key Vault dokument na temat usługi.
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.
Aby dowiedzieć się więcej o tworzeniu kopii zapasowej danych na urządzeniach z Androidem, przeczytaj artykuł Dane Omówienie kopii zapasowych.
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 zakupowej czytnik ekranu może ułatwić użytkownikom nawigację z jednej kategorii ofert do kolejnej, bez czytnika ekranu czytanie wszystkich elementów w danej kategorii przed przejściem do następnej.
Tytuły paneli ułatwień dostępu
W Androidzie 8.1 (poziom interfejsu API 27) i starszych wersjach usługi ułatwień dostępu nie zawsze określać, kiedy określony panel ekranu został zaktualizowany, na przykład kiedy aktywność zastępuje jeden fragment innym fragmentem. Panele składają się z: logicznie pogrupowane, powiązane wizualnie elementy interfejsu, które zwykle składają się 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ł panelu ułatwień dostępu, usługi ułatwień dostępu otrzymują bardziej szczegółowe informacje po zmianie panelu. 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 zostanie zastąpiony na stronie
w środowisku wykonawczym, wykorzystując setAccessibilityPaneTitle()
.
Możesz na przykład podać tytuł obszaru treści witryny,
Fragment
.
Nawigacja w oparciu o nagłówek
Jeśli aplikacja wyświetla zawartość tekstową z logicznymi nagłówkami, ustaw parametr
android:accessibilityHeading
atrybut do true
w przypadku wystąpień
View
reprezentujące te nagłówki. Według
dodając te nagłówki, zezwolisz usługom ułatwień dostępu na pomoc w nawigacji
bezpośrednio z jednego nagłówka do następnego. Tego ustawienia może używać każda usługa ułatwień dostępu
oraz usprawnianiem działań użytkowników Interfejs użytkownika.
Nawigacja w grupie i dane wyjściowe
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 zaznaczyć każdy obiekt View
ViewGroup
jako bez możliwości zaznaczenia, a sam ViewGroup
jako możliwy do zaznaczenia. 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.
Począwszy od Androida 9 możesz używać
android:screenReaderFocusable
zamiast atrybutu android:focusable
w sytuacjach, gdy
ustawienie obiektu View
jako możliwego do zaznaczenia ma niepożądane konsekwencje. Czytniki ekranu
umieść zaznaczenie na wszystkich elementach, 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 pomóc użytkownikom blokować urządzenia i robić zrzuty ekranu za pomocąGLOBAL_ACTION_LOCK_SCREEN
iGLOBAL_ACTION_TAKE_SCREENSHOT
działań.
Szczegóły zmiany okna
Android 9 ułatwia śledzenie aktualizacji okien aplikacji, gdy aplikacja
powoduje ponowne zaznaczenie wielu okien jednocześnie. Gdy
TYPE_WINDOWS_CHANGED
zachodzi zdarzenie, użyj funkcji
getWindowChanges()
API w celu określenia, jak zmieniły się okna. Podczas aktualizacji w trybie wielu okien każde
generuje własny zestaw zdarzeń.
getSource()
zwraca widok główny okna powiązanego z każdym zdarzeniem.
Jeśli aplikacja ma zdefiniowane tytuły panelu ułatwień dostępu dla swojej
obiekty View
, które usługa może rozpoznać.
gdy interfejs aplikacji jest aktualizowany. Gdy
TYPE_WINDOW_STATE_CHANGED
użyj typów zwróconych 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ć niezamierzone obroty, dodaliśmy tryb przypinania nawet jeśli położenie urządzenia się zmieni. 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 niewielki. 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 przyjrzyj się rotacji wszystkich kluczowych działań w aplikacji i upewnij się, Upewnij się, że wszystkie ustawienia orientacji ekranu i optymalnie korzystać z urządzenia.
Szczegółowe informacje znajdziesz w powiązanym działaniu zmian.
![Obrót urządzenia mobilnego z wyświetlonym nowym trybem rotacji, który umożliwia użytkownikom ręczne uruchamianie rotacji](https://developer.android.google.cn/static/images/about/versions/pie/rotate-changes.gif?authuser=19&hl=pl)
Nowy tryb rotacji umożliwia użytkownikom w razie potrzeby ręczne aktywowanie rotacji za pomocą przycisku na pasku systemowym.
Tekst
Android 9 wprowadza te funkcje związane z tekstem platforma:
Wstępnie obliczony tekst:
PrecomputedText
– zajęcia na poprawę i renderowania tekstu, dzięki czemu można obliczać i buforować wymagane informacji z wyprzedzeniem. Pozwala też aplikacji wyłączyć układ tekstu w wątku głównym.Lupa: klasa
Magnifier
to widżet na platformie udostępnia interfejs API powiększania, który pozwala we wszystkich aplikacjach.Smart Linkify: Android 9
TextClassifier
zajęcia, który wykorzystuje systemy uczące się do identyfikowania elementów w zaznaczonym tekście sugerowanie działań. Na przykładTextClassifier
może umożliwić aplikacji wykrywanie że użytkownik wybrał numer telefonu. Aplikacja może wtedy zasugerować, że użytkownik dzwoni za pomocą tego numeru. Funkcje dostępne wTextClassifier
zastąp funkcjonalność klasyLinkify
.Układ tekstu: kilka wygodnych metod i atrybutów ułatwia wdrożyć projekt 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 logów czasu możesz rejestrować dane o czasie związane z procesów i wątków oraz wyświetlanie innych typów urządzeń istotnych globalnie stanów.
Aby dowiedzieć się więcej o tym narzędziu, przeczytaj sekcję Wykonywanie na urządzeniu .