Android 17 dziś oficjalnie osiągnął stabilność platformy dzięki wersji beta 3. Oznacza to, że powierzchnia interfejsu API jest zablokowana. Możesz przeprowadzić ostateczne testy zgodności i przesłać do Sklepu Play aplikacje kierowane na Androida 17. Ponadto wersja beta 3 wprowadza wiele nowych funkcji, które pomogą Ci tworzyć lepsze, bezpieczniejsze i bardziej zintegrowane aplikacje.
Przygotuj swoje aplikacje, biblioteki, narzędzia i silniki gier
Jeśli tworzysz pakiet SDK, bibliotekę, narzędzie lub silnik gier, tym ważniejsze jest, aby przygotować teraz wszystkie niezbędne aktualizacje. Dzięki temu deweloperzy aplikacji i gier nie będą blokowani przez problemy ze zgodnością i będą mogli korzystać z najnowszych funkcji pakietu SDK. Poinformuj deweloperów, że do pełnej obsługi Androida 17 wymagane są aktualizacje.
Testowanie polega na zainstalowaniu w Google Play lub w inny sposób aplikacji produkcyjnej albo testowej korzystającej z Twojej biblioteki lub silnika na urządzeniu lub emulatorze z Androidem 17 w wersji beta 3. Sprawdź wszystkie ścieżki w aplikacji i poszukaj problemów z funkcjonalnością lub interfejsem. Aby skupić się na testowaniu, zapoznaj się ze zmianami w zachowaniu. Każda wersja Androida zawiera zmiany platformy, które zwiększają prywatność, bezpieczeństwo i ogólną wygodę użytkowników. Te zmiany mogą mieć wpływ na Twoje aplikacje. Oto kilka zmian, na których warto się skupić:
- Zmiana rozmiaru na dużych ekranach: gdy zaczniesz kierować aplikację na Androida 17, nie będziesz już mieć możliwości rezygnacji z zachowania orientacji, zmiany rozmiaru i ograniczeń proporcji na dużych ekranach.
- Dynamiczne wczytywanie kodu: jeśli Twoja aplikacja jest kierowana na Androida 17 lub nowszego, ochrona przed dynamicznym wczytywaniem kodu (DCL) wprowadzona w Androidzie 14 w przypadku plików DEX i JAR obejmuje teraz biblioteki natywne. Wszystkie pliki natywne wczytywane za pomocą funkcji System.load() muszą być oznaczone jako tylko do odczytu. W przeciwnym razie system zgłosi błąd UnsatisfiedLinkError.
- Domyślne włączanie CT: przejrzystość certyfikatów (CT) jest domyślnie włączona. (W Androidzie 16 funkcja CT jest dostępna, ale aplikacje musiały ją włączyć).
- Ochrona sieci lokalnej: aplikacje kierowane na Androida 17 lub nowszego mają domyślnie zablokowany dostęp do sieci lokalnej. Jeśli to możliwe, przejdź na selektory chroniące prywatność i użyj nowego uprawnienia ACCESS_LOCAL_NETWORK, aby uzyskać szeroki i trwały dostęp.
Ulepszenia multimediów i aparatu
Opcje dostosowywania selektora zdjęć
Android umożliwia teraz dostosowanie wyglądu selektora zdjęć, aby lepiej pasował do interfejsu aplikacji. Dzięki nowemu interfejsowi PhotoPickerUiCustomizationParams API możesz zmienić proporcje widoku siatki ze standardowego kwadratu 1:1 na wyświetlacz pionowy 9:16. Ta elastyczność obejmuje zarówno intencję ACTION_PICK_IMAGES, jak i wbudowany selektor zdjęć, co pozwala zachować spójny wygląd, gdy użytkownicy wchodzą w interakcję z multimediami.
To wszystko jest częścią naszych działań, które mają na celu zapewnienie, że selektor zdjęć na Androidzie chroniący prywatność będzie bezproblemowo pasował do Twojej aplikacji. Dowiedz się więcej o tym, jak możesz osadzić selektor zdjęć bezpośrednio w aplikacji, aby zapewnić jak najlepsze wrażenia.
val params = PhotoPickerUiCustomizationParams.Builder()
.setAspectRatio(PhotoPickerUiCustomizationParams.ASPECT_RATIO_PORTRAIT_9_16)
.build()
val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply {
putExtra(MediaStore.EXTRA_PICK_IMAGES_UI_CUSTOMIZATION_PARAMS, params)
}
startActivityForResult(intent, REQUEST_CODE)
Obsługa formatu obrazu RAW14: Android 17 wprowadza obsługę formatu obrazu RAW14 – de facto standardu branżowego w przypadku zaawansowanej fotografii cyfrowej – za pomocą nowej stałej ImageFormat.RAW14. RAW14 to format jednokanałowy, 14-bitowy na piksel, który wykorzystuje gęsto upakowany układ, w którym każde 4 kolejne piksele są upakowane w 7 bajtach.
Rozszerzenia aparatu zdefiniowane przez dostawcę: Android 17 dodaje rozszerzenia zdefiniowane przez dostawcę, aby umożliwić partnerom sprzętowym definiowanie i wdrażanie niestandardowych trybów rozszerzeń aparatu. Dzięki temu możesz korzystać z najlepszych i najnowszych funkcji aparatu, takich jak „Super Resolution” czy najnowocześniejsze ulepszenia oparte na AI. Możesz wysyłać zapytania o te tryby za pomocą interfejsu isExtensionSupported(int) API.
Interfejsy API typu urządzenia z aparatem: nowe interfejsy API Androida 17 umożliwiają wysyłanie zapytań o typ urządzenia, aby sprawdzić, czy aparat jest wbudowany, czy jest to zewnętrzna kamera internetowa USB, czy też aparat wirtualny.
Obsługa aparatów słuchowych Bluetooth LE Audio
Android zawiera teraz specjalną kategorię urządzeń dla aparatów słuchowych Bluetooth Low Energy (BLE) Audio. Dzięki dodaniu stałej AudioDeviceInfo.TYPE_BLE_HEARING_AID Twoja aplikacja może teraz odróżniać aparaty słuchowe od zwykłych zestawów słuchawkowych.
val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)
val isHearingAidConnected = devices.any { it.type == AudioDeviceInfo.TYPE_BLE_HEARING_AID }
Szczegółowe kierowanie dźwięku do aparatów słuchowych
Android 17 umożliwia użytkownikom niezależne zarządzanie tym, gdzie odtwarzane są określone dźwięki systemowe. Mogą oni kierować powiadomienia, dzwonki i alarmy do podłączonych aparatów słuchowych lub wbudowanego głośnika urządzenia.
Rozszerzony koder oprogramowania HE-AAC
Android 17 wprowadza dostarczany przez system rozszerzony koder oprogramowania HE-AAC. Ten koder obsługuje zarówno niskie, jak i wysokie szybkości transmisji bitów przy użyciu ujednoliconego kodowania mowy i dźwięku. Dostęp do tego kodera można uzyskać za pomocą interfejsu MediaCodec API, używając nazwy c2.android.xheaac.encoder lub wysyłając zapytanie o typ MIME audio/mp4a-latm.
val encoder = MediaCodec.createByCodecName("c2.android.xheaac.encoder")
val format = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, 48000, 1)
format.setInteger(MediaFormat.KEY_BIT_RATE, 24000)
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectXHE)
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)
Ulepszenia wydajności i baterii
Ograniczanie blokad wybudzania dzięki obsłudze słuchaczy alarmów allow-while-idle
Android 17 wprowadza nowy wariant AlarmManager.setExactAndAllowWhileIdle, który akceptuje OnAlarmListener zamiast PendingIntent. Ten nowy mechanizm oparty na wywołaniach zwrotnych jest idealny w przypadku aplikacji, które obecnie polegają na ciągłych blokadach wybudzania w celu wykonywania okresowych zadań, takich jak aplikacje do przesyłania wiadomości utrzymujące połączenia gniazd.
val alarmManager = getSystemService(AlarmManager::class.java)
val listener = AlarmManager.OnAlarmListener {
// Do work here
}
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000,
listener,
null
)
Aktualizacje dotyczące prywatności
Przycisk lokalizacji dostarczany przez system
Android wprowadza przycisk lokalizacji renderowany przez system, który można osadzić bezpośrednio w układzie aplikacji za pomocą biblioteki Android Jetpack. Gdy użytkownik naciśnie ten przycisk systemowy, Twoja aplikacja uzyska dostęp do dokładnej lokalizacji tylko w bieżącej sesji. Aby to wdrożyć, musisz zadeklarować uprawnienie USE_LOCATION_BUTTON.
Oddzielne ustawienia widoczności hasła dla klawiatur dotykowych i fizycznych
Ta funkcja dzieli dotychczasowe ustawienie systemowe „Pokaż hasła” na 2 odrębne preferencje użytkownika: jedną dla danych wejściowych dotykowych, a drugą dla danych wejściowych z klawiatury fizycznej. Znaki wpisywane za pomocą klawiatury fizycznej są teraz domyślnie natychmiast ukrywane.
val isPhysical = event.source and InputDevice.SOURCE_KEYBOARD == InputDevice.SOURCE_KEYBOARD val shouldShow = android.text.ShowSecretsSetting.shouldShowPassword(context, isPhysical)
Bezpieczeństwo
Wymuszone wczytywanie kodu dynamicznego tylko do odczytu
Aby zwiększyć bezpieczeństwo przed atakami polegającymi na wstrzykiwaniu kodu, Android wymaga teraz, aby dynamicznie wczytywane biblioteki natywne były tylko do odczytu. Jeśli Twoja aplikacja jest kierowana na Androida 17 lub nowszego, wszystkie pliki natywne wczytywane za pomocą funkcji System.load() muszą być wcześniej oznaczone jako tylko do odczytu.
val libraryFile = File(context.filesDir, "my_native_lib.so") // Mark the file as read-only before loading to comply with Android 17+ security requirements libraryFile.setReadOnly() System.load(libraryFile.absolutePath)
Hybrydowe podpisywanie plików APK za pomocą kryptografii postkwantowej (PQC)
Aby przygotować się na przyszłe postępy w dziedzinie informatyki kwantowej, Android wprowadza obsługę kryptografii postkwantowej (PQC) za pomocą nowego schematu podpisywania plików APK w wersji 3.2. Ten schemat wykorzystuje podejście hybrydowe, łącząc klasyczny podpis z podpisem ML-DSA.
Wygoda użytkowania i interfejs systemu
Lepsza obsługa widżetów na wyświetlaczach zewnętrznych
Ta funkcja poprawia spójność wizualną widżetów aplikacji, gdy są one wyświetlane na podłączonych lub zewnętrznych wyświetlaczach o różnej gęstości pikseli przy użyciu jednostek DP lub SP.
val options = appWidgetManager.getAppWidgetOptions(appWidgetId) val displayId = options.getInt(AppWidgetManager.OPTION_APPWIDGET_DISPLAY_ID) val remoteViews = RemoteViews(context.packageName, R.layout.widget_layout) remoteViews.setViewPadding( R.id.container, 16f, 8f, 16f, 8f, TypedValue.COMPLEX_UNIT_DIP )
Ukryte etykiety aplikacji na ekranie głównym
Android udostępnia teraz ustawienie użytkownika, które umożliwia ukrywanie nazw aplikacji (etykiet) w obszarze roboczym na ekranie głównym. Upewnij się, że ikona aplikacji jest wyraźna i rozpoznawalna.
Interaktywny obraz w obrazie na komputerze
W przeciwieństwie do tradycyjnego trybu obraz w obrazie te przypięte okna pozostają interaktywne, a jednocześnie zawsze znajdują się na wierzchu innych okien aplikacji w trybie pulpitu.
val appTask: ActivityManager.AppTask = activity.getSystemService(ActivityManager::class.java).appTasks[0]
appTask.requestWindowingLayer(
ActivityManager.AppTask.WINDOWING_LAYER_PINNED,
context.mainExecutor,
object : OutcomeReceiver<Int, Exception> {
override fun onResult(result: Int) {
if (result == ActivityManager.AppTask.WINDOWING_LAYER_REQUEST_GRANTED) {
// Task successfully moved to pinned layer
}
}
override fun onError(error: Exception) {}
}
)
Przeprojektowany pasek narzędzi do nagrywania ekranu
Główna funkcjonalność
Ustawienia wykluczania aplikacji z sieci VPN
Za pomocą nowej intencji ACTION_VPN_APP_EXCLUSION_SETTINGS Twoja aplikacja może uruchomić ekran ustawień zarządzany przez system, na którym użytkownicy mogą wybrać aplikacje, które mają pomijać tunel VPN.
val intent = Intent(Settings.ACTION_VPN_APP_EXCLUSION_SETTINGS)
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
}
Aktualizacje interfejsu OpenJDK 25 i 21 API
Ta aktualizacja wprowadza wiele funkcji i ulepszeń z OpenJDK 21 i OpenJDK 25, w tym najnowszą obsługę Unicode i ulepszoną obsługę SSL dla nazwanych grup w TLS.
Pierwsze kroki z Androidem 17
Możesz zarejestrować dowolne obsługiwane urządzenie Pixel lub użyć 64-bitowych obrazów systemu w Android Emulator.
- Skompiluj aplikację za pomocą nowego pakietu SDK i zgłoś problemy na stronie opinii.
- Przetestuj bieżącą aplikację pod kątem zgodności i sprawdź, czy zmiany w Androidzie 17 mają na nią wpływ.
Więcej informacji znajdziesz na stronie dla deweloperów Androida 17.
Czytaj dalej
-
Nowości o produktach
Podczas Google I/O 2026 ogłosimy 17 najważniejszych informacji dla deweloperów Androida, które dotyczą produktywności opartej na agentach, standardu interfejsu Compose First oraz wydajnych multimediów i adaptacyjnego tworzenia aplikacji na potrzeby rozwijającego się ekosystemu.
Matthew McCullough • 8 min czytania
-
Nowości o produktach
Podczas dzisiejszego programu The Android Show ogłosiliśmy, że Android przechodzi z systemu operacyjnego na system Intelligence, co stwarza więcej możliwości interakcji z Twoimi aplikacjami.
Matthew McCullough • 4 min czytania
-
r.r.
Nowości o produktach
Dziś ulepszamy tworzenie aplikacji na Androida dzięki Gemma 4 – naszemu najnowszemu modelowi otwartemu, który został zaprojektowany z myślą o złożonym rozumowaniu i autonomicznych możliwościach wywoływania narzędzi.
Matthew McCullough • 2 min czytania
Bądź na bieżąco
Otrzymuj co tydzień najnowsze informacje o tworzeniu aplikacji na Androida na swoją skrzynkę odbiorczą.